UNPKG

@wordpress/commands

Version:
106 lines (103 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useCommandLoader; var _element = require("@wordpress/element"); var _data = require("@wordpress/data"); var _store = require("../store"); /** * WordPress dependencies */ /** * Internal dependencies */ /** * Attach a command loader to the command palette. Used for dynamic commands. * * @param {import('../store/actions').WPCommandLoaderConfig} loader command loader config. * * @example * ```js * import { useCommandLoader } from '@wordpress/commands'; * import { post, page, layout, symbolFilled } from '@wordpress/icons'; * * const icons = { * post, * page, * wp_template: layout, * wp_template_part: symbolFilled, * }; * * function usePageSearchCommandLoader( { search } ) { * // Retrieve the pages for the "search" term. * const { records, isLoading } = useSelect( ( select ) => { * const { getEntityRecords } = select( coreStore ); * const query = { * search: !! search ? search : undefined, * per_page: 10, * orderby: search ? 'relevance' : 'date', * }; * return { * records: getEntityRecords( 'postType', 'page', query ), * isLoading: ! select( coreStore ).hasFinishedResolution( * 'getEntityRecords', * 'postType', 'page', query ] * ), * }; * }, [ search ] ); * * // Create the commands. * const commands = useMemo( () => { * return ( records ?? [] ).slice( 0, 10 ).map( ( record ) => { * return { * name: record.title?.rendered + ' ' + record.id, * label: record.title?.rendered * ? record.title?.rendered * : __( '(no title)' ), * icon: icons[ postType ], * callback: ( { close } ) => { * const args = { * postType, * postId: record.id, * ...extraArgs, * }; * document.location = addQueryArgs( 'site-editor.php', args ); * close(); * }, * }; * } ); * }, [ records, history ] ); * * return { * commands, * isLoading, * }; * } * * useCommandLoader( { * name: 'myplugin/page-search', * hook: usePageSearchCommandLoader, * } ); * ``` */ function useCommandLoader(loader) { const { registerCommandLoader, unregisterCommandLoader } = (0, _data.useDispatch)(_store.store); (0, _element.useEffect)(() => { if (loader.disabled) { return; } registerCommandLoader({ name: loader.name, hook: loader.hook, context: loader.context }); return () => { unregisterCommandLoader(loader.name); }; }, [loader.name, loader.hook, loader.context, loader.disabled, registerCommandLoader, unregisterCommandLoader]); } //# sourceMappingURL=use-command-loader.js.map