@elementor/editor-documents 0.8.3 → 0.10.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 +23 -0
- package/README.md +1 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +34 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +27 -27
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/hooks/__tests__/use-active-document-actions.test.ts +1 -1
- package/src/hooks/__tests__/use-active-document.test.tsx +4 -4
- package/src/hooks/__tests__/use-host-document.test.tsx +5 -5
- package/src/hooks/__tests__/use-navigate-to-document.test.ts +2 -2
- package/src/hooks/use-active-document-actions.ts +1 -1
- package/src/hooks/use-active-document.ts +1 -1
- package/src/hooks/use-host-document.ts +1 -1
- package/src/hooks/use-navigate-to-document.ts +1 -1
- package/src/index.ts +7 -1
- package/src/init.ts +2 -2
- package/src/store/index.ts +2 -2
- package/src/store/selectors.ts +3 -3
- package/src/sync/__tests__/sync-store.test.ts +3 -3
- package/src/sync/sync-store.ts +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,29 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.10.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.9.0...@elementor/editor-documents@0.10.0) (2023-09-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **v1-adapters:** mark private functions [ED-12029] ([#122](https://github.com/elementor/elementor-packages/issues/122)) ([2e79ccc](https://github.com/elementor/elementor-packages/commit/2e79ccc87add5f0508b5a142f9f6d832b4657062))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [0.9.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.8.3...@elementor/editor-documents@0.9.0) (2023-09-11)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* **editor-documents:** mark experimental functions [ED-12066] ([#112](https://github.com/elementor/elementor-packages/issues/112)) ([f4b7a9a](https://github.com/elementor/elementor-packages/commit/f4b7a9ac7953a2b48062349495acff05b5640de3))
|
|
23
|
+
* **store:** mark experimental functions [ED-12070] ([#114](https://github.com/elementor/elementor-packages/issues/114)) ([d790829](https://github.com/elementor/elementor-packages/commit/d79082911195c75f6d3a89a5619b234e2f5ce158))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
6
29
|
## [0.8.3](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.8.2...@elementor/editor-documents@0.8.3) (2023-06-29)
|
|
7
30
|
|
|
8
31
|
**Note:** Version bump only for package @elementor/editor-documents
|
package/README.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -76,4 +76,4 @@ type V1Model<T> = {
|
|
|
76
76
|
get: <K extends keyof T = keyof T>(key: K) => T[K];
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
export { Document, ExtendedWindow, V1Document, useActiveDocument, useActiveDocumentActions, useHostDocument, useNavigateToDocument };
|
|
79
|
+
export { Document, ExtendedWindow, V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument };
|
package/dist/index.d.ts
CHANGED
|
@@ -76,4 +76,4 @@ type V1Model<T> = {
|
|
|
76
76
|
get: <K extends keyof T = keyof T>(key: K) => T[K];
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
export { Document, ExtendedWindow, V1Document, useActiveDocument, useActiveDocumentActions, useHostDocument, useNavigateToDocument };
|
|
79
|
+
export { Document, ExtendedWindow, V1Document, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument };
|
package/dist/index.js
CHANGED
|
@@ -20,10 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
__useActiveDocument: () => useActiveDocument,
|
|
24
|
+
__useActiveDocumentActions: () => useActiveDocumentActions,
|
|
25
|
+
__useHostDocument: () => useHostDocument,
|
|
26
|
+
__useNavigateToDocument: () => useNavigateToDocument
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(src_exports);
|
|
29
29
|
|
|
@@ -37,7 +37,7 @@ var initialState = {
|
|
|
37
37
|
function hasActiveEntity(state) {
|
|
38
38
|
return !!(state.activeId && state.entities[state.activeId]);
|
|
39
39
|
}
|
|
40
|
-
var slice = (0, import_store.
|
|
40
|
+
var slice = (0, import_store.__createSlice)({
|
|
41
41
|
name: "documents",
|
|
42
42
|
initialState,
|
|
43
43
|
reducers: {
|
|
@@ -147,7 +147,7 @@ function syncStore() {
|
|
|
147
147
|
}
|
|
148
148
|
function syncInitialization() {
|
|
149
149
|
const { init: init2 } = slice.actions;
|
|
150
|
-
(0, import_editor_v1_adapters.
|
|
150
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
151
151
|
(0, import_editor_v1_adapters.v1ReadyEvent)(),
|
|
152
152
|
() => {
|
|
153
153
|
const documentsManager = getV1DocumentsManager();
|
|
@@ -155,7 +155,7 @@ function syncInitialization() {
|
|
|
155
155
|
acc[id] = normalizeV1Document(document);
|
|
156
156
|
return acc;
|
|
157
157
|
}, {});
|
|
158
|
-
(0, import_store3.
|
|
158
|
+
(0, import_store3.__dispatch)(init2({
|
|
159
159
|
entities,
|
|
160
160
|
hostId: documentsManager.getInitialId(),
|
|
161
161
|
activeId: documentsManager.getCurrentId()
|
|
@@ -165,14 +165,14 @@ function syncInitialization() {
|
|
|
165
165
|
}
|
|
166
166
|
function syncActiveDocument() {
|
|
167
167
|
const { activateDocument, setAsHost } = slice.actions;
|
|
168
|
-
(0, import_editor_v1_adapters.
|
|
168
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
169
169
|
(0, import_editor_v1_adapters.commandEndEvent)("editor/documents/open"),
|
|
170
170
|
() => {
|
|
171
171
|
const documentsManager = getV1DocumentsManager();
|
|
172
172
|
const currentDocument = normalizeV1Document(documentsManager.getCurrent());
|
|
173
|
-
(0, import_store3.
|
|
173
|
+
(0, import_store3.__dispatch)(activateDocument(currentDocument));
|
|
174
174
|
if (documentsManager.getInitialId() === currentDocument.id) {
|
|
175
|
-
(0, import_store3.
|
|
175
|
+
(0, import_store3.__dispatch)(setAsHost(currentDocument.id));
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
);
|
|
@@ -183,26 +183,26 @@ function syncOnDocumentSave() {
|
|
|
183
183
|
const event = e;
|
|
184
184
|
return event.args?.status === "autosave";
|
|
185
185
|
};
|
|
186
|
-
(0, import_editor_v1_adapters.
|
|
186
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
187
187
|
(0, import_editor_v1_adapters.commandStartEvent)("document/save/save"),
|
|
188
188
|
(e) => {
|
|
189
189
|
if (isDraft(e)) {
|
|
190
|
-
(0, import_store3.
|
|
190
|
+
(0, import_store3.__dispatch)(startSavingDraft());
|
|
191
191
|
return;
|
|
192
192
|
}
|
|
193
|
-
(0, import_store3.
|
|
193
|
+
(0, import_store3.__dispatch)(startSaving());
|
|
194
194
|
}
|
|
195
195
|
);
|
|
196
|
-
(0, import_editor_v1_adapters.
|
|
196
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
197
197
|
(0, import_editor_v1_adapters.commandEndEvent)("document/save/save"),
|
|
198
198
|
(e) => {
|
|
199
199
|
const activeDocument = normalizeV1Document(
|
|
200
200
|
getV1DocumentsManager().getCurrent()
|
|
201
201
|
);
|
|
202
202
|
if (isDraft(e)) {
|
|
203
|
-
(0, import_store3.
|
|
203
|
+
(0, import_store3.__dispatch)(endSavingDraft(activeDocument));
|
|
204
204
|
} else {
|
|
205
|
-
(0, import_store3.
|
|
205
|
+
(0, import_store3.__dispatch)(endSaving(activeDocument));
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
);
|
|
@@ -216,24 +216,24 @@ function syncOnTitleChange() {
|
|
|
216
216
|
}
|
|
217
217
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
218
218
|
const newTitle = currentDocument.container.settings.get("post_title");
|
|
219
|
-
(0, import_store3.
|
|
219
|
+
(0, import_store3.__dispatch)(updateActiveDocument({ title: newTitle }));
|
|
220
220
|
}, 400);
|
|
221
|
-
(0, import_editor_v1_adapters.
|
|
221
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
222
222
|
(0, import_editor_v1_adapters.commandEndEvent)("document/elements/settings"),
|
|
223
223
|
updateTitle
|
|
224
224
|
);
|
|
225
225
|
}
|
|
226
226
|
function syncOnDocumentChange() {
|
|
227
227
|
const { markAsDirty, markAsPristine } = slice.actions;
|
|
228
|
-
(0, import_editor_v1_adapters.
|
|
228
|
+
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
229
229
|
(0, import_editor_v1_adapters.commandEndEvent)("document/save/set-is-modified"),
|
|
230
230
|
() => {
|
|
231
231
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
232
232
|
if (currentDocument.editor.isChanged) {
|
|
233
|
-
(0, import_store3.
|
|
233
|
+
(0, import_store3.__dispatch)(markAsDirty());
|
|
234
234
|
return;
|
|
235
235
|
}
|
|
236
|
-
(0, import_store3.
|
|
236
|
+
(0, import_store3.__dispatch)(markAsPristine());
|
|
237
237
|
}
|
|
238
238
|
);
|
|
239
239
|
}
|
|
@@ -253,7 +253,7 @@ function init() {
|
|
|
253
253
|
initStore();
|
|
254
254
|
}
|
|
255
255
|
function initStore() {
|
|
256
|
-
(0, import_store4.
|
|
256
|
+
(0, import_store4.__registerSlice)(slice);
|
|
257
257
|
syncStore();
|
|
258
258
|
}
|
|
259
259
|
|
|
@@ -265,12 +265,12 @@ var import_store6 = require("@elementor/store");
|
|
|
265
265
|
var selectEntities = (state) => state.documents.entities;
|
|
266
266
|
var selectActiveId = (state) => state.documents.activeId;
|
|
267
267
|
var selectHostId = (state) => state.documents.hostId;
|
|
268
|
-
var selectActiveDocument = (0, import_store6.
|
|
268
|
+
var selectActiveDocument = (0, import_store6.__createSelector)(
|
|
269
269
|
selectEntities,
|
|
270
270
|
selectActiveId,
|
|
271
271
|
(entities, activeId) => activeId && entities[activeId] ? entities[activeId] : null
|
|
272
272
|
);
|
|
273
|
-
var selectHostDocument = (0, import_store6.
|
|
273
|
+
var selectHostDocument = (0, import_store6.__createSelector)(
|
|
274
274
|
selectEntities,
|
|
275
275
|
selectHostId,
|
|
276
276
|
(entities, hostId) => hostId && entities[hostId] ? entities[hostId] : null
|
|
@@ -278,16 +278,16 @@ var selectHostDocument = (0, import_store6.createSelector)(
|
|
|
278
278
|
|
|
279
279
|
// src/hooks/use-active-document.ts
|
|
280
280
|
function useActiveDocument() {
|
|
281
|
-
return (0, import_store7.
|
|
281
|
+
return (0, import_store7.__useSelector)(selectActiveDocument);
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
// src/hooks/use-active-document-actions.ts
|
|
285
285
|
var import_react = require("react");
|
|
286
286
|
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
287
287
|
function useActiveDocumentActions() {
|
|
288
|
-
const save = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.
|
|
289
|
-
const saveDraft = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.
|
|
290
|
-
const saveTemplate = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.
|
|
288
|
+
const save = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.__privateRunCommand)("document/save/default"), []);
|
|
289
|
+
const saveDraft = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.__privateRunCommand)("document/save/draft"), []);
|
|
290
|
+
const saveTemplate = (0, import_react.useCallback)(() => (0, import_editor_v1_adapters2.__privateOpenRoute)("library/save-template"), []);
|
|
291
291
|
return {
|
|
292
292
|
save,
|
|
293
293
|
saveDraft,
|
|
@@ -298,7 +298,7 @@ function useActiveDocumentActions() {
|
|
|
298
298
|
// src/hooks/use-host-document.ts
|
|
299
299
|
var import_store8 = require("@elementor/store");
|
|
300
300
|
function useHostDocument() {
|
|
301
|
-
return (0, import_store8.
|
|
301
|
+
return (0, import_store8.__useSelector)(selectHostDocument);
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
// src/hooks/use-navigate-to-document.ts
|
|
@@ -306,7 +306,7 @@ var import_react2 = require("react");
|
|
|
306
306
|
var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
|
|
307
307
|
function useNavigateToDocument() {
|
|
308
308
|
return (0, import_react2.useCallback)(async (id) => {
|
|
309
|
-
await (0, import_editor_v1_adapters3.
|
|
309
|
+
await (0, import_editor_v1_adapters3.__privateRunCommand)("editor/documents/switch", {
|
|
310
310
|
id,
|
|
311
311
|
setAsInitial: true
|
|
312
312
|
});
|
|
@@ -321,9 +321,9 @@ function useNavigateToDocument() {
|
|
|
321
321
|
init();
|
|
322
322
|
// Annotate the CommonJS export names for ESM import in node:
|
|
323
323
|
0 && (module.exports = {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
324
|
+
__useActiveDocument,
|
|
325
|
+
__useActiveDocumentActions,
|
|
326
|
+
__useHostDocument,
|
|
327
|
+
__useNavigateToDocument
|
|
328
328
|
});
|
|
329
329
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/init.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-host-document.ts","../src/hooks/use-navigate-to-document.ts"],"sourcesContent":["import init from './init';\n\nexport * from './hooks';\nexport * from './types';\n\ninit();\n","import { Document } from '../types';\nimport { createSlice, PayloadAction } from '@elementor/store';\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 { Document } from '../types';\nimport { slice } from '../store';\nimport { dispatch } from '@elementor/store';\nimport { normalizeV1Document, getV1DocumentsManager } from './utils';\nimport {\n\tcommandEndEvent,\n\tCommandEvent,\n\tcommandStartEvent,\n\tListenerEvent,\n\tlistenTo,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo(\n\t\tv1ReadyEvent(),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\t\tconst entities = Object.entries( documentsManager.documents )\n\t\t\t\t.reduce( ( acc: Record<string, Document>, [ id, document ] ) => {\n\t\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} );\n\n\t\t\tdispatch( init( {\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(\n\t\tcommandEndEvent( 'editor/documents/open' ),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\t\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t\tdispatch( activateDocument( currentDocument ) );\n\n\t\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t\tdispatch( setAsHost( currentDocument.id ) );\n\t\t\t}\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(\n\t\tcommandStartEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\tdispatch( startSavingDraft() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch( startSaving() );\n\t\t}\n\t);\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tconst activeDocument = normalizeV1Document(\n\t\t\t\tgetV1DocumentsManager().getCurrent()\n\t\t\t);\n\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\tdispatch( endSavingDraft( activeDocument ) );\n\t\t\t} else {\n\t\t\t\tdispatch( endSaving( activeDocument ) );\n\t\t\t}\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\tdispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\tupdateTitle\n\t);\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/set-is-modified' ),\n\t\t() => {\n\t\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t\tdispatch( markAsDirty() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch( markAsPristine() );\n\t\t}\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 { Document, ExtendedWindow, 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 normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\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\tplatformEdit: documentData.config.urls.exit_to_dashboard,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { syncStore } from './sync';\nimport { registerSlice } from '@elementor/store';\nimport { slice } from './store';\n\nexport default function init() {\n\tinitStore();\n}\n\nfunction initStore() {\n\tregisterSlice( slice );\n\n\tsyncStore();\n}\n","import { useSelector } from '@elementor/store';\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { slice } from './index';\nimport { createSelector, SliceState } from '@elementor/store';\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(\n\tselectEntities,\n\tselectActiveId,\n\t( entities, activeId ) => activeId && entities[ activeId ]\n\t\t? entities[ activeId ]\n\t\t: null,\n);\n\nexport const selectHostDocument = createSelector(\n\tselectEntities,\n\tselectHostId,\n\t( entities, hostId ) => hostId && entities[ hostId ]\n\t\t? entities[ hostId ]\n\t\t: null,\n);\n","import { useCallback } from 'react';\nimport { openRoute, runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useActiveDocumentActions() {\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\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t};\n}\n","import { useSelector } from '@elementor/store';\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import { useCallback } from 'react';\nimport { 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","init","import_store","import_store","import_store","import_editor_v1_adapters","import_store","import_react","import_editor_v1_adapters"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/init.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-host-document.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 * from './types';\n\ninit();\n","import { Document } from '../types';\nimport { __createSlice, PayloadAction } from '@elementor/store';\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 { Document } from '../types';\nimport { slice } from '../store';\nimport { __dispatch } from '@elementor/store';\nimport { normalizeV1Document, getV1DocumentsManager } from './utils';\nimport {\n\tcommandEndEvent,\n\tCommandEvent,\n\tcommandStartEvent,\n\tListenerEvent,\n\t__privateListenTo as listenTo,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo(\n\t\tv1ReadyEvent(),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\t\tconst entities = Object.entries( documentsManager.documents )\n\t\t\t\t.reduce( ( acc: Record<string, Document>, [ id, document ] ) => {\n\t\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} );\n\n\t\t\t__dispatch( init( {\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(\n\t\tcommandEndEvent( 'editor/documents/open' ),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\t\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t\t}\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(\n\t\tcommandStartEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\t__dispatch( startSavingDraft() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t__dispatch( startSaving() );\n\t\t}\n\t);\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tconst activeDocument = normalizeV1Document(\n\t\t\t\tgetV1DocumentsManager().getCurrent()\n\t\t\t);\n\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t\t} else {\n\t\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t\t}\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(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\tupdateTitle\n\t);\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/set-is-modified' ),\n\t\t() => {\n\t\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t\t__dispatch( markAsDirty() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t__dispatch( markAsPristine() );\n\t\t}\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 { Document, ExtendedWindow, 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 normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\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\tplatformEdit: documentData.config.urls.exit_to_dashboard,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { syncStore } from './sync';\nimport { __registerSlice } from '@elementor/store';\nimport { slice } from './store';\n\nexport default function init() {\n\tinitStore();\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { __useSelector as useSelector } from '@elementor/store';\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { slice } from './index';\nimport { __createSelector, SliceState } from '@elementor/store';\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(\n\tselectEntities,\n\tselectActiveId,\n\t( entities, activeId ) => activeId && entities[ activeId ]\n\t\t? entities[ activeId ]\n\t\t: null,\n);\n\nexport const selectHostDocument = __createSelector(\n\tselectEntities,\n\tselectHostId,\n\t( entities, hostId ) => hostId && entities[ hostId ]\n\t\t? entities[ hostId ]\n\t\t: null,\n);\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useActiveDocumentActions() {\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\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t};\n}\n","import { __useSelector as useSelector } from '@elementor/store';\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\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","init","listenTo","import_store","import_store","import_store","useSelector","import_editor_v1_adapters","runCommand","openRoute","import_store","useSelector","import_react","import_editor_v1_adapters","runCommand"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/store/index.ts
|
|
2
|
-
import {
|
|
2
|
+
import { __createSlice } from "@elementor/store";
|
|
3
3
|
var initialState = {
|
|
4
4
|
entities: {},
|
|
5
5
|
activeId: null,
|
|
@@ -8,7 +8,7 @@ var initialState = {
|
|
|
8
8
|
function hasActiveEntity(state) {
|
|
9
9
|
return !!(state.activeId && state.entities[state.activeId]);
|
|
10
10
|
}
|
|
11
|
-
var slice =
|
|
11
|
+
var slice = __createSlice({
|
|
12
12
|
name: "documents",
|
|
13
13
|
initialState,
|
|
14
14
|
reducers: {
|
|
@@ -72,7 +72,7 @@ var slice = createSlice({
|
|
|
72
72
|
});
|
|
73
73
|
|
|
74
74
|
// src/sync/sync-store.ts
|
|
75
|
-
import {
|
|
75
|
+
import { __dispatch } from "@elementor/store";
|
|
76
76
|
|
|
77
77
|
// src/sync/utils.ts
|
|
78
78
|
function getV1DocumentsManager() {
|
|
@@ -111,7 +111,7 @@ function normalizeV1Document(documentData) {
|
|
|
111
111
|
import {
|
|
112
112
|
commandEndEvent,
|
|
113
113
|
commandStartEvent,
|
|
114
|
-
listenTo,
|
|
114
|
+
__privateListenTo as listenTo,
|
|
115
115
|
v1ReadyEvent
|
|
116
116
|
} from "@elementor/editor-v1-adapters";
|
|
117
117
|
function syncStore() {
|
|
@@ -131,7 +131,7 @@ function syncInitialization() {
|
|
|
131
131
|
acc[id] = normalizeV1Document(document);
|
|
132
132
|
return acc;
|
|
133
133
|
}, {});
|
|
134
|
-
|
|
134
|
+
__dispatch(init2({
|
|
135
135
|
entities,
|
|
136
136
|
hostId: documentsManager.getInitialId(),
|
|
137
137
|
activeId: documentsManager.getCurrentId()
|
|
@@ -146,9 +146,9 @@ function syncActiveDocument() {
|
|
|
146
146
|
() => {
|
|
147
147
|
const documentsManager = getV1DocumentsManager();
|
|
148
148
|
const currentDocument = normalizeV1Document(documentsManager.getCurrent());
|
|
149
|
-
|
|
149
|
+
__dispatch(activateDocument(currentDocument));
|
|
150
150
|
if (documentsManager.getInitialId() === currentDocument.id) {
|
|
151
|
-
|
|
151
|
+
__dispatch(setAsHost(currentDocument.id));
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
);
|
|
@@ -163,10 +163,10 @@ function syncOnDocumentSave() {
|
|
|
163
163
|
commandStartEvent("document/save/save"),
|
|
164
164
|
(e) => {
|
|
165
165
|
if (isDraft(e)) {
|
|
166
|
-
|
|
166
|
+
__dispatch(startSavingDraft());
|
|
167
167
|
return;
|
|
168
168
|
}
|
|
169
|
-
|
|
169
|
+
__dispatch(startSaving());
|
|
170
170
|
}
|
|
171
171
|
);
|
|
172
172
|
listenTo(
|
|
@@ -176,9 +176,9 @@ function syncOnDocumentSave() {
|
|
|
176
176
|
getV1DocumentsManager().getCurrent()
|
|
177
177
|
);
|
|
178
178
|
if (isDraft(e)) {
|
|
179
|
-
|
|
179
|
+
__dispatch(endSavingDraft(activeDocument));
|
|
180
180
|
} else {
|
|
181
|
-
|
|
181
|
+
__dispatch(endSaving(activeDocument));
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
);
|
|
@@ -192,7 +192,7 @@ function syncOnTitleChange() {
|
|
|
192
192
|
}
|
|
193
193
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
194
194
|
const newTitle = currentDocument.container.settings.get("post_title");
|
|
195
|
-
|
|
195
|
+
__dispatch(updateActiveDocument({ title: newTitle }));
|
|
196
196
|
}, 400);
|
|
197
197
|
listenTo(
|
|
198
198
|
commandEndEvent("document/elements/settings"),
|
|
@@ -206,10 +206,10 @@ function syncOnDocumentChange() {
|
|
|
206
206
|
() => {
|
|
207
207
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
208
208
|
if (currentDocument.editor.isChanged) {
|
|
209
|
-
|
|
209
|
+
__dispatch(markAsDirty());
|
|
210
210
|
return;
|
|
211
211
|
}
|
|
212
|
-
|
|
212
|
+
__dispatch(markAsPristine());
|
|
213
213
|
}
|
|
214
214
|
);
|
|
215
215
|
}
|
|
@@ -224,29 +224,29 @@ function debounce(fn, timeout) {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
// src/init.ts
|
|
227
|
-
import {
|
|
227
|
+
import { __registerSlice } from "@elementor/store";
|
|
228
228
|
function init() {
|
|
229
229
|
initStore();
|
|
230
230
|
}
|
|
231
231
|
function initStore() {
|
|
232
|
-
|
|
232
|
+
__registerSlice(slice);
|
|
233
233
|
syncStore();
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
// src/hooks/use-active-document.ts
|
|
237
|
-
import { useSelector } from "@elementor/store";
|
|
237
|
+
import { __useSelector as useSelector } from "@elementor/store";
|
|
238
238
|
|
|
239
239
|
// src/store/selectors.ts
|
|
240
|
-
import {
|
|
240
|
+
import { __createSelector } from "@elementor/store";
|
|
241
241
|
var selectEntities = (state) => state.documents.entities;
|
|
242
242
|
var selectActiveId = (state) => state.documents.activeId;
|
|
243
243
|
var selectHostId = (state) => state.documents.hostId;
|
|
244
|
-
var selectActiveDocument =
|
|
244
|
+
var selectActiveDocument = __createSelector(
|
|
245
245
|
selectEntities,
|
|
246
246
|
selectActiveId,
|
|
247
247
|
(entities, activeId) => activeId && entities[activeId] ? entities[activeId] : null
|
|
248
248
|
);
|
|
249
|
-
var selectHostDocument =
|
|
249
|
+
var selectHostDocument = __createSelector(
|
|
250
250
|
selectEntities,
|
|
251
251
|
selectHostId,
|
|
252
252
|
(entities, hostId) => hostId && entities[hostId] ? entities[hostId] : null
|
|
@@ -259,7 +259,7 @@ function useActiveDocument() {
|
|
|
259
259
|
|
|
260
260
|
// src/hooks/use-active-document-actions.ts
|
|
261
261
|
import { useCallback } from "react";
|
|
262
|
-
import { openRoute, runCommand } from "@elementor/editor-v1-adapters";
|
|
262
|
+
import { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from "@elementor/editor-v1-adapters";
|
|
263
263
|
function useActiveDocumentActions() {
|
|
264
264
|
const save = useCallback(() => runCommand("document/save/default"), []);
|
|
265
265
|
const saveDraft = useCallback(() => runCommand("document/save/draft"), []);
|
|
@@ -272,14 +272,14 @@ function useActiveDocumentActions() {
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
// src/hooks/use-host-document.ts
|
|
275
|
-
import {
|
|
275
|
+
import { __useSelector as useSelector2 } from "@elementor/store";
|
|
276
276
|
function useHostDocument() {
|
|
277
277
|
return useSelector2(selectHostDocument);
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
// src/hooks/use-navigate-to-document.ts
|
|
281
281
|
import { useCallback as useCallback2 } from "react";
|
|
282
|
-
import {
|
|
282
|
+
import { __privateRunCommand as runCommand2 } from "@elementor/editor-v1-adapters";
|
|
283
283
|
function useNavigateToDocument() {
|
|
284
284
|
return useCallback2(async (id) => {
|
|
285
285
|
await runCommand2("editor/documents/switch", {
|
|
@@ -296,9 +296,9 @@ function useNavigateToDocument() {
|
|
|
296
296
|
// src/index.ts
|
|
297
297
|
init();
|
|
298
298
|
export {
|
|
299
|
-
useActiveDocument,
|
|
300
|
-
useActiveDocumentActions,
|
|
301
|
-
useHostDocument,
|
|
302
|
-
useNavigateToDocument
|
|
299
|
+
useActiveDocument as __useActiveDocument,
|
|
300
|
+
useActiveDocumentActions as __useActiveDocumentActions,
|
|
301
|
+
useHostDocument as __useHostDocument,
|
|
302
|
+
useNavigateToDocument as __useNavigateToDocument
|
|
303
303
|
};
|
|
304
304
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/init.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-host-document.ts","../src/hooks/use-navigate-to-document.ts","../src/index.ts"],"sourcesContent":["import { Document } from '../types';\nimport { createSlice, PayloadAction } from '@elementor/store';\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 { Document } from '../types';\nimport { slice } from '../store';\nimport { dispatch } from '@elementor/store';\nimport { normalizeV1Document, getV1DocumentsManager } from './utils';\nimport {\n\tcommandEndEvent,\n\tCommandEvent,\n\tcommandStartEvent,\n\tListenerEvent,\n\tlistenTo,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo(\n\t\tv1ReadyEvent(),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\t\tconst entities = Object.entries( documentsManager.documents )\n\t\t\t\t.reduce( ( acc: Record<string, Document>, [ id, document ] ) => {\n\t\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} );\n\n\t\t\tdispatch( init( {\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(\n\t\tcommandEndEvent( 'editor/documents/open' ),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\t\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t\tdispatch( activateDocument( currentDocument ) );\n\n\t\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t\tdispatch( setAsHost( currentDocument.id ) );\n\t\t\t}\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(\n\t\tcommandStartEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\tdispatch( startSavingDraft() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch( startSaving() );\n\t\t}\n\t);\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tconst activeDocument = normalizeV1Document(\n\t\t\t\tgetV1DocumentsManager().getCurrent()\n\t\t\t);\n\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\tdispatch( endSavingDraft( activeDocument ) );\n\t\t\t} else {\n\t\t\t\tdispatch( endSaving( activeDocument ) );\n\t\t\t}\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\tdispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\tupdateTitle\n\t);\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/set-is-modified' ),\n\t\t() => {\n\t\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t\tdispatch( markAsDirty() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch( markAsPristine() );\n\t\t}\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 { Document, ExtendedWindow, 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 normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\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\tplatformEdit: documentData.config.urls.exit_to_dashboard,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { syncStore } from './sync';\nimport { registerSlice } from '@elementor/store';\nimport { slice } from './store';\n\nexport default function init() {\n\tinitStore();\n}\n\nfunction initStore() {\n\tregisterSlice( slice );\n\n\tsyncStore();\n}\n","import { useSelector } from '@elementor/store';\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { slice } from './index';\nimport { createSelector, SliceState } from '@elementor/store';\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(\n\tselectEntities,\n\tselectActiveId,\n\t( entities, activeId ) => activeId && entities[ activeId ]\n\t\t? entities[ activeId ]\n\t\t: null,\n);\n\nexport const selectHostDocument = createSelector(\n\tselectEntities,\n\tselectHostId,\n\t( entities, hostId ) => hostId && entities[ hostId ]\n\t\t? entities[ hostId ]\n\t\t: null,\n);\n","import { useCallback } from 'react';\nimport { openRoute, runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useActiveDocumentActions() {\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\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t};\n}\n","import { useSelector } from '@elementor/store';\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import { useCallback } from 'react';\nimport { 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 * from './hooks';\nexport * from './types';\n\ninit();\n"],"mappings":"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","names":["init","useSelector","useSelector","useCallback","runCommand"]}
|
|
1
|
+
{"version":3,"sources":["../src/store/index.ts","../src/sync/sync-store.ts","../src/sync/utils.ts","../src/init.ts","../src/hooks/use-active-document.ts","../src/store/selectors.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-host-document.ts","../src/hooks/use-navigate-to-document.ts","../src/index.ts"],"sourcesContent":["import { Document } from '../types';\nimport { __createSlice, PayloadAction } from '@elementor/store';\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 { Document } from '../types';\nimport { slice } from '../store';\nimport { __dispatch } from '@elementor/store';\nimport { normalizeV1Document, getV1DocumentsManager } from './utils';\nimport {\n\tcommandEndEvent,\n\tCommandEvent,\n\tcommandStartEvent,\n\tListenerEvent,\n\t__privateListenTo as listenTo,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo(\n\t\tv1ReadyEvent(),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\t\tconst entities = Object.entries( documentsManager.documents )\n\t\t\t\t.reduce( ( acc: Record<string, Document>, [ id, document ] ) => {\n\t\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} );\n\n\t\t\t__dispatch( init( {\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(\n\t\tcommandEndEvent( 'editor/documents/open' ),\n\t\t() => {\n\t\t\tconst documentsManager = getV1DocumentsManager();\n\t\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t\t}\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(\n\t\tcommandStartEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\t__dispatch( startSavingDraft() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t__dispatch( startSaving() );\n\t\t}\n\t);\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/save' ),\n\t\t( e ) => {\n\t\t\tconst activeDocument = normalizeV1Document(\n\t\t\t\tgetV1DocumentsManager().getCurrent()\n\t\t\t);\n\n\t\t\tif ( isDraft( e ) ) {\n\t\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t\t} else {\n\t\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t\t}\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(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\tupdateTitle\n\t);\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo(\n\t\tcommandEndEvent( 'document/save/set-is-modified' ),\n\t\t() => {\n\t\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t\t__dispatch( markAsDirty() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t__dispatch( markAsPristine() );\n\t\t}\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 { Document, ExtendedWindow, 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 normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\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\tplatformEdit: documentData.config.urls.exit_to_dashboard,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { syncStore } from './sync';\nimport { __registerSlice } from '@elementor/store';\nimport { slice } from './store';\n\nexport default function init() {\n\tinitStore();\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { __useSelector as useSelector } from '@elementor/store';\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { slice } from './index';\nimport { __createSelector, SliceState } from '@elementor/store';\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(\n\tselectEntities,\n\tselectActiveId,\n\t( entities, activeId ) => activeId && entities[ activeId ]\n\t\t? entities[ activeId ]\n\t\t: null,\n);\n\nexport const selectHostDocument = __createSelector(\n\tselectEntities,\n\tselectHostId,\n\t( entities, hostId ) => hostId && entities[ hostId ]\n\t\t? entities[ hostId ]\n\t\t: null,\n);\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useActiveDocumentActions() {\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\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t};\n}\n","import { __useSelector as useSelector } from '@elementor/store';\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\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 * from './types';\n\ninit();\n"],"mappings":"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","names":["init","useSelector","useSelector","useCallback","runCommand"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-documents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@elementor/editor-v1-adapters": "^0.
|
|
36
|
-
"@elementor/store": "^0.
|
|
35
|
+
"@elementor/editor-v1-adapters": "^0.6.0",
|
|
36
|
+
"@elementor/store": "^0.7.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"react": "18.x"
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"elementor": {
|
|
42
42
|
"type": "extension"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "7fe9af3ba0569f3003d2aa148cb4ad0bdf1c419e"
|
|
45
45
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderHook } from '@testing-library/react';
|
|
2
2
|
import useActiveDocumentActions from '../use-active-document-actions';
|
|
3
|
-
import { openRoute, runCommand } from '@elementor/editor-v1-adapters';
|
|
3
|
+
import { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
|
|
4
4
|
|
|
5
5
|
jest.mock( '@elementor/editor-v1-adapters' );
|
|
6
6
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { slice } from '../../store';
|
|
2
2
|
import useActiveDocument from '../use-active-document';
|
|
3
|
-
import {
|
|
3
|
+
import { __createStore, __dispatch, __registerSlice, SliceState, Store } from '@elementor/store';
|
|
4
4
|
import { createMockDocument, renderHookWithStore } from 'test-utils';
|
|
5
5
|
|
|
6
6
|
describe( '@elementor/editor-documents - useActiveDocument', () => {
|
|
7
7
|
let store: Store<SliceState<typeof slice>>;
|
|
8
8
|
|
|
9
9
|
beforeEach( () => {
|
|
10
|
-
|
|
11
|
-
store =
|
|
10
|
+
__registerSlice( slice );
|
|
11
|
+
store = __createStore();
|
|
12
12
|
} );
|
|
13
13
|
|
|
14
14
|
it( 'should return the current document', () => {
|
|
15
15
|
// Arrange.
|
|
16
16
|
const mockDocument = createMockDocument();
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
__dispatch( slice.actions.activateDocument( mockDocument ) );
|
|
19
19
|
|
|
20
20
|
// Act.
|
|
21
21
|
const { result } = renderHookWithStore( useActiveDocument, store );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { slice } from '../../store';
|
|
2
|
-
import {
|
|
2
|
+
import { __createStore, __dispatch, __registerSlice, SliceState, Store } from '@elementor/store';
|
|
3
3
|
import useHostDocument from '../use-host-document';
|
|
4
4
|
import { createMockDocument, renderHookWithStore } from 'test-utils';
|
|
5
5
|
|
|
@@ -9,13 +9,13 @@ describe( '@elementor/editor-documents - useHostDocument', () => {
|
|
|
9
9
|
let store: Store<SliceState<typeof slice>>;
|
|
10
10
|
|
|
11
11
|
beforeEach( () => {
|
|
12
|
-
|
|
13
|
-
store =
|
|
12
|
+
__registerSlice( slice );
|
|
13
|
+
store = __createStore();
|
|
14
14
|
} );
|
|
15
15
|
|
|
16
16
|
it( 'should return the host document', () => {
|
|
17
17
|
// Arrange.
|
|
18
|
-
|
|
18
|
+
__dispatch( slice.actions.init( {
|
|
19
19
|
entities: { [ mockDocument.id ]: mockDocument },
|
|
20
20
|
activeId: null,
|
|
21
21
|
hostId: mockDocument.id,
|
|
@@ -30,7 +30,7 @@ describe( '@elementor/editor-documents - useHostDocument', () => {
|
|
|
30
30
|
|
|
31
31
|
it( 'should return null when the host document is not found', () => {
|
|
32
32
|
// Arrange.
|
|
33
|
-
|
|
33
|
+
__dispatch( slice.actions.init( {
|
|
34
34
|
entities: { [ mockDocument.id ]: mockDocument },
|
|
35
35
|
activeId: null,
|
|
36
36
|
hostId: null,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderHook } from '@testing-library/react';
|
|
2
|
-
import { runCommand } from '@elementor/editor-v1-adapters';
|
|
3
|
-
import { useNavigateToDocument } from '
|
|
2
|
+
import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
|
|
3
|
+
import { useNavigateToDocument } from '../index';
|
|
4
4
|
|
|
5
5
|
jest.mock( '@elementor/editor-v1-adapters' );
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
|
-
import { openRoute, runCommand } from '@elementor/editor-v1-adapters';
|
|
2
|
+
import { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
|
|
3
3
|
|
|
4
4
|
export default function useActiveDocumentActions() {
|
|
5
5
|
const save = useCallback( () => runCommand( 'document/save/default' ), [] );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
|
-
import { runCommand } from '@elementor/editor-v1-adapters';
|
|
2
|
+
import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
|
|
3
3
|
|
|
4
4
|
export default function useNavigateToDocument() {
|
|
5
5
|
return useCallback( async ( id: number ) => {
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import init from './init';
|
|
2
2
|
|
|
3
|
-
export
|
|
3
|
+
export {
|
|
4
|
+
useActiveDocument as __useActiveDocument,
|
|
5
|
+
useNavigateToDocument as __useNavigateToDocument,
|
|
6
|
+
useHostDocument as __useHostDocument,
|
|
7
|
+
useActiveDocumentActions as __useActiveDocumentActions,
|
|
8
|
+
} from './hooks';
|
|
9
|
+
|
|
4
10
|
export * from './types';
|
|
5
11
|
|
|
6
12
|
init();
|
package/src/init.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { syncStore } from './sync';
|
|
2
|
-
import {
|
|
2
|
+
import { __registerSlice } from '@elementor/store';
|
|
3
3
|
import { slice } from './store';
|
|
4
4
|
|
|
5
5
|
export default function init() {
|
|
@@ -7,7 +7,7 @@ export default function init() {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
function initStore() {
|
|
10
|
-
|
|
10
|
+
__registerSlice( slice );
|
|
11
11
|
|
|
12
12
|
syncStore();
|
|
13
13
|
}
|
package/src/store/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Document } from '../types';
|
|
2
|
-
import {
|
|
2
|
+
import { __createSlice, PayloadAction } from '@elementor/store';
|
|
3
3
|
|
|
4
4
|
type State = {
|
|
5
5
|
entities: Record<Document['id'], Document>,
|
|
@@ -19,7 +19,7 @@ function hasActiveEntity( state: State ): state is StateWithActiveId {
|
|
|
19
19
|
return !! ( state.activeId && state.entities[ state.activeId ] );
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export const slice =
|
|
22
|
+
export const slice = __createSlice( {
|
|
23
23
|
name: 'documents',
|
|
24
24
|
initialState,
|
|
25
25
|
reducers: {
|
package/src/store/selectors.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { slice } from './index';
|
|
2
|
-
import {
|
|
2
|
+
import { __createSelector, SliceState } from '@elementor/store';
|
|
3
3
|
|
|
4
4
|
type State = SliceState<typeof slice>;
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@ const selectEntities = ( state: State ) => state.documents.entities;
|
|
|
7
7
|
const selectActiveId = ( state: State ) => state.documents.activeId;
|
|
8
8
|
const selectHostId = ( state: State ) => state.documents.hostId;
|
|
9
9
|
|
|
10
|
-
export const selectActiveDocument =
|
|
10
|
+
export const selectActiveDocument = __createSelector(
|
|
11
11
|
selectEntities,
|
|
12
12
|
selectActiveId,
|
|
13
13
|
( entities, activeId ) => activeId && entities[ activeId ]
|
|
@@ -15,7 +15,7 @@ export const selectActiveDocument = createSelector(
|
|
|
15
15
|
: null,
|
|
16
16
|
);
|
|
17
17
|
|
|
18
|
-
export const selectHostDocument =
|
|
18
|
+
export const selectHostDocument = __createSelector(
|
|
19
19
|
selectEntities,
|
|
20
20
|
selectHostId,
|
|
21
21
|
( entities, hostId ) => hostId && entities[ hostId ]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { syncStore } from '../index';
|
|
2
2
|
import { slice } from '../../store';
|
|
3
3
|
import { ExtendedWindow, V1Document, Document } from '../../types';
|
|
4
|
-
import {
|
|
4
|
+
import { __createStore, __registerSlice, SliceState, Store } from '@elementor/store';
|
|
5
5
|
import {
|
|
6
6
|
dispatchCommandAfter,
|
|
7
7
|
dispatchCommandBefore,
|
|
@@ -21,8 +21,8 @@ describe( '@elementor/editor-documents - Sync Store', () => {
|
|
|
21
21
|
beforeEach( () => {
|
|
22
22
|
jest.useFakeTimers();
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
store =
|
|
24
|
+
__registerSlice( slice );
|
|
25
|
+
store = __createStore();
|
|
26
26
|
|
|
27
27
|
syncStore();
|
|
28
28
|
} );
|
package/src/sync/sync-store.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Document } from '../types';
|
|
2
2
|
import { slice } from '../store';
|
|
3
|
-
import {
|
|
3
|
+
import { __dispatch } from '@elementor/store';
|
|
4
4
|
import { normalizeV1Document, getV1DocumentsManager } from './utils';
|
|
5
5
|
import {
|
|
6
6
|
commandEndEvent,
|
|
7
7
|
CommandEvent,
|
|
8
8
|
commandStartEvent,
|
|
9
9
|
ListenerEvent,
|
|
10
|
-
listenTo,
|
|
10
|
+
__privateListenTo as listenTo,
|
|
11
11
|
v1ReadyEvent,
|
|
12
12
|
} from '@elementor/editor-v1-adapters';
|
|
13
13
|
|
|
@@ -34,7 +34,7 @@ function syncInitialization() {
|
|
|
34
34
|
return acc;
|
|
35
35
|
}, {} );
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
__dispatch( init( {
|
|
38
38
|
entities,
|
|
39
39
|
hostId: documentsManager.getInitialId(),
|
|
40
40
|
activeId: documentsManager.getCurrentId(),
|
|
@@ -52,10 +52,10 @@ function syncActiveDocument() {
|
|
|
52
52
|
const documentsManager = getV1DocumentsManager();
|
|
53
53
|
const currentDocument = normalizeV1Document( documentsManager.getCurrent() );
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
__dispatch( activateDocument( currentDocument ) );
|
|
56
56
|
|
|
57
57
|
if ( documentsManager.getInitialId() === currentDocument.id ) {
|
|
58
|
-
|
|
58
|
+
__dispatch( setAsHost( currentDocument.id ) );
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
);
|
|
@@ -77,11 +77,11 @@ function syncOnDocumentSave() {
|
|
|
77
77
|
commandStartEvent( 'document/save/save' ),
|
|
78
78
|
( e ) => {
|
|
79
79
|
if ( isDraft( e ) ) {
|
|
80
|
-
|
|
80
|
+
__dispatch( startSavingDraft() );
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
__dispatch( startSaving() );
|
|
85
85
|
}
|
|
86
86
|
);
|
|
87
87
|
|
|
@@ -93,9 +93,9 @@ function syncOnDocumentSave() {
|
|
|
93
93
|
);
|
|
94
94
|
|
|
95
95
|
if ( isDraft( e ) ) {
|
|
96
|
-
|
|
96
|
+
__dispatch( endSavingDraft( activeDocument ) );
|
|
97
97
|
} else {
|
|
98
|
-
|
|
98
|
+
__dispatch( endSaving( activeDocument ) );
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
);
|
|
@@ -114,7 +114,7 @@ function syncOnTitleChange() {
|
|
|
114
114
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
115
115
|
const newTitle = currentDocument.container.settings.get( 'post_title' );
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
__dispatch( updateActiveDocument( { title: newTitle } ) );
|
|
118
118
|
}, 400 );
|
|
119
119
|
|
|
120
120
|
listenTo(
|
|
@@ -132,11 +132,11 @@ function syncOnDocumentChange() {
|
|
|
132
132
|
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
133
133
|
|
|
134
134
|
if ( currentDocument.editor.isChanged ) {
|
|
135
|
-
|
|
135
|
+
__dispatch( markAsDirty() );
|
|
136
136
|
return;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
__dispatch( markAsPristine() );
|
|
140
140
|
}
|
|
141
141
|
);
|
|
142
142
|
}
|