UNPKG

@wordpress/block-library

Version:
104 lines (88 loc) 3.95 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.CREATE_NAVIGATION_MENU_SUCCESS = exports.CREATE_NAVIGATION_MENU_PENDING = exports.CREATE_NAVIGATION_MENU_IDLE = exports.CREATE_NAVIGATION_MENU_ERROR = void 0; exports.default = useCreateNavigationMenu; var _blocks = require("@wordpress/blocks"); var _coreData = require("@wordpress/core-data"); var _data = require("@wordpress/data"); var _element = require("@wordpress/element"); var _useGenerateDefaultNavigationTitle = _interopRequireDefault(require("./use-generate-default-navigation-title")); /** * WordPress dependencies */ /** * Internal dependencies */ const CREATE_NAVIGATION_MENU_SUCCESS = 'success'; exports.CREATE_NAVIGATION_MENU_SUCCESS = CREATE_NAVIGATION_MENU_SUCCESS; const CREATE_NAVIGATION_MENU_ERROR = 'error'; exports.CREATE_NAVIGATION_MENU_ERROR = CREATE_NAVIGATION_MENU_ERROR; const CREATE_NAVIGATION_MENU_PENDING = 'pending'; exports.CREATE_NAVIGATION_MENU_PENDING = CREATE_NAVIGATION_MENU_PENDING; const CREATE_NAVIGATION_MENU_IDLE = 'idle'; exports.CREATE_NAVIGATION_MENU_IDLE = CREATE_NAVIGATION_MENU_IDLE; function useCreateNavigationMenu(clientId) { let postStatus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'publish'; const [status, setStatus] = (0, _element.useState)(CREATE_NAVIGATION_MENU_IDLE); const [value, setValue] = (0, _element.useState)(null); const [error, setError] = (0, _element.useState)(null); const { saveEntityRecord } = (0, _data.useDispatch)(_coreData.store); const generateDefaultTitle = (0, _useGenerateDefaultNavigationTitle.default)(clientId); // This callback uses data from the two placeholder steps and only creates // a new navigation menu when the user completes the final step. const create = (0, _element.useCallback)(async function () { let title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let blocks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; // Guard against creating Navigations without a title. // Note you can pass no title, but if one is passed it must be // a string otherwise the title may end up being empty. if (title && typeof title !== 'string') { setError('Invalid title supplied when creating Navigation Menu.'); setStatus(CREATE_NAVIGATION_MENU_ERROR); throw new Error(`Value of supplied title argument was not a string.`); } setStatus(CREATE_NAVIGATION_MENU_PENDING); setValue(null); setError(null); if (!title) { title = await generateDefaultTitle().catch(err => { setError(err === null || err === void 0 ? void 0 : err.message); setStatus(CREATE_NAVIGATION_MENU_ERROR); throw new Error('Failed to create title when saving new Navigation Menu.', { cause: err }); }); } const record = { title, content: (0, _blocks.serialize)(blocks), status: postStatus }; // Return affords ability to await on this function directly return saveEntityRecord('postType', 'wp_navigation', record).then(response => { setValue(response); setStatus(CREATE_NAVIGATION_MENU_SUCCESS); return response; }).catch(err => { setError(err === null || err === void 0 ? void 0 : err.message); setStatus(CREATE_NAVIGATION_MENU_ERROR); throw new Error('Unable to save new Navigation Menu', { cause: err }); }); }, [_blocks.serialize, saveEntityRecord]); return { create, status, value, error, isIdle: status === CREATE_NAVIGATION_MENU_IDLE, isPending: status === CREATE_NAVIGATION_MENU_PENDING, isSuccess: status === CREATE_NAVIGATION_MENU_SUCCESS, isError: status === CREATE_NAVIGATION_MENU_ERROR }; } //# sourceMappingURL=use-create-navigation-menu.js.map