@elementor/editor-documents 4.1.0-manual → 4.2.0-839

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/dist/index.d.mts CHANGED
@@ -35,6 +35,7 @@ type Document = {
35
35
  links: {
36
36
  platformEdit: string;
37
37
  permalink: string;
38
+ wpPreview: string;
38
39
  };
39
40
  isDirty: boolean;
40
41
  isSaving: boolean;
@@ -88,6 +89,7 @@ type V1Document = {
88
89
  urls: {
89
90
  exit_to_dashboard: string;
90
91
  permalink: string;
92
+ wp_preview: string;
91
93
  main_dashboard: string;
92
94
  all_post_type: string;
93
95
  };
@@ -136,6 +138,7 @@ declare function setDocumentModifiedStatus(status: boolean): void;
136
138
  declare function getV1CurrentDocument(): V1Document;
137
139
  declare function isDocumentDirty(document: Document): boolean;
138
140
  declare function invalidateDocumentData(documentId: number): void;
141
+ declare function reloadCurrentDocument(): Promise<any>;
139
142
  declare function switchToDocument(documentId: number, options: {
140
143
  selector?: string;
141
144
  mode?: 'autosave' | 'draft';
@@ -146,4 +149,4 @@ declare function switchToDocument(documentId: number, options: {
146
149
 
147
150
  declare const COMPONENT_DOCUMENT_TYPE = "elementor_component";
148
151
 
149
- export { COMPONENT_DOCUMENT_TYPE, type Document, type ExitTo, type ExtendedWindow, type V1Document, type V1DocumentsManager, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, useOpenDocumentInNewTab as __useOpenDocumentInNewTab, getCurrentDocument, getV1CurrentDocument, getV1DocumentsManager, init, invalidateDocumentData, isDocumentDirty, setDocumentModifiedStatus, slice, switchToDocument };
152
+ export { COMPONENT_DOCUMENT_TYPE, type Document, type ExitTo, type ExtendedWindow, type V1Document, type V1DocumentsManager, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, useOpenDocumentInNewTab as __useOpenDocumentInNewTab, getCurrentDocument, getV1CurrentDocument, getV1DocumentsManager, init, invalidateDocumentData, isDocumentDirty, reloadCurrentDocument, setDocumentModifiedStatus, slice, switchToDocument };
package/dist/index.d.ts CHANGED
@@ -35,6 +35,7 @@ type Document = {
35
35
  links: {
36
36
  platformEdit: string;
37
37
  permalink: string;
38
+ wpPreview: string;
38
39
  };
39
40
  isDirty: boolean;
40
41
  isSaving: boolean;
@@ -88,6 +89,7 @@ type V1Document = {
88
89
  urls: {
89
90
  exit_to_dashboard: string;
90
91
  permalink: string;
92
+ wp_preview: string;
91
93
  main_dashboard: string;
92
94
  all_post_type: string;
93
95
  };
@@ -136,6 +138,7 @@ declare function setDocumentModifiedStatus(status: boolean): void;
136
138
  declare function getV1CurrentDocument(): V1Document;
137
139
  declare function isDocumentDirty(document: Document): boolean;
138
140
  declare function invalidateDocumentData(documentId: number): void;
141
+ declare function reloadCurrentDocument(): Promise<any>;
139
142
  declare function switchToDocument(documentId: number, options: {
140
143
  selector?: string;
141
144
  mode?: 'autosave' | 'draft';
@@ -146,4 +149,4 @@ declare function switchToDocument(documentId: number, options: {
146
149
 
147
150
  declare const COMPONENT_DOCUMENT_TYPE = "elementor_component";
148
151
 
149
- export { COMPONENT_DOCUMENT_TYPE, type Document, type ExitTo, type ExtendedWindow, type V1Document, type V1DocumentsManager, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, useOpenDocumentInNewTab as __useOpenDocumentInNewTab, getCurrentDocument, getV1CurrentDocument, getV1DocumentsManager, init, invalidateDocumentData, isDocumentDirty, setDocumentModifiedStatus, slice, switchToDocument };
152
+ export { COMPONENT_DOCUMENT_TYPE, type Document, type ExitTo, type ExtendedWindow, type V1Document, type V1DocumentsManager, useActiveDocument as __useActiveDocument, useActiveDocumentActions as __useActiveDocumentActions, useHostDocument as __useHostDocument, useNavigateToDocument as __useNavigateToDocument, useOpenDocumentInNewTab as __useOpenDocumentInNewTab, getCurrentDocument, getV1CurrentDocument, getV1DocumentsManager, init, invalidateDocumentData, isDocumentDirty, reloadCurrentDocument, setDocumentModifiedStatus, slice, switchToDocument };
package/dist/index.js CHANGED
@@ -32,6 +32,7 @@ __export(index_exports, {
32
32
  init: () => init,
33
33
  invalidateDocumentData: () => invalidateDocumentData,
34
34
  isDocumentDirty: () => isDocumentDirty,
35
+ reloadCurrentDocument: () => reloadCurrentDocument,
35
36
  setDocumentModifiedStatus: () => setDocumentModifiedStatus,
36
37
  slice: () => slice,
37
38
  switchToDocument: () => switchToDocument
@@ -40,7 +41,7 @@ module.exports = __toCommonJS(index_exports);
40
41
 
41
42
  // src/init.ts
42
43
  var import_editor = require("@elementor/editor");
43
- var import_store7 = require("@elementor/store");
44
+ var import_store8 = require("@elementor/store");
44
45
 
45
46
  // src/hooks/use-sync-document-title.ts
46
47
  var import_react = require("react");
@@ -171,11 +172,19 @@ var slice = (0, import_store4.__createSlice)({
171
172
 
172
173
  // src/sync/sync-store.ts
173
174
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
174
- var import_store5 = require("@elementor/store");
175
+ var import_store6 = require("@elementor/store");
175
176
  var import_utils = require("@elementor/utils");
176
177
 
177
178
  // src/sync/utils.ts
178
179
  var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
180
+
181
+ // src/store/get-current-document.ts
182
+ var import_store5 = require("@elementor/store");
183
+ function getCurrentDocument() {
184
+ return selectActiveDocument((0, import_store5.__getState)());
185
+ }
186
+
187
+ // src/sync/utils.ts
179
188
  function getV1DocumentsManager() {
180
189
  const documentsManager = window.elementor?.documents;
181
190
  if (!documentsManager) {
@@ -201,6 +210,9 @@ function getV1DocumentShowCopyAndShare(documentData) {
201
210
  function getV1DocumentPermalink(documentData) {
202
211
  return documentData.config.urls.permalink ?? "";
203
212
  }
213
+ function getV1DocumentWpPreview(documentData) {
214
+ return documentData.config.urls.wp_preview ?? "";
215
+ }
204
216
  function normalizeV1Document(documentData) {
205
217
  const isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;
206
218
  const exitToUrl = getV1DocumentsExitTo(documentData);
@@ -217,6 +229,7 @@ function normalizeV1Document(documentData) {
217
229
  },
218
230
  links: {
219
231
  permalink: getV1DocumentPermalink(documentData),
232
+ wpPreview: getV1DocumentWpPreview(documentData),
220
233
  platformEdit: exitToUrl
221
234
  },
222
235
  isDirty: documentData.editor.isChanged || isUnpublishedRevision,
@@ -246,6 +259,18 @@ function invalidateDocumentData(documentId) {
246
259
  const documentsManager = getV1DocumentsManager();
247
260
  documentsManager.invalidateCache(documentId);
248
261
  }
262
+ function reloadCurrentDocument() {
263
+ const currentDocument = getCurrentDocument();
264
+ if (!currentDocument?.id) {
265
+ return Promise.resolve();
266
+ }
267
+ getV1DocumentsManager().invalidateCache();
268
+ return (0, import_editor_v1_adapters.__privateRunCommand)("editor/documents/switch", {
269
+ id: currentDocument.id,
270
+ shouldScroll: false,
271
+ shouldNavigateToDefaultRoute: false
272
+ });
273
+ }
249
274
  function switchToDocument(documentId, options) {
250
275
  return (0, import_editor_v1_adapters.__privateRunCommand)("editor/documents/switch", {
251
276
  id: documentId,
@@ -273,7 +298,7 @@ function syncInitialization() {
273
298
  },
274
299
  {}
275
300
  );
276
- (0, import_store5.__dispatch)(
301
+ (0, import_store6.__dispatch)(
277
302
  init2({
278
303
  entities,
279
304
  hostId: documentsManager.getInitialId(),
@@ -287,9 +312,9 @@ function syncActiveDocument() {
287
312
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("editor/documents/open"), () => {
288
313
  const documentsManager = getV1DocumentsManager();
289
314
  const currentDocument = normalizeV1Document(documentsManager.getCurrent());
290
- (0, import_store5.__dispatch)(activateDocument(currentDocument));
315
+ (0, import_store6.__dispatch)(activateDocument(currentDocument));
291
316
  if (documentsManager.getInitialId() === currentDocument.id) {
292
- (0, import_store5.__dispatch)(setAsHost(currentDocument.id));
317
+ (0, import_store6.__dispatch)(setAsHost(currentDocument.id));
293
318
  }
294
319
  });
295
320
  }
@@ -301,17 +326,17 @@ function syncOnDocumentSave() {
301
326
  };
302
327
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandStartEvent)("document/save/save"), (e) => {
303
328
  if (isDraft(e)) {
304
- (0, import_store5.__dispatch)(startSavingDraft());
329
+ (0, import_store6.__dispatch)(startSavingDraft());
305
330
  return;
306
331
  }
307
- (0, import_store5.__dispatch)(startSaving());
332
+ (0, import_store6.__dispatch)(startSaving());
308
333
  });
309
334
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("document/save/save"), (e) => {
310
335
  const activeDocument = normalizeV1Document(getV1DocumentsManager().getCurrent());
311
336
  if (isDraft(e)) {
312
- (0, import_store5.__dispatch)(endSavingDraft(activeDocument));
337
+ (0, import_store6.__dispatch)(endSavingDraft(activeDocument));
313
338
  } else {
314
- (0, import_store5.__dispatch)(endSaving(activeDocument));
339
+ (0, import_store6.__dispatch)(endSaving(activeDocument));
315
340
  }
316
341
  });
317
342
  }
@@ -324,7 +349,7 @@ function syncOnTitleChange() {
324
349
  }
325
350
  const currentDocument = getV1DocumentsManager().getCurrent();
326
351
  const newTitle = currentDocument.container.settings.get("post_title");
327
- (0, import_store5.__dispatch)(updateActiveDocument({ title: newTitle }));
352
+ (0, import_store6.__dispatch)(updateActiveDocument({ title: newTitle }));
328
353
  }, 400);
329
354
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("document/elements/settings"), updateTitle);
330
355
  }
@@ -338,23 +363,24 @@ function syncOnExitToChange() {
338
363
  const currentDocument = getV1DocumentsManager().getCurrent();
339
364
  const newExitTo = getV1DocumentsExitTo(currentDocument);
340
365
  const permalink = getV1DocumentPermalink(currentDocument);
341
- (0, import_store5.__dispatch)(updateActiveDocument({ links: { platformEdit: newExitTo, permalink } }));
366
+ const wpPreview = getV1DocumentWpPreview(currentDocument);
367
+ (0, import_store6.__dispatch)(updateActiveDocument({ links: { platformEdit: newExitTo, permalink, wpPreview } }));
342
368
  }, 400);
343
369
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("document/elements/settings"), updateExitTo);
344
370
  }
345
371
  function syncOnDocumentChange() {
346
372
  const { markAsDirty, markAsPristine } = slice.actions;
347
373
  (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("document/save/set-is-modified"), () => {
348
- const isSaving = selectActiveDocument((0, import_store5.__getState)())?.isSaving;
374
+ const isSaving = selectActiveDocument((0, import_store6.__getState)())?.isSaving;
349
375
  if (isSaving) {
350
376
  return;
351
377
  }
352
378
  const currentDocument = getV1DocumentsManager().getCurrent();
353
379
  if (currentDocument.editor.isChanged) {
354
- (0, import_store5.__dispatch)(markAsDirty());
380
+ (0, import_store6.__dispatch)(markAsDirty());
355
381
  return;
356
382
  }
357
- (0, import_store5.__dispatch)(markAsPristine());
383
+ (0, import_store6.__dispatch)(markAsPristine());
358
384
  });
359
385
  }
360
386
 
@@ -367,7 +393,7 @@ function init() {
367
393
  });
368
394
  }
369
395
  function initStore() {
370
- (0, import_store7.__registerSlice)(slice);
396
+ (0, import_store8.__registerSlice)(slice);
371
397
  syncStore();
372
398
  }
373
399
 
@@ -420,12 +446,6 @@ function useOpenDocumentInNewTab() {
420
446
  }, []);
421
447
  }
422
448
 
423
- // src/store/get-current-document.ts
424
- var import_store9 = require("@elementor/store");
425
- function getCurrentDocument() {
426
- return selectActiveDocument((0, import_store9.__getState)());
427
- }
428
-
429
449
  // src/consts.ts
430
450
  var COMPONENT_DOCUMENT_TYPE = "elementor_component";
431
451
  // Annotate the CommonJS export names for ESM import in node:
@@ -442,6 +462,7 @@ var COMPONENT_DOCUMENT_TYPE = "elementor_component";
442
462
  init,
443
463
  invalidateDocumentData,
444
464
  isDocumentDirty,
465
+ reloadCurrentDocument,
445
466
  setDocumentModifiedStatus,
446
467
  slice,
447
468
  switchToDocument
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","../src/hooks/utils.ts","../src/hooks/use-open-document-in-new-tab.ts","../src/store/get-current-document.ts","../src/consts.ts"],"sourcesContent":["export { init } from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n\tuseOpenDocumentInNewTab as __useOpenDocumentInNewTab,\n} from './hooks';\n\nexport { slice } from './store';\n\nexport { getCurrentDocument } from './store/get-current-document';\n\nexport {\n\tsetDocumentModifiedStatus,\n\tgetV1DocumentsManager,\n\tgetV1CurrentDocument,\n\tisDocumentDirty,\n\tinvalidateDocumentData,\n\tswitchToDocument,\n} from './sync/utils';\n\nexport { COMPONENT_DOCUMENT_TYPE } from './consts';\n\nexport * from './types';\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 function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import {\n\t__privateRunCommand as runCommand,\n\t__privateRunCommandSync as runCommandSync,\n} from '@elementor/editor-v1-adapters';\n\nimport { 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\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n\nexport function getV1CurrentDocument(): V1Document {\n\treturn ( window as unknown as ExtendedWindow ).elementor?.documents?.getCurrent();\n}\n\nexport function isDocumentDirty( document: Document ) {\n\tconst isDraft = document.status.value === 'draft';\n\n\t// When the document is published, but have draft version.\n\tconst hasAutosave = document.revisions?.current_id !== document.id;\n\n\treturn isDraft || hasAutosave;\n}\n\nexport function invalidateDocumentData( documentId: number ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache( documentId );\n}\n\nexport function switchToDocument(\n\tdocumentId: number,\n\toptions: {\n\t\tselector?: string;\n\t\tmode?: 'autosave' | 'draft';\n\t\tsetAsInitial?: boolean;\n\t\tshouldScroll?: boolean;\n\t\tshouldNavigateToDefaultRoute?: boolean;\n\t}\n) {\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: documentId,\n\t\t...options,\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';\n\nimport { switchToDocument } from '../sync/utils';\nimport { getUpdateUrl } from './utils';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\tawait switchToDocument( id, { setAsInitial: true } );\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","export const getUpdateUrl = ( id: number ) => {\n\tconst url = new URL( window.location.href );\n\n\turl.searchParams.set( 'post', id.toString() );\n\turl.searchParams.delete( 'active-document' );\n\treturn url;\n};\n","import { useCallback } from 'react';\n\nimport { getUpdateUrl } from './utils';\n\nexport default function useOpenDocumentInNewTab() {\n\treturn useCallback( ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\twindow.open( url.href );\n\t}, [] );\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getCurrentDocument() {\n\treturn selectActiveDocument( getState() );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n"],"mappings":"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","names":["import_store","import_store","useSelector","import_store","useSelector","import_store","import_editor_v1_adapters","import_store","runCommandSync","runCommand","init","listenTo","getState","import_react","import_editor_v1_adapters","runCommand","openRoute","import_react","import_react","import_store","getState"]}
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/store/get-current-document.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts","../src/hooks/utils.ts","../src/hooks/use-open-document-in-new-tab.ts","../src/consts.ts"],"sourcesContent":["export { init } from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n\tuseOpenDocumentInNewTab as __useOpenDocumentInNewTab,\n} from './hooks';\n\nexport { slice } from './store';\n\nexport { getCurrentDocument } from './store/get-current-document';\n\nexport {\n\tsetDocumentModifiedStatus,\n\tgetV1DocumentsManager,\n\tgetV1CurrentDocument,\n\tisDocumentDirty,\n\tinvalidateDocumentData,\n\treloadCurrentDocument,\n\tswitchToDocument,\n} from './sync/utils';\n\nexport { COMPONENT_DOCUMENT_TYPE } from './consts';\n\nexport * from './types';\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 function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport {\n\tgetV1DocumentPermalink,\n\tgetV1DocumentsExitTo,\n\tgetV1DocumentsManager,\n\tgetV1DocumentWpPreview,\n\tnormalizeV1Document,\n} 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\t\tconst wpPreview = getV1DocumentWpPreview( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink, wpPreview } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import {\n\t__privateRunCommand as runCommand,\n\t__privateRunCommandSync as runCommandSync,\n} from '@elementor/editor-v1-adapters';\n\nimport { getCurrentDocument } from '../store/get-current-document';\nimport { 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 getV1DocumentWpPreview( documentData: V1Document ) {\n\treturn documentData.config.urls.wp_preview ?? '';\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\twpPreview: getV1DocumentWpPreview( 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\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n\nexport function getV1CurrentDocument(): V1Document {\n\treturn ( window as unknown as ExtendedWindow ).elementor?.documents?.getCurrent();\n}\n\nexport function isDocumentDirty( document: Document ) {\n\tconst isDraft = document.status.value === 'draft';\n\n\t// When the document is published, but have draft version.\n\tconst hasAutosave = document.revisions?.current_id !== document.id;\n\n\treturn isDraft || hasAutosave;\n}\n\nexport function invalidateDocumentData( documentId: number ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache( documentId );\n}\n\nexport function reloadCurrentDocument() {\n\tconst currentDocument = getCurrentDocument();\n\n\tif ( ! currentDocument?.id ) {\n\t\treturn Promise.resolve();\n\t}\n\n\tgetV1DocumentsManager().invalidateCache();\n\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: currentDocument.id,\n\t\tshouldScroll: false,\n\t\tshouldNavigateToDefaultRoute: false,\n\t} );\n}\n\nexport function switchToDocument(\n\tdocumentId: number,\n\toptions: {\n\t\tselector?: string;\n\t\tmode?: 'autosave' | 'draft';\n\t\tsetAsInitial?: boolean;\n\t\tshouldScroll?: boolean;\n\t\tshouldNavigateToDefaultRoute?: boolean;\n\t}\n) {\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: documentId,\n\t\t...options,\n\t} );\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getCurrentDocument() {\n\treturn selectActiveDocument( getState() );\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';\n\nimport { switchToDocument } from '../sync/utils';\nimport { getUpdateUrl } from './utils';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\tawait switchToDocument( id, { setAsInitial: true } );\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","export const getUpdateUrl = ( id: number ) => {\n\tconst url = new URL( window.location.href );\n\n\turl.searchParams.set( 'post', id.toString() );\n\turl.searchParams.delete( 'active-document' );\n\treturn url;\n};\n","import { useCallback } from 'react';\n\nimport { getUpdateUrl } from './utils';\n\nexport default function useOpenDocumentInNewTab() {\n\treturn useCallback( ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\twindow.open( url.href );\n\t}, [] );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n"],"mappings":"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","names":["import_store","import_store","useSelector","import_store","useSelector","import_store","import_editor_v1_adapters","import_store","import_store","getState","runCommandSync","runCommand","init","listenTo","getState","import_react","import_editor_v1_adapters","runCommand","openRoute","import_react","import_react"]}
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, __getState as getState } from "@elementor/store";
139
+ import { __dispatch, __getState as getState2 } from "@elementor/store";
140
140
  import { debounce } from "@elementor/utils";
141
141
 
142
142
  // src/sync/utils.ts
@@ -144,6 +144,14 @@ import {
144
144
  __privateRunCommand as runCommand,
145
145
  __privateRunCommandSync as runCommandSync
146
146
  } from "@elementor/editor-v1-adapters";
147
+
148
+ // src/store/get-current-document.ts
149
+ import { __getState as getState } from "@elementor/store";
150
+ function getCurrentDocument() {
151
+ return selectActiveDocument(getState());
152
+ }
153
+
154
+ // src/sync/utils.ts
147
155
  function getV1DocumentsManager() {
148
156
  const documentsManager = window.elementor?.documents;
149
157
  if (!documentsManager) {
@@ -169,6 +177,9 @@ function getV1DocumentShowCopyAndShare(documentData) {
169
177
  function getV1DocumentPermalink(documentData) {
170
178
  return documentData.config.urls.permalink ?? "";
171
179
  }
180
+ function getV1DocumentWpPreview(documentData) {
181
+ return documentData.config.urls.wp_preview ?? "";
182
+ }
172
183
  function normalizeV1Document(documentData) {
173
184
  const isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;
174
185
  const exitToUrl = getV1DocumentsExitTo(documentData);
@@ -185,6 +196,7 @@ function normalizeV1Document(documentData) {
185
196
  },
186
197
  links: {
187
198
  permalink: getV1DocumentPermalink(documentData),
199
+ wpPreview: getV1DocumentWpPreview(documentData),
188
200
  platformEdit: exitToUrl
189
201
  },
190
202
  isDirty: documentData.editor.isChanged || isUnpublishedRevision,
@@ -214,6 +226,18 @@ function invalidateDocumentData(documentId) {
214
226
  const documentsManager = getV1DocumentsManager();
215
227
  documentsManager.invalidateCache(documentId);
216
228
  }
229
+ function reloadCurrentDocument() {
230
+ const currentDocument = getCurrentDocument();
231
+ if (!currentDocument?.id) {
232
+ return Promise.resolve();
233
+ }
234
+ getV1DocumentsManager().invalidateCache();
235
+ return runCommand("editor/documents/switch", {
236
+ id: currentDocument.id,
237
+ shouldScroll: false,
238
+ shouldNavigateToDefaultRoute: false
239
+ });
240
+ }
217
241
  function switchToDocument(documentId, options) {
218
242
  return runCommand("editor/documents/switch", {
219
243
  id: documentId,
@@ -306,14 +330,15 @@ function syncOnExitToChange() {
306
330
  const currentDocument = getV1DocumentsManager().getCurrent();
307
331
  const newExitTo = getV1DocumentsExitTo(currentDocument);
308
332
  const permalink = getV1DocumentPermalink(currentDocument);
309
- __dispatch(updateActiveDocument({ links: { platformEdit: newExitTo, permalink } }));
333
+ const wpPreview = getV1DocumentWpPreview(currentDocument);
334
+ __dispatch(updateActiveDocument({ links: { platformEdit: newExitTo, permalink, wpPreview } }));
310
335
  }, 400);
311
336
  listenTo(commandEndEvent("document/elements/settings"), updateExitTo);
312
337
  }
313
338
  function syncOnDocumentChange() {
314
339
  const { markAsDirty, markAsPristine } = slice.actions;
315
340
  listenTo(commandEndEvent("document/save/set-is-modified"), () => {
316
- const isSaving = selectActiveDocument(getState())?.isSaving;
341
+ const isSaving = selectActiveDocument(getState2())?.isSaving;
317
342
  if (isSaving) {
318
343
  return;
319
344
  }
@@ -388,12 +413,6 @@ function useOpenDocumentInNewTab() {
388
413
  }, []);
389
414
  }
390
415
 
391
- // src/store/get-current-document.ts
392
- import { __getState as getState2 } from "@elementor/store";
393
- function getCurrentDocument() {
394
- return selectActiveDocument(getState2());
395
- }
396
-
397
416
  // src/consts.ts
398
417
  var COMPONENT_DOCUMENT_TYPE = "elementor_component";
399
418
  export {
@@ -409,6 +428,7 @@ export {
409
428
  init,
410
429
  invalidateDocumentData,
411
430
  isDocumentDirty,
431
+ reloadCurrentDocument,
412
432
  setDocumentModifiedStatus,
413
433
  slice,
414
434
  switchToDocument
@@ -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/hooks/utils.ts","../src/hooks/use-open-document-in-new-tab.ts","../src/store/get-current-document.ts","../src/consts.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 function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';\n\nexport function syncStore() {\n\tsyncInitialization();\n\tsyncActiveDocument();\n\tsyncOnDocumentSave();\n\tsyncOnTitleChange();\n\tsyncOnDocumentChange();\n\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import {\n\t__privateRunCommand as runCommand,\n\t__privateRunCommandSync as runCommandSync,\n} from '@elementor/editor-v1-adapters';\n\nimport { 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\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n\nexport function getV1CurrentDocument(): V1Document {\n\treturn ( window as unknown as ExtendedWindow ).elementor?.documents?.getCurrent();\n}\n\nexport function isDocumentDirty( document: Document ) {\n\tconst isDraft = document.status.value === 'draft';\n\n\t// When the document is published, but have draft version.\n\tconst hasAutosave = document.revisions?.current_id !== document.id;\n\n\treturn isDraft || hasAutosave;\n}\n\nexport function invalidateDocumentData( documentId: number ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache( documentId );\n}\n\nexport function switchToDocument(\n\tdocumentId: number,\n\toptions: {\n\t\tselector?: string;\n\t\tmode?: 'autosave' | 'draft';\n\t\tsetAsInitial?: boolean;\n\t\tshouldScroll?: boolean;\n\t\tshouldNavigateToDefaultRoute?: boolean;\n\t}\n) {\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: documentId,\n\t\t...options,\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';\n\nimport { switchToDocument } from '../sync/utils';\nimport { getUpdateUrl } from './utils';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\tawait switchToDocument( id, { setAsInitial: true } );\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","export const getUpdateUrl = ( id: number ) => {\n\tconst url = new URL( window.location.href );\n\n\turl.searchParams.set( 'post', id.toString() );\n\turl.searchParams.delete( 'active-document' );\n\treturn url;\n};\n","import { useCallback } from 'react';\n\nimport { getUpdateUrl } from './utils';\n\nexport default function useOpenDocumentInNewTab() {\n\treturn useCallback( ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\twindow.open( url.href );\n\t}, [] );\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getCurrentDocument() {\n\treturn selectActiveDocument( getState() );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n"],"mappings":"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","names":["useSelector","useSelector","init","runCommand","runCommand","useCallback","useCallback","useCallback","useCallback","getState","getState"]}
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/store/get-current-document.ts","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts","../src/hooks/utils.ts","../src/hooks/use-open-document-in-new-tab.ts","../src/consts.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 function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport useActiveDocument from './use-active-document';\nimport useHostDocument from './use-host-document';\n\nexport default function useSyncDocumentTitle() {\n\tconst activeDocument = useActiveDocument();\n\tconst hostDocument = useHostDocument();\n\n\tconst document = activeDocument && activeDocument.type.value !== 'kit' ? activeDocument : hostDocument;\n\n\tuseEffect( () => {\n\t\t// Allow empty string as title.\n\t\tif ( document?.title === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// translators: %s: Document title.\n\t\tconst title = __( 'Edit \"%s\" with Elementor', 'elementor' ).replace( '%s', document.title );\n\n\t\twindow.document.title = title;\n\t}, [ document?.title ] );\n}\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import { __createSelector, type SliceState } from '@elementor/store';\n\nimport { type slice } from './index';\n\ntype State = SliceState< typeof slice >;\n\nconst selectEntities = ( state: State ) => state.documents.entities;\nconst selectActiveId = ( state: State ) => state.documents.activeId;\nconst selectHostId = ( state: State ) => state.documents.hostId;\n\nexport const selectActiveDocument = __createSelector( selectEntities, selectActiveId, ( entities, activeId ) =>\n\tactiveId && entities[ activeId ] ? entities[ activeId ] : null\n);\n\nexport const selectHostDocument = __createSelector( selectEntities, selectHostId, ( entities, hostId ) =>\n\thostId && entities[ hostId ] ? entities[ hostId ] : null\n);\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { __createSlice, type PayloadAction } from '@elementor/store';\n\nimport { type Document } from '../types';\n\ntype State = {\n\tentities: Record< Document[ 'id' ], Document >;\n\tactiveId: Document[ 'id' ] | null; // The currently editing document.\n\thostId: Document[ 'id' ] | null; // The document that host all the other documents.\n};\n\nconst initialState: State = {\n\tentities: {},\n\tactiveId: null,\n\thostId: null,\n};\n\ntype StateWithActiveId = Omit< State, 'activeId' > & { activeId: NonNullable< State[ 'activeId' ] > };\n\nfunction hasActiveEntity( state: State ): state is StateWithActiveId {\n\treturn !! ( state.activeId && state.entities[ state.activeId ] );\n}\n\nexport const slice = __createSlice( {\n\tname: 'documents',\n\tinitialState,\n\treducers: {\n\t\tinit( state, { payload }: PayloadAction< State > ) {\n\t\t\tstate.entities = payload.entities;\n\t\t\tstate.hostId = payload.hostId;\n\t\t\tstate.activeId = payload.activeId;\n\t\t},\n\n\t\tactivateDocument( state, action: PayloadAction< Document > ) {\n\t\t\tstate.entities[ action.payload.id ] = action.payload;\n\t\t\tstate.activeId = action.payload.id;\n\t\t},\n\n\t\tsetAsHost( state, action: PayloadAction< Document[ 'id' ] > ) {\n\t\t\tstate.hostId = action.payload;\n\t\t},\n\n\t\tupdateActiveDocument( state, action: PayloadAction< Partial< Document > > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...state.entities[ state.activeId ],\n\t\t\t\t\t...action.payload,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSaving( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSaving = true;\n\t\t\t}\n\t\t},\n\n\t\tendSaving( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSaving: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tstartSavingDraft: ( state ) => {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isSavingDraft = true;\n\t\t\t}\n\t\t},\n\n\t\tendSavingDraft( state, action: PayloadAction< Document > ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ] = {\n\t\t\t\t\t...action.payload,\n\t\t\t\t\tisSavingDraft: false,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\n\t\tmarkAsDirty( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = true;\n\t\t\t}\n\t\t},\n\n\t\tmarkAsPristine( state ) {\n\t\t\tif ( hasActiveEntity( state ) ) {\n\t\t\t\tstate.entities[ state.activeId ].isDirty = false;\n\t\t\t}\n\t\t},\n\t},\n} );\n","import {\n\t__privateListenTo as listenTo,\n\tcommandEndEvent,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\ttype ListenerEvent,\n\tv1ReadyEvent,\n} from '@elementor/editor-v1-adapters';\nimport { __dispatch, __getState as getState } from '@elementor/store';\nimport { debounce } from '@elementor/utils';\n\nimport { slice } from '../store';\nimport { selectActiveDocument } from '../store/selectors';\nimport { type Document } from '../types';\nimport {\n\tgetV1DocumentPermalink,\n\tgetV1DocumentsExitTo,\n\tgetV1DocumentsManager,\n\tgetV1DocumentWpPreview,\n\tnormalizeV1Document,\n} 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\t\tconst wpPreview = getV1DocumentWpPreview( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink, wpPreview } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\t// Skip the dirtiness check if the document is currently being saved, to prevent the UI\n\t\t// from showing a disabled publish button while there is a save process. The state will\n\t\t// be updated when the save process ends and the whole document state it normalized\n\t\t// (see `syncOnDocumentSave`)\n\t\tconst isSaving = selectActiveDocument( getState() )?.isSaving;\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n","import {\n\t__privateRunCommand as runCommand,\n\t__privateRunCommandSync as runCommandSync,\n} from '@elementor/editor-v1-adapters';\n\nimport { getCurrentDocument } from '../store/get-current-document';\nimport { 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 getV1DocumentWpPreview( documentData: V1Document ) {\n\treturn documentData.config.urls.wp_preview ?? '';\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\twpPreview: getV1DocumentWpPreview( 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\nexport function setDocumentModifiedStatus( status: boolean ) {\n\trunCommandSync( 'document/save/set-is-modified', { status }, { internal: true } );\n}\n\nexport function getV1CurrentDocument(): V1Document {\n\treturn ( window as unknown as ExtendedWindow ).elementor?.documents?.getCurrent();\n}\n\nexport function isDocumentDirty( document: Document ) {\n\tconst isDraft = document.status.value === 'draft';\n\n\t// When the document is published, but have draft version.\n\tconst hasAutosave = document.revisions?.current_id !== document.id;\n\n\treturn isDraft || hasAutosave;\n}\n\nexport function invalidateDocumentData( documentId: number ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache( documentId );\n}\n\nexport function reloadCurrentDocument() {\n\tconst currentDocument = getCurrentDocument();\n\n\tif ( ! currentDocument?.id ) {\n\t\treturn Promise.resolve();\n\t}\n\n\tgetV1DocumentsManager().invalidateCache();\n\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: currentDocument.id,\n\t\tshouldScroll: false,\n\t\tshouldNavigateToDefaultRoute: false,\n\t} );\n}\n\nexport function switchToDocument(\n\tdocumentId: number,\n\toptions: {\n\t\tselector?: string;\n\t\tmode?: 'autosave' | 'draft';\n\t\tsetAsInitial?: boolean;\n\t\tshouldScroll?: boolean;\n\t\tshouldNavigateToDefaultRoute?: boolean;\n\t}\n) {\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: documentId,\n\t\t...options,\n\t} );\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectActiveDocument } from '../store/selectors';\n\nexport function getCurrentDocument() {\n\treturn selectActiveDocument( getState() );\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';\n\nimport { switchToDocument } from '../sync/utils';\nimport { getUpdateUrl } from './utils';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\tawait switchToDocument( id, { setAsInitial: true } );\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n","export const getUpdateUrl = ( id: number ) => {\n\tconst url = new URL( window.location.href );\n\n\turl.searchParams.set( 'post', id.toString() );\n\turl.searchParams.delete( 'active-document' );\n\treturn url;\n};\n","import { useCallback } from 'react';\n\nimport { getUpdateUrl } from './utils';\n\nexport default function useOpenDocumentInNewTab() {\n\treturn useCallback( ( id: number ) => {\n\t\tconst url = getUpdateUrl( id );\n\t\twindow.open( url.href );\n\t}, [] );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n"],"mappings":"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","names":["useSelector","useSelector","getState","init","getState","runCommand","runCommand","useCallback","useCallback","useCallback","useCallback"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-documents",
3
- "version": "4.1.0-manual",
3
+ "version": "4.2.0-839",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -39,11 +39,11 @@
39
39
  "dev": "tsup --config=../../tsup.dev.ts"
40
40
  },
41
41
  "dependencies": {
42
- "@elementor/editor": "4.1.0-manual",
43
- "@elementor/editor-elements": "4.1.0-manual",
44
- "@elementor/editor-v1-adapters": "4.1.0-manual",
45
- "@elementor/store": "4.1.0-manual",
46
- "@elementor/utils": "4.1.0-manual",
42
+ "@elementor/editor": "4.2.0-839",
43
+ "@elementor/editor-elements": "4.2.0-839",
44
+ "@elementor/editor-v1-adapters": "4.2.0-839",
45
+ "@elementor/store": "4.2.0-839",
46
+ "@elementor/utils": "4.2.0-839",
47
47
  "@wordpress/i18n": "^5.13.0"
48
48
  },
49
49
  "peerDependencies": {
package/src/index.ts CHANGED
@@ -18,6 +18,7 @@ export {
18
18
  getV1CurrentDocument,
19
19
  isDocumentDirty,
20
20
  invalidateDocumentData,
21
+ reloadCurrentDocument,
21
22
  switchToDocument,
22
23
  } from './sync/utils';
23
24
 
@@ -12,7 +12,13 @@ import { debounce } from '@elementor/utils';
12
12
  import { slice } from '../store';
13
13
  import { selectActiveDocument } from '../store/selectors';
14
14
  import { type Document } from '../types';
15
- import { getV1DocumentPermalink, getV1DocumentsExitTo, getV1DocumentsManager, normalizeV1Document } from './utils';
15
+ import {
16
+ getV1DocumentPermalink,
17
+ getV1DocumentsExitTo,
18
+ getV1DocumentsManager,
19
+ getV1DocumentWpPreview,
20
+ normalizeV1Document,
21
+ } from './utils';
16
22
 
17
23
  export function syncStore() {
18
24
  syncInitialization();
@@ -127,8 +133,9 @@ function syncOnExitToChange() {
127
133
  const currentDocument = getV1DocumentsManager().getCurrent();
128
134
  const newExitTo = getV1DocumentsExitTo( currentDocument );
129
135
  const permalink = getV1DocumentPermalink( currentDocument );
136
+ const wpPreview = getV1DocumentWpPreview( currentDocument );
130
137
 
131
- __dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );
138
+ __dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink, wpPreview } } ) );
132
139
  }, 400 );
133
140
 
134
141
  listenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );
package/src/sync/utils.ts CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  __privateRunCommandSync as runCommandSync,
4
4
  } from '@elementor/editor-v1-adapters';
5
5
 
6
+ import { getCurrentDocument } from '../store/get-current-document';
6
7
  import { type Document, type ExtendedWindow, type V1Document } from '../types';
7
8
 
8
9
  export function getV1DocumentsManager() {
@@ -40,6 +41,10 @@ export function getV1DocumentPermalink( documentData: V1Document ) {
40
41
  return documentData.config.urls.permalink ?? '';
41
42
  }
42
43
 
44
+ export function getV1DocumentWpPreview( documentData: V1Document ) {
45
+ return documentData.config.urls.wp_preview ?? '';
46
+ }
47
+
43
48
  export function normalizeV1Document( documentData: V1Document ): Document {
44
49
  // Draft or autosave.
45
50
  const isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;
@@ -58,6 +63,7 @@ export function normalizeV1Document( documentData: V1Document ): Document {
58
63
  },
59
64
  links: {
60
65
  permalink: getV1DocumentPermalink( documentData ),
66
+ wpPreview: getV1DocumentWpPreview( documentData ),
61
67
  platformEdit: exitToUrl,
62
68
  },
63
69
  isDirty: documentData.editor.isChanged || isUnpublishedRevision,
@@ -96,6 +102,22 @@ export function invalidateDocumentData( documentId: number ) {
96
102
  documentsManager.invalidateCache( documentId );
97
103
  }
98
104
 
105
+ export function reloadCurrentDocument() {
106
+ const currentDocument = getCurrentDocument();
107
+
108
+ if ( ! currentDocument?.id ) {
109
+ return Promise.resolve();
110
+ }
111
+
112
+ getV1DocumentsManager().invalidateCache();
113
+
114
+ return runCommand( 'editor/documents/switch', {
115
+ id: currentDocument.id,
116
+ shouldScroll: false,
117
+ shouldNavigateToDefaultRoute: false,
118
+ } );
119
+ }
120
+
99
121
  export function switchToDocument(
100
122
  documentId: number,
101
123
  options: {
package/src/types.ts CHANGED
@@ -16,6 +16,7 @@ export type Document = {
16
16
  links: {
17
17
  platformEdit: string;
18
18
  permalink: string;
19
+ wpPreview: string;
19
20
  };
20
21
  isDirty: boolean;
21
22
  isSaving: boolean;
@@ -72,6 +73,7 @@ export type V1Document = {
72
73
  urls: {
73
74
  exit_to_dashboard: string;
74
75
  permalink: string;
76
+ wp_preview: string;
75
77
  main_dashboard: string;
76
78
  all_post_type: string;
77
79
  };