UNPKG

@wordpress/editor

Version:
164 lines (138 loc) 5.24 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = EntitiesSavedStates; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _components = require("@wordpress/components"); var _i18n = require("@wordpress/i18n"); var _data = require("@wordpress/data"); var _coreData = require("@wordpress/core-data"); var _compose = require("@wordpress/compose"); var _icons = require("@wordpress/icons"); var _entityTypeList = _interopRequireDefault(require("./entity-type-list")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const TRANSLATED_SITE_PROTPERTIES = { title: (0, _i18n.__)('Title'), description: (0, _i18n.__)('Tagline'), site_logo: (0, _i18n.__)('Logo'), show_on_front: (0, _i18n.__)('Show on front'), page_on_front: (0, _i18n.__)('Page on front') }; function EntitiesSavedStates({ close }) { const saveButtonRef = (0, _element.useRef)(); const { dirtyEntityRecords } = (0, _data.useSelect)(select => { const dirtyRecords = select(_coreData.store).__experimentalGetDirtyEntityRecords(); // Remove site object and decouple into its edited pieces. const dirtyRecordsWithoutSite = dirtyRecords.filter(record => !(record.kind === 'root' && record.name === 'site')); const siteEdits = select(_coreData.store).getEntityRecordEdits('root', 'site'); const siteEditsAsEntities = []; for (const property in siteEdits) { siteEditsAsEntities.push({ kind: 'root', name: 'site', title: TRANSLATED_SITE_PROTPERTIES[property] || property, property }); } const dirtyRecordsWithSiteItems = [...dirtyRecordsWithoutSite, ...siteEditsAsEntities]; return { dirtyEntityRecords: dirtyRecordsWithSiteItems }; }, []); const { saveEditedEntityRecord, __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits } = (0, _data.useDispatch)(_coreData.store); // To group entities by type. const partitionedSavables = Object.values((0, _lodash.groupBy)(dirtyEntityRecords, 'name')); // 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 saveCheckedEntities = () => { const entitiesToSave = dirtyEntityRecords.filter(({ kind, name, key, property }) => { return !(0, _lodash.some)(unselectedEntities, elt => elt.kind === kind && elt.name === name && elt.key === key && elt.property === property); }); close(entitiesToSave); const siteItemsToSave = []; entitiesToSave.forEach(({ kind, name, key, property }) => { if ('root' === kind && 'site' === name) { siteItemsToSave.push(property); } else { saveEditedEntityRecord(kind, name, key); } }); saveSpecifiedEntityEdits('root', 'site', undefined, siteItemsToSave); }; // Explicitly define this with no argument passed. Using `close` on // its own will use the event object in place of the expected saved entities. const dismissPanel = (0, _element.useCallback)(() => close(), [close]); const [saveDialogRef, saveDialogProps] = (0, _compose.__experimentalUseDialog)({ onClose: () => dismissPanel() }); return (0, _element.createElement)("div", (0, _extends2.default)({ ref: saveDialogRef }, saveDialogProps, { className: "entities-saved-states__panel" }), (0, _element.createElement)("div", { className: "entities-saved-states__panel-header" }, (0, _element.createElement)(_components.Button, { ref: saveButtonRef, isPrimary: true, disabled: dirtyEntityRecords.length - unselectedEntities.length === 0, onClick: saveCheckedEntities, className: "editor-entities-saved-states__save-button" }, (0, _i18n.__)('Save')), (0, _element.createElement)(_components.Button, { icon: _icons.close, onClick: dismissPanel, label: (0, _i18n.__)('Close panel') })), (0, _element.createElement)("div", { className: "entities-saved-states__text-prompt" }, (0, _element.createElement)("strong", null, (0, _i18n.__)('Select the changes you want to save')), (0, _element.createElement)("p", null, (0, _i18n.__)('Some changes may affect other areas of your site.'))), partitionedSavables.map(list => { return (0, _element.createElement)(_entityTypeList.default, { key: list[0].name, list: list, closePanel: dismissPanel, unselectedEntities: unselectedEntities, setUnselectedEntities: setUnselectedEntities }); })); } //# sourceMappingURL=index.js.map