@elementor/editor-documents 0.11.16 → 0.11.18
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 +25 -0
- package/dist/index.d.mts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -4
- package/src/sync/sync-store.ts +12 -1
- package/src/sync/utils.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 0.11.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1e4f28b: Integrate global classes with publish button
|
|
8
|
+
- da38fa9: Remove unused exports and add missing dependencies.
|
|
9
|
+
- Updated dependencies [da38fa9]
|
|
10
|
+
- Updated dependencies [910044c]
|
|
11
|
+
- Updated dependencies [5caf78d]
|
|
12
|
+
- Updated dependencies [ad6fde0]
|
|
13
|
+
- Updated dependencies [b8e2a85]
|
|
14
|
+
- @elementor/editor-v1-adapters@0.10.0
|
|
15
|
+
- @elementor/editor@0.18.0
|
|
16
|
+
|
|
17
|
+
## 0.11.17
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [6c4d4a7]
|
|
22
|
+
- Updated dependencies [a8b60c9]
|
|
23
|
+
- Updated dependencies [1a9c943]
|
|
24
|
+
- @elementor/editor@0.17.5
|
|
25
|
+
- @elementor/editor-v1-adapters@0.9.1
|
|
26
|
+
- @elementor/store@0.9.0
|
|
27
|
+
|
|
3
28
|
## 0.11.16
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _reduxjs_toolkit from '@reduxjs/toolkit';
|
|
2
|
+
import * as immer_dist_internal_js from 'immer/dist/internal.js';
|
|
2
3
|
import { PayloadAction } from '@elementor/store';
|
|
3
|
-
import * as immer_dist_internal from 'immer/dist/internal';
|
|
4
4
|
|
|
5
5
|
declare function useActiveDocument(): Document | null;
|
|
6
6
|
|
|
@@ -99,17 +99,17 @@ type State = {
|
|
|
99
99
|
activeId: Document['id'] | null;
|
|
100
100
|
hostId: Document['id'] | null;
|
|
101
101
|
};
|
|
102
|
-
declare const slice:
|
|
103
|
-
init(state:
|
|
104
|
-
activateDocument(state:
|
|
105
|
-
setAsHost(state:
|
|
106
|
-
updateActiveDocument(state:
|
|
107
|
-
startSaving(state:
|
|
108
|
-
endSaving(state:
|
|
109
|
-
startSavingDraft: (state:
|
|
110
|
-
endSavingDraft(state:
|
|
111
|
-
markAsDirty(state:
|
|
112
|
-
markAsPristine(state:
|
|
102
|
+
declare const slice: _reduxjs_toolkit.Slice<State, {
|
|
103
|
+
init(state: immer_dist_internal_js.WritableDraft<State>, { payload }: PayloadAction<State>): void;
|
|
104
|
+
activateDocument(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
105
|
+
setAsHost(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document["id"]>): void;
|
|
106
|
+
updateActiveDocument(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Partial<Document>>): void;
|
|
107
|
+
startSaving(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
108
|
+
endSaving(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
109
|
+
startSavingDraft: (state: immer_dist_internal_js.WritableDraft<State>) => void;
|
|
110
|
+
endSavingDraft(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
111
|
+
markAsDirty(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
112
|
+
markAsPristine(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
113
113
|
}, "documents">;
|
|
114
114
|
|
|
115
115
|
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, slice };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _reduxjs_toolkit from '@reduxjs/toolkit';
|
|
2
|
+
import * as immer_dist_internal_js from 'immer/dist/internal.js';
|
|
2
3
|
import { PayloadAction } from '@elementor/store';
|
|
3
|
-
import * as immer_dist_internal from 'immer/dist/internal';
|
|
4
4
|
|
|
5
5
|
declare function useActiveDocument(): Document | null;
|
|
6
6
|
|
|
@@ -99,17 +99,17 @@ type State = {
|
|
|
99
99
|
activeId: Document['id'] | null;
|
|
100
100
|
hostId: Document['id'] | null;
|
|
101
101
|
};
|
|
102
|
-
declare const slice:
|
|
103
|
-
init(state:
|
|
104
|
-
activateDocument(state:
|
|
105
|
-
setAsHost(state:
|
|
106
|
-
updateActiveDocument(state:
|
|
107
|
-
startSaving(state:
|
|
108
|
-
endSaving(state:
|
|
109
|
-
startSavingDraft: (state:
|
|
110
|
-
endSavingDraft(state:
|
|
111
|
-
markAsDirty(state:
|
|
112
|
-
markAsPristine(state:
|
|
102
|
+
declare const slice: _reduxjs_toolkit.Slice<State, {
|
|
103
|
+
init(state: immer_dist_internal_js.WritableDraft<State>, { payload }: PayloadAction<State>): void;
|
|
104
|
+
activateDocument(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
105
|
+
setAsHost(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document["id"]>): void;
|
|
106
|
+
updateActiveDocument(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Partial<Document>>): void;
|
|
107
|
+
startSaving(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
108
|
+
endSaving(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
109
|
+
startSavingDraft: (state: immer_dist_internal_js.WritableDraft<State>) => void;
|
|
110
|
+
endSavingDraft(state: immer_dist_internal_js.WritableDraft<State>, action: PayloadAction<Document>): void;
|
|
111
|
+
markAsDirty(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
112
|
+
markAsPristine(state: immer_dist_internal_js.WritableDraft<State>): void;
|
|
113
113
|
}, "documents">;
|
|
114
114
|
|
|
115
115
|
export { type Document, type ExitTo, type ExtendedWindow, type V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, slice };
|
package/dist/index.js
CHANGED
|
@@ -312,6 +312,10 @@ function syncOnExitToChange() {
|
|
|
312
312
|
function syncOnDocumentChange() {
|
|
313
313
|
const { markAsDirty, markAsPristine } = slice.actions;
|
|
314
314
|
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("document/save/set-is-modified"), () => {
|
|
315
|
+
const isSaving = selectActiveDocument((0, import_store5.__getState)())?.isSaving;
|
|
316
|
+
if (isSaving) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
315
319
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
316
320
|
if (currentDocument.editor.isChanged) {
|
|
317
321
|
(0, import_store5.__dispatch)(markAsDirty());
|
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 } from '@elementor/store';\n\nimport { slice } from '../store';\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\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\nfunction debounce< TArgs extends unknown[] >( fn: ( ...args: TArgs ) => unknown, timeout: number ) {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\t\t}, timeout );\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\nexport function 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","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"],"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';\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\nfunction debounce< TArgs extends unknown[] >( fn: ( ...args: TArgs ) => unknown, timeout: number ) {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\t\t}, timeout );\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":";;;;;;;;;;;;;;;;;;;;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;;;ACN5C,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;;;ADrDO,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,cAAc,SAAU,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,eAAe,SAAU,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;AAEA,SAAS,SAAqC,IAAmC,SAAkB;AAClG,MAAI;AAEJ,SAAO,IAAK,SAAiB;AAC5B,iBAAc,KAAM;AAEpB,YAAQ,WAAY,MAAM;AACzB,SAAI,GAAG,IAAK;AAAA,IACb,GAAG,OAAQ;AAAA,EACZ;AACD;;;APnKe,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;;;AXJA,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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -136,7 +136,7 @@ import {
|
|
|
136
136
|
commandStartEvent,
|
|
137
137
|
v1ReadyEvent
|
|
138
138
|
} from "@elementor/editor-v1-adapters";
|
|
139
|
-
import { __dispatch } from "@elementor/store";
|
|
139
|
+
import { __dispatch, __getState as getState } from "@elementor/store";
|
|
140
140
|
|
|
141
141
|
// src/sync/utils.ts
|
|
142
142
|
function getV1DocumentsManager() {
|
|
@@ -287,6 +287,10 @@ function syncOnExitToChange() {
|
|
|
287
287
|
function syncOnDocumentChange() {
|
|
288
288
|
const { markAsDirty, markAsPristine } = slice.actions;
|
|
289
289
|
listenTo(commandEndEvent("document/save/set-is-modified"), () => {
|
|
290
|
+
const isSaving = selectActiveDocument(getState())?.isSaving;
|
|
291
|
+
if (isSaving) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
290
294
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
291
295
|
if (currentDocument.editor.isChanged) {
|
|
292
296
|
__dispatch(markAsDirty());
|
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 } from '@elementor/store';\n\nimport { slice } from '../store';\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\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\nfunction debounce< TArgs extends unknown[] >( fn: ( ...args: TArgs ) => unknown, timeout: number ) {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\t\t}, timeout );\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\nexport function 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/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';\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\nfunction debounce< TArgs extends unknown[] >( fn: ( ...args: TArgs ) => unknown, timeout: number ) {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\t\t}, timeout );\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-documents",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.18",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,12 +39,15 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor": "0.
|
|
43
|
-
"@elementor/editor-v1-adapters": "0.
|
|
44
|
-
"@elementor/store": "0.
|
|
42
|
+
"@elementor/editor": "0.18.0",
|
|
43
|
+
"@elementor/editor-v1-adapters": "0.10.0",
|
|
44
|
+
"@elementor/store": "0.9.0",
|
|
45
45
|
"@wordpress/i18n": "^5.13.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"react": "^18.3.1"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"tsup": "^8.3.5"
|
|
49
52
|
}
|
|
50
53
|
}
|
package/src/sync/sync-store.ts
CHANGED
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
type ListenerEvent,
|
|
7
7
|
v1ReadyEvent,
|
|
8
8
|
} from '@elementor/editor-v1-adapters';
|
|
9
|
-
import { __dispatch } from '@elementor/store';
|
|
9
|
+
import { __dispatch, __getState as getState } from '@elementor/store';
|
|
10
10
|
|
|
11
11
|
import { slice } from '../store';
|
|
12
|
+
import { selectActiveDocument } from '../store/selectors';
|
|
12
13
|
import { type Document } from '../types';
|
|
13
14
|
import { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';
|
|
14
15
|
|
|
@@ -136,6 +137,16 @@ function syncOnDocumentChange() {
|
|
|
136
137
|
const { markAsDirty, markAsPristine } = slice.actions;
|
|
137
138
|
|
|
138
139
|
listenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {
|
|
140
|
+
// Skip the dirtiness check if the document is currently being saved, to prevent the UI
|
|
141
|
+
// from showing a disabled publish button while there is a save process. The state will
|
|
142
|
+
// be updated when the save process ends and the whole document state it normalized
|
|
143
|
+
// (see `syncOnDocumentSave`)
|
|
144
|
+
const isSaving = selectActiveDocument( getState() )?.isSaving;
|
|
145
|
+
|
|
146
|
+
if ( isSaving ) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
139
150
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
140
151
|
|
|
141
152
|
if ( currentDocument.editor.isChanged ) {
|
package/src/sync/utils.ts
CHANGED
|
@@ -27,7 +27,7 @@ export function getV1DocumentsExitTo( documentData: V1Document ) {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
function getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {
|
|
31
31
|
return documentData?.config?.panel?.show_copy_and_share ?? false;
|
|
32
32
|
}
|
|
33
33
|
|