UNPKG

@wordpress/editor

Version:
85 lines (82 loc) 2.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useIsDirty = void 0; var _data = require("@wordpress/data"); var _coreData = require("@wordpress/core-data"); var _element = require("@wordpress/element"); /** * WordPress dependencies */ /** * Custom hook that determines if any entities are dirty (edited) and provides a way to manage selected/unselected entities. * * @return {Object} An object containing the following properties: * - dirtyEntityRecords: An array of dirty entity records. * - isDirty: A boolean indicating if there are any dirty entity records. * - setUnselectedEntities: A function to set the unselected entities. * - unselectedEntities: An array of unselected entities. */ const useIsDirty = () => { const { editedEntities, siteEdits, siteEntityConfig } = (0, _data.useSelect)(select => { const { __experimentalGetDirtyEntityRecords, getEntityRecordEdits, getEntityConfig } = select(_coreData.store); return { editedEntities: __experimentalGetDirtyEntityRecords(), siteEdits: getEntityRecordEdits('root', 'site'), siteEntityConfig: getEntityConfig('root', 'site') }; }, []); const dirtyEntityRecords = (0, _element.useMemo)(() => { var _siteEntityConfig$met; // Remove site object and decouple into its edited pieces. const editedEntitiesWithoutSite = editedEntities.filter(record => !(record.kind === 'root' && record.name === 'site')); const siteEntityLabels = (_siteEntityConfig$met = siteEntityConfig?.meta?.labels) !== null && _siteEntityConfig$met !== void 0 ? _siteEntityConfig$met : {}; const editedSiteEntities = []; for (const property in siteEdits) { editedSiteEntities.push({ kind: 'root', name: 'site', title: siteEntityLabels[property] || property, property }); } return [...editedEntitiesWithoutSite, ...editedSiteEntities]; }, [editedEntities, siteEdits, siteEntityConfig]); // Unchecked entities to be ignored by save function. const [unselectedEntities, _setUnselectedEntities] = (0, _element.useState)([]); const setUnselectedEntities = ({ kind, name, key, property }, checked) => { if (checked) { _setUnselectedEntities(unselectedEntities.filter(elt => elt.kind !== kind || elt.name !== name || elt.key !== key || elt.property !== property)); } else { _setUnselectedEntities([...unselectedEntities, { kind, name, key, property }]); } }; const isDirty = dirtyEntityRecords.length - unselectedEntities.length > 0; return { dirtyEntityRecords, isDirty, setUnselectedEntities, unselectedEntities }; }; exports.useIsDirty = useIsDirty; //# sourceMappingURL=use-is-dirty.js.map