hooks_use-register-media-manager.js

import { React } from '@gravityforms/libraries';
import { useMediaManagerContext } from '../contexts/media-manager-context';

const { useEffect } = React;

/**
 * @module useRegisterMediaManager
 * @description A hook that registers a media manager and handles cleanup.
 *
 * @since 4.1.0
 *
 * @param {string}              [id]            - The media manager id.
 * @param {function}            [onMediaSelect] - The callback to run when media is selected.
 * @param {Record<string, any>} [options]       - The options for the media manager.
 */
const useRegisterMediaManager = ( {
	id,
	onMediaSelect,
	options,
} ) => {
	const { registerMediaManager } = useMediaManagerContext();

	useEffect( () => {
		// Register the media manager and get the cleanup function.
		const unregister = registerMediaManager( {
			id,
			onMediaSelect,
			options,
		} );

		// Return the cleanup function to be called when the component unmounts or when any of the dependencies change.
		return unregister;
	}, [ id, onMediaSelect, options, registerMediaManager ] );
};

export default useRegisterMediaManager;