@elementor/editor-documents 0.11.19 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +2 -0
- package/src/sync/document-modified-status.ts +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 0.12.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c3a0125: Clean modified status on global classes save.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [e798985]
|
|
12
|
+
- Updated dependencies [4c2935b]
|
|
13
|
+
- Updated dependencies [0909b4b]
|
|
14
|
+
- @elementor/editor-v1-adapters@0.11.0
|
|
15
|
+
- @elementor/editor@0.18.3
|
|
16
|
+
|
|
17
|
+
## 0.11.20
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [959e02c]
|
|
22
|
+
- @elementor/editor-v1-adapters@0.10.2
|
|
23
|
+
- @elementor/editor@0.18.2
|
|
24
|
+
|
|
3
25
|
## 0.11.19
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -15,6 +15,9 @@ declare function useHostDocument(): Document | null;
|
|
|
15
15
|
|
|
16
16
|
declare function useNavigateToDocument(): (id: number) => Promise<void>;
|
|
17
17
|
|
|
18
|
+
declare function getDocumentModifiedStatus(): boolean;
|
|
19
|
+
declare function setDocumentModifiedStatus(status: boolean): void;
|
|
20
|
+
|
|
18
21
|
type ExitTo = 'dashboard' | 'all_posts' | 'this_post';
|
|
19
22
|
type Document = {
|
|
20
23
|
id: number;
|
|
@@ -112,4 +115,4 @@ declare const slice: _reduxjs_toolkit.Slice<State, {
|
|
|
112
115
|
markAsPristine(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
113
116
|
}, "documents">;
|
|
114
117
|
|
|
115
|
-
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, slice };
|
|
118
|
+
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, getDocumentModifiedStatus, setDocumentModifiedStatus, slice };
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,9 @@ declare function useHostDocument(): Document | null;
|
|
|
15
15
|
|
|
16
16
|
declare function useNavigateToDocument(): (id: number) => Promise<void>;
|
|
17
17
|
|
|
18
|
+
declare function getDocumentModifiedStatus(): boolean;
|
|
19
|
+
declare function setDocumentModifiedStatus(status: boolean): void;
|
|
20
|
+
|
|
18
21
|
type ExitTo = 'dashboard' | 'all_posts' | 'this_post';
|
|
19
22
|
type Document = {
|
|
20
23
|
id: number;
|
|
@@ -112,4 +115,4 @@ declare const slice: _reduxjs_toolkit.Slice<State, {
|
|
|
112
115
|
markAsPristine(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
113
116
|
}, "documents">;
|
|
114
117
|
|
|
115
|
-
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, slice };
|
|
118
|
+
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, getDocumentModifiedStatus, setDocumentModifiedStatus, slice };
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,8 @@ __export(index_exports, {
|
|
|
24
24
|
__useActiveDocumentActions: () => useActiveDocumentActions,
|
|
25
25
|
__useHostDocument: () => useHostDocument,
|
|
26
26
|
__useNavigateToDocument: () => useNavigateToDocument,
|
|
27
|
+
getDocumentModifiedStatus: () => getDocumentModifiedStatus,
|
|
28
|
+
setDocumentModifiedStatus: () => setDocumentModifiedStatus,
|
|
27
29
|
slice: () => slice
|
|
28
30
|
});
|
|
29
31
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -375,6 +377,16 @@ function useNavigateToDocument() {
|
|
|
375
377
|
}, []);
|
|
376
378
|
}
|
|
377
379
|
|
|
380
|
+
// src/sync/document-modified-status.ts
|
|
381
|
+
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
382
|
+
var import_store9 = require("@elementor/store");
|
|
383
|
+
function getDocumentModifiedStatus() {
|
|
384
|
+
return selectActiveDocument((0, import_store9.__getState)())?.isDirty ?? false;
|
|
385
|
+
}
|
|
386
|
+
function setDocumentModifiedStatus(status) {
|
|
387
|
+
(0, import_editor_v1_adapters4.__privateRunCommandSync)("document/save/set-is-modified", { status }, { internal: true });
|
|
388
|
+
}
|
|
389
|
+
|
|
378
390
|
// src/index.ts
|
|
379
391
|
init();
|
|
380
392
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -383,6 +395,8 @@ init();
|
|
|
383
395
|
__useActiveDocumentActions,
|
|
384
396
|
__useHostDocument,
|
|
385
397
|
__useNavigateToDocument,
|
|
398
|
+
getDocumentModifiedStatus,
|
|
399
|
+
setDocumentModifiedStatus,
|
|
386
400
|
slice
|
|
387
401
|
});
|
|
388
402
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/init.ts","../src/hooks/use-sync-document-title.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-host-document.ts","../src/components/logic-hooks.tsx","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts"],"sourcesContent":["import init from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport { slice } from './store';\n\nexport * from './types';\n\ninit();\n","import { injectIntoLogic } from '@elementor/editor';\nimport { __registerSlice } from '@elementor/store';\n\nimport { LogicHooks } from './components/logic-hooks';\nimport { slice } from './store';\nimport { syncStore } from './sync';\n\nexport default function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import { type Document, type ExtendedWindow, type V1Document } from '../types';\n\nexport function getV1DocumentsManager() {\n\tconst documentsManager = ( window as unknown as ExtendedWindow ).elementor?.documents;\n\n\tif ( ! documentsManager ) {\n\t\tthrow new Error( 'Elementor Editor V1 documents manager not found' );\n\t}\n\n\treturn documentsManager;\n}\n\nexport function getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference =\n\t\t( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nfunction getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nimport useActiveDocument from './use-active-document';\n\nexport default function useActiveDocumentActions() {\n\tconst document = useActiveDocument();\n\n\tconst permalink = document?.links?.permalink ?? '';\n\n\tconst save = useCallback( () => runCommand( 'document/save/default' ), [] );\n\n\tconst saveDraft = useCallback( () => runCommand( 'document/save/draft' ), [] );\n\n\tconst saveTemplate = useCallback( () => openRoute( 'library/save-template' ), [] );\n\n\tconst copyAndShare = useCallback( () => {\n\t\tnavigator.clipboard.writeText( permalink );\n\t}, [ permalink ] );\n\n\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t\tcopyAndShare,\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tawait runCommand( 'editor/documents/switch', {\n\t\t\tid,\n\t\t\tsetAsInitial: true,\n\t\t} );\n\n\t\tconst url = new URL( window.location.href );\n\n\t\turl.searchParams.set( 'post', id.toString() );\n\t\turl.searchParams.delete( 'active-document' );\n\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n"],"mappings":"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","names":["import_store","import_store","useSelector","import_store","useSelector","import_store","import_store","init","listenTo","getState","import_react","import_editor_v1_adapters","runCommand","openRoute","import_react","import_editor_v1_adapters","runCommand"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/init.ts","../src/hooks/use-sync-document-title.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-host-document.ts","../src/components/logic-hooks.tsx","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts","../src/sync/document-modified-status.ts"],"sourcesContent":["import init from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport { getDocumentModifiedStatus, setDocumentModifiedStatus } from './sync/document-modified-status';\n\nexport { slice } from './store';\n\nexport * from './types';\n\ninit();\n","import { injectIntoLogic } from '@elementor/editor';\nimport { __registerSlice } from '@elementor/store';\n\nimport { LogicHooks } from './components/logic-hooks';\nimport { slice } from './store';\nimport { syncStore } from './sync';\n\nexport default function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import { type Document, type ExtendedWindow, type V1Document } from '../types';\n\nexport function getV1DocumentsManager() {\n\tconst documentsManager = ( window as unknown as ExtendedWindow ).elementor?.documents;\n\n\tif ( ! documentsManager ) {\n\t\tthrow new Error( 'Elementor Editor V1 documents manager not found' );\n\t}\n\n\treturn documentsManager;\n}\n\nexport function getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference =\n\t\t( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nfunction getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nimport useActiveDocument from './use-active-document';\n\nexport default function useActiveDocumentActions() {\n\tconst document = useActiveDocument();\n\n\tconst permalink = document?.links?.permalink ?? '';\n\n\tconst save = useCallback( () => runCommand( 'document/save/default' ), [] );\n\n\tconst saveDraft = useCallback( () => runCommand( 'document/save/draft' ), [] );\n\n\tconst saveTemplate = useCallback( () => openRoute( 'library/save-template' ), [] );\n\n\tconst copyAndShare = useCallback( () => {\n\t\tnavigator.clipboard.writeText( permalink );\n\t}, [ permalink ] );\n\n\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t\tcopyAndShare,\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tawait runCommand( 'editor/documents/switch', {\n\t\t\tid,\n\t\t\tsetAsInitial: true,\n\t\t} );\n\n\t\tconst url = new URL( window.location.href );\n\n\t\turl.searchParams.set( 'post', id.toString() );\n\t\turl.searchParams.delete( 'active-document' );\n\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","import { __privateRunCommandSync as runCommandSync } from '@elementor/editor-v1-adapters';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getDocumentModifiedStatus() {\n\treturn selectActiveDocument( getState() )?.isDirty ?? false;\n}\n\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAgC;AAChC,IAAAA,gBAAgC;;;ACDhC,mBAA0B;AAC1B,kBAAmB;;;ACDnB,IAAAC,gBAA6C;;;ACA7C,mBAAkD;AAMlD,IAAM,iBAAiB,CAAE,UAAkB,MAAM,UAAU;AAC3D,IAAM,iBAAiB,CAAE,UAAkB,MAAM,UAAU;AAC3D,IAAM,eAAe,CAAE,UAAkB,MAAM,UAAU;AAElD,IAAM,2BAAuB;AAAA,EAAkB;AAAA,EAAgB;AAAA,EAAgB,CAAE,UAAU,aACjG,YAAY,SAAU,QAAS,IAAI,SAAU,QAAS,IAAI;AAC3D;AAEO,IAAM,yBAAqB;AAAA,EAAkB;AAAA,EAAgB;AAAA,EAAc,CAAE,UAAU,WAC7F,UAAU,SAAU,MAAO,IAAI,SAAU,MAAO,IAAI;AACrD;;;ADZe,SAAR,oBAAqC;AAC3C,aAAO,cAAAC,eAAa,oBAAqB;AAC1C;;;AENA,IAAAC,gBAA6C;AAI9B,SAAR,kBAAmC;AACzC,aAAO,cAAAC,eAAa,kBAAmB;AACxC;;;AHAe,SAAR,uBAAwC;AAC9C,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,eAAe,gBAAgB;AAErC,QAAM,WAAW,kBAAkB,eAAe,KAAK,UAAU,QAAQ,iBAAiB;AAE1F,8BAAW,MAAM;AAEhB,QAAK,UAAU,UAAU,QAAY;AACpC;AAAA,IACD;AAGA,UAAM,YAAQ,gBAAI,4BAA4B,WAAY,EAAE,QAAS,MAAM,SAAS,KAAM;AAE1F,WAAO,SAAS,QAAQ;AAAA,EACzB,GAAG,CAAE,UAAU,KAAM,CAAE;AACxB;;;AIrBO,SAAS,aAAa;AAC5B,uBAAqB;AAErB,SAAO;AACR;;;ACNA,IAAAC,gBAAkD;AAUlD,IAAM,eAAsB;AAAA,EAC3B,UAAU,CAAC;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AACT;AAIA,SAAS,gBAAiB,OAA2C;AACpE,SAAO,CAAC,EAAI,MAAM,YAAY,MAAM,SAAU,MAAM,QAAS;AAC9D;AAEO,IAAM,YAAQ,6BAAe;AAAA,EACnC,MAAM;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACT,KAAM,OAAO,EAAE,QAAQ,GAA4B;AAClD,YAAM,WAAW,QAAQ;AACzB,YAAM,SAAS,QAAQ;AACvB,YAAM,WAAW,QAAQ;AAAA,IAC1B;AAAA,IAEA,iBAAkB,OAAO,QAAoC;AAC5D,YAAM,SAAU,OAAO,QAAQ,EAAG,IAAI,OAAO;AAC7C,YAAM,WAAW,OAAO,QAAQ;AAAA,IACjC;AAAA,IAEA,UAAW,OAAO,QAA4C;AAC7D,YAAM,SAAS,OAAO;AAAA,IACvB;AAAA,IAEA,qBAAsB,OAAO,QAA+C;AAC3E,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,IAAI;AAAA,UAClC,GAAG,MAAM,SAAU,MAAM,QAAS;AAAA,UAClC,GAAG,OAAO;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAAA,IAEA,YAAa,OAAQ;AACpB,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,EAAE,WAAW;AAAA,MAC7C;AAAA,IACD;AAAA,IAEA,UAAW,OAAO,QAAoC;AACrD,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,IAAI;AAAA,UAClC,GAAG,OAAO;AAAA,UACV,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAAA,IAEA,kBAAkB,CAAE,UAAW;AAC9B,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,EAAE,gBAAgB;AAAA,MAClD;AAAA,IACD;AAAA,IAEA,eAAgB,OAAO,QAAoC;AAC1D,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,IAAI;AAAA,UAClC,GAAG,OAAO;AAAA,UACV,eAAe;AAAA,QAChB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,YAAa,OAAQ;AACpB,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,EAAE,UAAU;AAAA,MAC5C;AAAA,IACD;AAAA,IAEA,eAAgB,OAAQ;AACvB,UAAK,gBAAiB,KAAM,GAAI;AAC/B,cAAM,SAAU,MAAM,QAAS,EAAE,UAAU;AAAA,MAC5C;AAAA,IACD;AAAA,EACD;AACD,CAAE;;;AC5FF,gCAOO;AACP,IAAAC,gBAAmD;AACnD,mBAAyB;;;ACPlB,SAAS,wBAAwB;AACvC,QAAM,mBAAqB,OAAsC,WAAW;AAE5E,MAAK,CAAE,kBAAmB;AACzB,UAAM,IAAI,MAAO,iDAAkD;AAAA,EACpE;AAEA,SAAO;AACR;AAEO,SAAS,qBAAsB,cAA2B;AAChE,QAAM,iBACH,OAAsC,WAAW,iBAAkB,SAAU,KAAK;AAErF,UAAS,gBAAiB;AAAA,IACzB,KAAK;AACJ,aAAO,aAAa,OAAO,KAAK;AAAA,IAEjC,KAAK;AACJ,aAAO,aAAa,OAAO,KAAK;AAAA,IAEjC,KAAK;AAAA,IACL;AACC,aAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AACD;AAEA,SAAS,8BAA+B,cAAkC;AACzE,SAAO,cAAc,QAAQ,OAAO,uBAAuB;AAC5D;AAEO,SAAS,uBAAwB,cAA2B;AAClE,SAAO,aAAa,OAAO,KAAK,aAAa;AAC9C;AAEO,SAAS,oBAAqB,cAAqC;AAEzE,QAAM,wBAAwB,aAAa,OAAO,UAAU,eAAe,aAAa;AACxF,QAAM,YAAY,qBAAsB,YAAa;AAErD,SAAO;AAAA,IACN,IAAI,aAAa;AAAA,IACjB,OAAO,aAAa,UAAU,SAAS,IAAK,YAAa;AAAA,IACzD,MAAM;AAAA,MACL,OAAO,aAAa,OAAO;AAAA,MAC3B,OAAO,aAAa,OAAO,MAAM;AAAA,IAClC;AAAA,IACA,QAAQ;AAAA,MACP,OAAO,aAAa,OAAO,OAAO;AAAA,MAClC,OAAO,aAAa,OAAO,OAAO;AAAA,IACnC;AAAA,IACA,OAAO;AAAA,MACN,WAAW,uBAAwB,YAAa;AAAA,MAChD,cAAc;AAAA,IACf;AAAA,IACA,SAAS,aAAa,OAAO,aAAa;AAAA,IAC1C,UAAU,aAAa,OAAO;AAAA,IAC9B,eAAe;AAAA,IACf,aAAa;AAAA,MACZ,oBAAoB,aAAa,OAAO,OAAO,wBAAwB;AAAA,MACvE,kBAAkB,8BAA+B,YAAa;AAAA,IAC/D;AAAA,IACA,SAAS;AAAA,MACR,SAAS,aAAa,OAAO,KAAK;AAAA,IACnC;AAAA,EACD;AACD;;;ADpDO,SAAS,YAAY;AAC3B,qBAAmB;AACnB,qBAAmB;AACnB,qBAAmB;AACnB,oBAAkB;AAClB,uBAAqB;AACrB,qBAAmB;AACpB;AAEA,SAAS,qBAAqB;AAC7B,QAAM,EAAE,MAAAC,MAAK,IAAI,MAAM;AAEvB,gCAAAC,uBAAU,wCAAa,GAAG,MAAM;AAC/B,UAAM,mBAAmB,sBAAsB;AAE/C,UAAM,WAAW,OAAO,QAAS,iBAAiB,SAAU,EAAE;AAAA,MAC7D,CAAE,KAAiC,CAAE,IAAI,QAAS,MAAO;AACxD,YAAK,EAAG,IAAI,oBAAqB,QAAS;AAE1C,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAEA;AAAA,MACCD,MAAM;AAAA,QACL;AAAA,QACA,QAAQ,iBAAiB,aAAa;AAAA,QACtC,UAAU,iBAAiB,aAAa;AAAA,MACzC,CAAE;AAAA,IACH;AAAA,EACD,CAAE;AACH;AAEA,SAAS,qBAAqB;AAC7B,QAAM,EAAE,kBAAkB,UAAU,IAAI,MAAM;AAE9C,gCAAAC,uBAAU,2CAAiB,uBAAwB,GAAG,MAAM;AAC3D,UAAM,mBAAmB,sBAAsB;AAC/C,UAAM,kBAAkB,oBAAqB,iBAAiB,WAAW,CAAE;AAE3E,kCAAY,iBAAkB,eAAgB,CAAE;AAEhD,QAAK,iBAAiB,aAAa,MAAM,gBAAgB,IAAK;AAC7D,oCAAY,UAAW,gBAAgB,EAAG,CAAE;AAAA,IAC7C;AAAA,EACD,CAAE;AACH;AAEA,SAAS,qBAAqB;AAC7B,QAAM,EAAE,aAAa,WAAW,kBAAkB,eAAe,IAAI,MAAM;AAE3E,QAAM,UAAU,CAAE,MAAsB;AACvC,UAAM,QAAQ;AAKd,WAAO,MAAM,MAAM,WAAW;AAAA,EAC/B;AAEA,gCAAAA,uBAAU,6CAAmB,oBAAqB,GAAG,CAAE,MAAO;AAC7D,QAAK,QAAS,CAAE,GAAI;AACnB,oCAAY,iBAAiB,CAAE;AAC/B;AAAA,IACD;AAEA,kCAAY,YAAY,CAAE;AAAA,EAC3B,CAAE;AAEF,gCAAAA,uBAAU,2CAAiB,oBAAqB,GAAG,CAAE,MAAO;AAC3D,UAAM,iBAAiB,oBAAqB,sBAAsB,EAAE,WAAW,CAAE;AAEjF,QAAK,QAAS,CAAE,GAAI;AACnB,oCAAY,eAAgB,cAAe,CAAE;AAAA,IAC9C,OAAO;AACN,oCAAY,UAAW,cAAe,CAAE;AAAA,IACzC;AAAA,EACD,CAAE;AACH;AAEA,SAAS,oBAAoB;AAC5B,QAAM,EAAE,qBAAqB,IAAI,MAAM;AAEvC,QAAM,kBAAc,uBAAU,CAAE,MAAsB;AACrD,UAAM,QAAQ;AAEd,QAAK,EAAI,gBAAgB,MAAM,MAAM,WAAa;AACjD;AAAA,IACD;AAEA,UAAM,kBAAkB,sBAAsB,EAAE,WAAW;AAC3D,UAAM,WAAW,gBAAgB,UAAU,SAAS,IAAK,YAAa;AAEtE,kCAAY,qBAAsB,EAAE,OAAO,SAAS,CAAE,CAAE;AAAA,EACzD,GAAG,GAAI;AAEP,gCAAAA,uBAAU,2CAAiB,4BAA6B,GAAG,WAAY;AACxE;AAEA,SAAS,qBAAqB;AAC7B,QAAM,EAAE,qBAAqB,IAAI,MAAM;AAEvC,QAAM,mBAAe,uBAAU,CAAE,MAAsB;AACtD,UAAM,QAAQ;AAEd,QAAK,EAAI,aAAa,MAAM,MAAM,WAAa;AAC9C;AAAA,IACD;AAEA,UAAM,kBAAkB,sBAAsB,EAAE,WAAW;AAC3D,UAAM,YAAY,qBAAsB,eAAgB;AACxD,UAAM,YAAY,uBAAwB,eAAgB;AAE1D,kCAAY,qBAAsB,EAAE,OAAO,EAAE,cAAc,WAAW,UAAU,EAAE,CAAE,CAAE;AAAA,EACvF,GAAG,GAAI;AAEP,gCAAAA,uBAAU,2CAAiB,4BAA6B,GAAG,YAAa;AACzE;AAEA,SAAS,uBAAuB;AAC/B,QAAM,EAAE,aAAa,eAAe,IAAI,MAAM;AAE9C,gCAAAA,uBAAU,2CAAiB,+BAAgC,GAAG,MAAM;AAKnE,UAAM,WAAW,yBAAsB,cAAAC,YAAS,CAAE,GAAG;AAErD,QAAK,UAAW;AACf;AAAA,IACD;AAEA,UAAM,kBAAkB,sBAAsB,EAAE,WAAW;AAE3D,QAAK,gBAAgB,OAAO,WAAY;AACvC,oCAAY,YAAY,CAAE;AAC1B;AAAA,IACD;AAEA,kCAAY,eAAe,CAAE;AAAA,EAC9B,CAAE;AACH;;;APxJe,SAAR,OAAwB;AAC9B,YAAU;AAEV,qCAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AACH;AAEA,SAAS,YAAY;AACpB,qCAAiB,KAAM;AAEvB,YAAU;AACX;;;ASpBA,IAAAC,gBAA4B;AAC5B,IAAAC,6BAAmF;AAIpE,SAAR,2BAA4C;AAClD,QAAM,WAAW,kBAAkB;AAEnC,QAAM,YAAY,UAAU,OAAO,aAAa;AAEhD,QAAM,WAAO,2BAAa,UAAM,2BAAAC,qBAAY,uBAAwB,GAAG,CAAC,CAAE;AAE1E,QAAM,gBAAY,2BAAa,UAAM,2BAAAA,qBAAY,qBAAsB,GAAG,CAAC,CAAE;AAE7E,QAAM,mBAAe,2BAAa,UAAM,2BAAAC,oBAAW,uBAAwB,GAAG,CAAC,CAAE;AAEjF,QAAM,mBAAe,2BAAa,MAAM;AACvC,cAAU,UAAU,UAAW,SAAU;AAAA,EAC1C,GAAG,CAAE,SAAU,CAAE;AAEjB,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC1BA,IAAAC,gBAA4B;AAC5B,IAAAC,6BAAkD;AAEnC,SAAR,wBAAyC;AAC/C,aAAO,2BAAa,OAAQ,OAAgB;AAC3C,cAAM,2BAAAC,qBAAY,2BAA2B;AAAA,MAC5C;AAAA,MACA,cAAc;AAAA,IACf,CAAE;AAEF,UAAM,MAAM,IAAI,IAAK,OAAO,SAAS,IAAK;AAE1C,QAAI,aAAa,IAAK,QAAQ,GAAG,SAAS,CAAE;AAC5C,QAAI,aAAa,OAAQ,iBAAkB;AAE3C,YAAQ,aAAc,CAAC,GAAG,IAAI,GAAI;AAAA,EACnC,GAAG,CAAC,CAAE;AACP;;;ACjBA,IAAAC,6BAA0D;AAC1D,IAAAC,gBAAuC;AAIhC,SAAS,4BAA4B;AAC3C,SAAO,yBAAsB,cAAAC,YAAS,CAAE,GAAG,WAAW;AACvD;AAEO,SAAS,0BAA2B,QAAkB;AAC5D,iCAAAC,yBAAgB,iCAAiC,EAAE,OAAO,GAAG,EAAE,UAAU,KAAK,CAAE;AACjF;;;AZIA,KAAK;","names":["import_store","import_store","useSelector","import_store","useSelector","import_store","import_store","init","listenTo","getState","import_react","import_editor_v1_adapters","runCommand","openRoute","import_react","import_editor_v1_adapters","runCommand","import_editor_v1_adapters","import_store","getState","runCommandSync"]}
|
package/dist/index.mjs
CHANGED
|
@@ -350,6 +350,16 @@ function useNavigateToDocument() {
|
|
|
350
350
|
}, []);
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
+
// src/sync/document-modified-status.ts
|
|
354
|
+
import { __privateRunCommandSync as runCommandSync } from "@elementor/editor-v1-adapters";
|
|
355
|
+
import { __getState as getState2 } from "@elementor/store";
|
|
356
|
+
function getDocumentModifiedStatus() {
|
|
357
|
+
return selectActiveDocument(getState2())?.isDirty ?? false;
|
|
358
|
+
}
|
|
359
|
+
function setDocumentModifiedStatus(status) {
|
|
360
|
+
runCommandSync("document/save/set-is-modified", { status }, { internal: true });
|
|
361
|
+
}
|
|
362
|
+
|
|
353
363
|
// src/index.ts
|
|
354
364
|
init();
|
|
355
365
|
export {
|
|
@@ -357,6 +367,8 @@ export {
|
|
|
357
367
|
useActiveDocumentActions as __useActiveDocumentActions,
|
|
358
368
|
useHostDocument as __useHostDocument,
|
|
359
369
|
useNavigateToDocument as __useNavigateToDocument,
|
|
370
|
+
getDocumentModifiedStatus,
|
|
371
|
+
setDocumentModifiedStatus,
|
|
360
372
|
slice
|
|
361
373
|
};
|
|
362
374
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.ts","../src/hooks/use-sync-document-title.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-host-document.ts","../src/components/logic-hooks.tsx","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts","../src/index.ts"],"sourcesContent":["import { injectIntoLogic } from '@elementor/editor';\nimport { __registerSlice } from '@elementor/store';\n\nimport { LogicHooks } from './components/logic-hooks';\nimport { slice } from './store';\nimport { syncStore } from './sync';\n\nexport default function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import { type Document, type ExtendedWindow, type V1Document } from '../types';\n\nexport function getV1DocumentsManager() {\n\tconst documentsManager = ( window as unknown as ExtendedWindow ).elementor?.documents;\n\n\tif ( ! documentsManager ) {\n\t\tthrow new Error( 'Elementor Editor V1 documents manager not found' );\n\t}\n\n\treturn documentsManager;\n}\n\nexport function getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference =\n\t\t( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nfunction getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nimport useActiveDocument from './use-active-document';\n\nexport default function useActiveDocumentActions() {\n\tconst document = useActiveDocument();\n\n\tconst permalink = document?.links?.permalink ?? '';\n\n\tconst save = useCallback( () => runCommand( 'document/save/default' ), [] );\n\n\tconst saveDraft = useCallback( () => runCommand( 'document/save/draft' ), [] );\n\n\tconst saveTemplate = useCallback( () => openRoute( 'library/save-template' ), [] );\n\n\tconst copyAndShare = useCallback( () => {\n\t\tnavigator.clipboard.writeText( permalink );\n\t}, [ permalink ] );\n\n\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t\tcopyAndShare,\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tawait runCommand( 'editor/documents/switch', {\n\t\t\tid,\n\t\t\tsetAsInitial: true,\n\t\t} );\n\n\t\tconst url = new URL( window.location.href );\n\n\t\turl.searchParams.set( 'post', id.toString() );\n\t\turl.searchParams.delete( 'active-document' );\n\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","import init from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport { slice } from './store';\n\nexport * from './types';\n\ninit();\n"],"mappings":"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","names":["useSelector","useSelector","init","useCallback","runCommand"]}
|
|
1
|
+
{"version":3,"sources":["../src/init.ts","../src/hooks/use-sync-document-title.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-host-document.ts","../src/components/logic-hooks.tsx","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts","../src/sync/document-modified-status.ts","../src/index.ts"],"sourcesContent":["import { injectIntoLogic } from '@elementor/editor';\nimport { __registerSlice } from '@elementor/store';\n\nimport { LogicHooks } from './components/logic-hooks';\nimport { slice } from './store';\nimport { syncStore } from './sync';\n\nexport default function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import { type Document, type ExtendedWindow, type V1Document } from '../types';\n\nexport function getV1DocumentsManager() {\n\tconst documentsManager = ( window as unknown as ExtendedWindow ).elementor?.documents;\n\n\tif ( ! documentsManager ) {\n\t\tthrow new Error( 'Elementor Editor V1 documents manager not found' );\n\t}\n\n\treturn documentsManager;\n}\n\nexport function getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference =\n\t\t( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nfunction getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nimport useActiveDocument from './use-active-document';\n\nexport default function useActiveDocumentActions() {\n\tconst document = useActiveDocument();\n\n\tconst permalink = document?.links?.permalink ?? '';\n\n\tconst save = useCallback( () => runCommand( 'document/save/default' ), [] );\n\n\tconst saveDraft = useCallback( () => runCommand( 'document/save/draft' ), [] );\n\n\tconst saveTemplate = useCallback( () => openRoute( 'library/save-template' ), [] );\n\n\tconst copyAndShare = useCallback( () => {\n\t\tnavigator.clipboard.writeText( permalink );\n\t}, [ permalink ] );\n\n\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t\tcopyAndShare,\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tawait runCommand( 'editor/documents/switch', {\n\t\t\tid,\n\t\t\tsetAsInitial: true,\n\t\t} );\n\n\t\tconst url = new URL( window.location.href );\n\n\t\turl.searchParams.set( 'post', id.toString() );\n\t\turl.searchParams.delete( 'active-document' );\n\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","import { __privateRunCommandSync as runCommandSync } from '@elementor/editor-v1-adapters';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getDocumentModifiedStatus() {\n\treturn selectActiveDocument( getState() )?.isDirty ?? false;\n}\n\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n","import init from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport { getDocumentModifiedStatus, setDocumentModifiedStatus } from './sync/document-modified-status';\n\nexport { slice } from './store';\n\nexport * from './types';\n\ninit();\n"],"mappings":"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","names":["useSelector","useSelector","init","useCallback","runCommand","getState","getState"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-documents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor": "0.18.
|
|
43
|
-
"@elementor/editor-v1-adapters": "0.
|
|
42
|
+
"@elementor/editor": "0.18.3",
|
|
43
|
+
"@elementor/editor-v1-adapters": "0.11.0",
|
|
44
44
|
"@elementor/store": "0.9.0",
|
|
45
45
|
"@elementor/utils": "0.4.0",
|
|
46
46
|
"@wordpress/i18n": "^5.13.0"
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ export {
|
|
|
7
7
|
useActiveDocumentActions as __useActiveDocumentActions,
|
|
8
8
|
} from './hooks';
|
|
9
9
|
|
|
10
|
+
export { getDocumentModifiedStatus, setDocumentModifiedStatus } from './sync/document-modified-status';
|
|
11
|
+
|
|
10
12
|
export { slice } from './store';
|
|
11
13
|
|
|
12
14
|
export * from './types';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { __privateRunCommandSync as runCommandSync } from '@elementor/editor-v1-adapters';
|
|
2
|
+
import { __getState as getState } from '@elementor/store';
|
|
3
|
+
|
|
4
|
+
import { selectActiveDocument } from '../store/selectors';
|
|
5
|
+
|
|
6
|
+
export function getDocumentModifiedStatus() {
|
|
7
|
+
return selectActiveDocument( getState() )?.isDirty ?? false;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function setDocumentModifiedStatus( status: boolean ) {
|
|
11
|
+
runCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );
|
|
12
|
+
}
|