@elementor/editor-documents 0.11.3 → 0.11.5
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 +18 -96
- package/dist/index.js +99 -86
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +87 -74
- package/dist/index.mjs.map +1 -1
- package/package.json +42 -40
- package/src/components/logic-hooks.tsx +7 -0
- package/src/hooks/__tests__/use-active-document-actions.test.ts +3 -11
- package/src/hooks/__tests__/use-active-document.test.tsx +1 -1
- package/src/hooks/__tests__/use-host-document.test.tsx +15 -11
- package/src/hooks/__tests__/use-sync-document-title.test.ts +109 -0
- package/src/hooks/use-sync-document-title.ts +23 -0
- package/src/index.ts +1 -3
- package/src/init.ts +7 -0
- package/src/store/index.ts +11 -11
- package/src/store/selectors.ts +5 -13
- package/src/sync/__tests__/sync-store.test.ts +105 -108
- package/src/sync/__tests__/test-utils.ts +23 -19
- package/src/sync/sync-store.ts +52 -71
- package/src/sync/utils.ts +3 -2
- package/src/types.ts +58 -58
package/CHANGELOG.md
CHANGED
|
@@ -3,193 +3,115 @@
|
|
|
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.11.
|
|
6
|
+
## [0.11.5](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.4...@elementor/editor-documents@0.11.5) (2024-07-16)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
9
9
|
|
|
10
|
+
## [0.11.4](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.3...@elementor/editor-documents@0.11.4) (2024-07-16)
|
|
10
11
|
|
|
12
|
+
### Bug Fixes
|
|
11
13
|
|
|
14
|
+
- **editor:** remove extensions dependency [EDS-263] ([#204](https://github.com/elementor/elementor-packages/issues/204)) ([22ca6a4](https://github.com/elementor/elementor-packages/commit/22ca6a423818c479ef7fafc177bba6e45dd697ff))
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
## [0.11.2](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.1...@elementor/editor-documents@0.11.2) (2024-07-03)
|
|
16
|
+
## [0.11.3](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.2...@elementor/editor-documents@0.11.3) (2024-07-08)
|
|
15
17
|
|
|
16
18
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
17
19
|
|
|
20
|
+
## [0.11.2](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.1...@elementor/editor-documents@0.11.2) (2024-07-03)
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
**Note:** Version bump only for package @elementor/editor-documents
|
|
21
23
|
|
|
22
24
|
## [0.11.1](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.11.0...@elementor/editor-documents@0.11.1) (2024-07-02)
|
|
23
25
|
|
|
24
26
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
28
|
# [0.11.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.5...@elementor/editor-documents@0.11.0) (2024-05-09)
|
|
31
29
|
|
|
32
|
-
|
|
33
30
|
### Features
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
- conversions - add logic to top bar for links page ([#181](https://github.com/elementor/elementor-packages/issues/181)) ([19b3d82](https://github.com/elementor/elementor-packages/commit/19b3d82b3795917e8d0aaaf40da36309ec83da97))
|
|
40
33
|
|
|
41
34
|
## [0.10.5](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.4...@elementor/editor-documents@0.10.5) (2024-05-07)
|
|
42
35
|
|
|
43
36
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
44
37
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
38
|
## [0.10.4](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.3...@elementor/editor-documents@0.10.4) (2024-04-16)
|
|
50
39
|
|
|
51
40
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
52
41
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
42
|
## [0.10.3](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.2...@elementor/editor-documents@0.10.3) (2024-02-28)
|
|
58
43
|
|
|
59
44
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
60
45
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
46
|
## [0.10.2](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.1...@elementor/editor-documents@0.10.2) (2024-02-22)
|
|
66
47
|
|
|
67
48
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
68
49
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
50
|
## [0.10.1](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.10.0...@elementor/editor-documents@0.10.1) (2023-10-19)
|
|
74
51
|
|
|
75
52
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
76
53
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
54
|
# [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)
|
|
82
55
|
|
|
83
|
-
|
|
84
56
|
### Features
|
|
85
57
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
58
|
+
- **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))
|
|
91
59
|
|
|
92
60
|
# [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)
|
|
93
61
|
|
|
94
|
-
|
|
95
62
|
### Features
|
|
96
63
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
64
|
+
- **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))
|
|
65
|
+
- **store:** mark experimental functions [ED-12070] ([#114](https://github.com/elementor/elementor-packages/issues/114)) ([d790829](https://github.com/elementor/elementor-packages/commit/d79082911195c75f6d3a89a5619b234e2f5ce158))
|
|
103
66
|
|
|
104
67
|
## [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)
|
|
105
68
|
|
|
106
69
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
107
70
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
71
|
## [0.8.2](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.8.1...@elementor/editor-documents@0.8.2) (2023-06-25)
|
|
113
72
|
|
|
114
|
-
|
|
115
73
|
### Bug Fixes
|
|
116
74
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
75
|
+
- **editor:** document query parameters are not synced properly [ED-11024] ([#54](https://github.com/elementor/elementor-packages/issues/54)) ([4c17080](https://github.com/elementor/elementor-packages/commit/4c17080a7cecec7c807954e9381fb7c840e51ea4))
|
|
122
76
|
|
|
123
77
|
## [0.8.1](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.8.0...@elementor/editor-documents@0.8.1) (2023-06-11)
|
|
124
78
|
|
|
125
79
|
**Note:** Version bump only for package @elementor/editor-documents
|
|
126
80
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
81
|
# [0.8.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.7.0...@elementor/editor-documents@0.8.0) (2023-06-06)
|
|
132
82
|
|
|
133
|
-
|
|
134
83
|
### Features
|
|
135
84
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
85
|
+
- drop support for React 17 [ED-10982] ([#50](https://github.com/elementor/elementor-packages/issues/50)) ([59c576c](https://github.com/elementor/elementor-packages/commit/59c576ca218947dc0992616311d4d399a20e91a6))
|
|
141
86
|
|
|
142
87
|
# [0.7.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.6.0...@elementor/editor-documents@0.7.0) (2023-06-05)
|
|
143
88
|
|
|
144
|
-
|
|
145
89
|
### Features
|
|
146
90
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
91
|
+
- **store:** support creating & registering a slice independently [ED-10914] ([#47](https://github.com/elementor/elementor-packages/issues/47)) ([3cac551](https://github.com/elementor/elementor-packages/commit/3cac551d72cc2df6e11c017323559e3e5c4ab12f))
|
|
152
92
|
|
|
153
93
|
# [0.6.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.5.0...@elementor/editor-documents@0.6.0) (2023-06-01)
|
|
154
94
|
|
|
155
|
-
|
|
156
95
|
### Features
|
|
157
96
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
97
|
+
- add support for React 18 [ED-10905] ([#46](https://github.com/elementor/elementor-packages/issues/46)) ([c8915c6](https://github.com/elementor/elementor-packages/commit/c8915c6ea62550bcdeb5c8a576f311bedc35bcad))
|
|
163
98
|
|
|
164
99
|
# [0.5.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.4.0...@elementor/editor-documents@0.5.0) (2023-05-30)
|
|
165
100
|
|
|
166
|
-
|
|
167
101
|
### Features
|
|
168
102
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
103
|
+
- **editor-documents:** sync document name with V1 [ED-9930] ([#45](https://github.com/elementor/elementor-packages/issues/45)) ([b4d7250](https://github.com/elementor/elementor-packages/commit/b4d7250fb5ed03e21dafcf76a82756cf086ce212))
|
|
174
104
|
|
|
175
105
|
# [0.4.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-documents@0.3.0...@elementor/editor-documents@0.4.0) (2023-05-21)
|
|
176
106
|
|
|
177
|
-
|
|
178
107
|
### Features
|
|
179
108
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
109
|
+
- **editor-site-navigation:** change post without refresh [ED-10713] ([#39](https://github.com/elementor/elementor-packages/issues/39)) ([b72e82f](https://github.com/elementor/elementor-packages/commit/b72e82f9adb9c1237300cbf603f33f268f9f0400))
|
|
185
110
|
|
|
186
111
|
# 0.3.0 (2023-05-16)
|
|
187
112
|
|
|
188
|
-
|
|
189
113
|
### Features
|
|
190
114
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
115
|
+
- **editor-app-bar:** change exit to wordpress link functionality [ED-10275] ([#37](https://github.com/elementor/elementor-packages/issues/37)) ([e0f5b6e](https://github.com/elementor/elementor-packages/commit/e0f5b6e3a50473f8a6d9c9e00474baedeb1b3664))
|
|
194
116
|
|
|
195
117
|
# 0.2.0 (2023-05-09)
|
package/dist/index.js
CHANGED
|
@@ -173,35 +173,34 @@ function syncStore() {
|
|
|
173
173
|
}
|
|
174
174
|
function syncInitialization() {
|
|
175
175
|
const { init: init2 } = slice.actions;
|
|
176
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
177
|
-
|
|
178
|
-
()
|
|
179
|
-
|
|
180
|
-
const entities = Object.entries(documentsManager.documents).reduce((acc, [id, document]) => {
|
|
176
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.v1ReadyEvent)(), () => {
|
|
177
|
+
const documentsManager = getV1DocumentsManager();
|
|
178
|
+
const entities = Object.entries(documentsManager.documents).reduce(
|
|
179
|
+
(acc, [id, document]) => {
|
|
181
180
|
acc[id] = normalizeV1Document(document);
|
|
182
181
|
return acc;
|
|
183
|
-
},
|
|
184
|
-
|
|
182
|
+
},
|
|
183
|
+
{}
|
|
184
|
+
);
|
|
185
|
+
(0, import_store3.__dispatch)(
|
|
186
|
+
init2({
|
|
185
187
|
entities,
|
|
186
188
|
hostId: documentsManager.getInitialId(),
|
|
187
189
|
activeId: documentsManager.getCurrentId()
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
);
|
|
190
|
+
})
|
|
191
|
+
);
|
|
192
|
+
});
|
|
191
193
|
}
|
|
192
194
|
function syncActiveDocument() {
|
|
193
195
|
const { activateDocument, setAsHost } = slice.actions;
|
|
194
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
195
|
-
|
|
196
|
-
()
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
(0, import_store3.__dispatch)(
|
|
200
|
-
if (documentsManager.getInitialId() === currentDocument.id) {
|
|
201
|
-
(0, import_store3.__dispatch)(setAsHost(currentDocument.id));
|
|
202
|
-
}
|
|
196
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("editor/documents/open"), () => {
|
|
197
|
+
const documentsManager = getV1DocumentsManager();
|
|
198
|
+
const currentDocument = normalizeV1Document(documentsManager.getCurrent());
|
|
199
|
+
(0, import_store3.__dispatch)(activateDocument(currentDocument));
|
|
200
|
+
if (documentsManager.getInitialId() === currentDocument.id) {
|
|
201
|
+
(0, import_store3.__dispatch)(setAsHost(currentDocument.id));
|
|
203
202
|
}
|
|
204
|
-
);
|
|
203
|
+
});
|
|
205
204
|
}
|
|
206
205
|
function syncOnDocumentSave() {
|
|
207
206
|
const { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;
|
|
@@ -209,29 +208,21 @@ function syncOnDocumentSave() {
|
|
|
209
208
|
const event = e;
|
|
210
209
|
return event.args?.status === "autosave";
|
|
211
210
|
};
|
|
212
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
(0, import_store3.__dispatch)(startSavingDraft());
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
(0, import_store3.__dispatch)(startSaving());
|
|
211
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandStartEvent)("document/save/save"), (e) => {
|
|
212
|
+
if (isDraft(e)) {
|
|
213
|
+
(0, import_store3.__dispatch)(startSavingDraft());
|
|
214
|
+
return;
|
|
220
215
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
(0, import_store3.__dispatch)(endSavingDraft(activeDocument));
|
|
230
|
-
} else {
|
|
231
|
-
(0, import_store3.__dispatch)(endSaving(activeDocument));
|
|
232
|
-
}
|
|
216
|
+
(0, import_store3.__dispatch)(startSaving());
|
|
217
|
+
});
|
|
218
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("document/save/save"), (e) => {
|
|
219
|
+
const activeDocument = normalizeV1Document(getV1DocumentsManager().getCurrent());
|
|
220
|
+
if (isDraft(e)) {
|
|
221
|
+
(0, import_store3.__dispatch)(endSavingDraft(activeDocument));
|
|
222
|
+
} else {
|
|
223
|
+
(0, import_store3.__dispatch)(endSaving(activeDocument));
|
|
233
224
|
}
|
|
234
|
-
);
|
|
225
|
+
});
|
|
235
226
|
}
|
|
236
227
|
function syncOnTitleChange() {
|
|
237
228
|
const { updateActiveDocument } = slice.actions;
|
|
@@ -244,10 +235,7 @@ function syncOnTitleChange() {
|
|
|
244
235
|
const newTitle = currentDocument.container.settings.get("post_title");
|
|
245
236
|
(0, import_store3.__dispatch)(updateActiveDocument({ title: newTitle }));
|
|
246
237
|
}, 400);
|
|
247
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
248
|
-
(0, import_editor_v1_adapters.commandEndEvent)("document/elements/settings"),
|
|
249
|
-
updateTitle
|
|
250
|
-
);
|
|
238
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("document/elements/settings"), updateTitle);
|
|
251
239
|
}
|
|
252
240
|
function syncOnExitToChange() {
|
|
253
241
|
const { updateActiveDocument } = slice.actions;
|
|
@@ -261,24 +249,18 @@ function syncOnExitToChange() {
|
|
|
261
249
|
const permalink = getV1DocumentPermalink(currentDocument);
|
|
262
250
|
(0, import_store3.__dispatch)(updateActiveDocument({ links: { platformEdit: newExitTo, permalink } }));
|
|
263
251
|
}, 400);
|
|
264
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
265
|
-
(0, import_editor_v1_adapters.commandEndEvent)("document/elements/settings"),
|
|
266
|
-
updateExitTo
|
|
267
|
-
);
|
|
252
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("document/elements/settings"), updateExitTo);
|
|
268
253
|
}
|
|
269
254
|
function syncOnDocumentChange() {
|
|
270
255
|
const { markAsDirty, markAsPristine } = slice.actions;
|
|
271
|
-
(0, import_editor_v1_adapters.__privateListenTo)(
|
|
272
|
-
(
|
|
273
|
-
()
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
(0, import_store3.__dispatch)(markAsDirty());
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
(0, import_store3.__dispatch)(markAsPristine());
|
|
256
|
+
(0, import_editor_v1_adapters.__privateListenTo)((0, import_editor_v1_adapters.commandEndEvent)("document/save/set-is-modified"), () => {
|
|
257
|
+
const currentDocument = getV1DocumentsManager().getCurrent();
|
|
258
|
+
if (currentDocument.editor.isChanged) {
|
|
259
|
+
(0, import_store3.__dispatch)(markAsDirty());
|
|
260
|
+
return;
|
|
280
261
|
}
|
|
281
|
-
|
|
262
|
+
(0, import_store3.__dispatch)(markAsPristine());
|
|
263
|
+
});
|
|
282
264
|
}
|
|
283
265
|
function debounce(fn, timeout) {
|
|
284
266
|
let timer;
|
|
@@ -291,49 +273,86 @@ function debounce(fn, timeout) {
|
|
|
291
273
|
}
|
|
292
274
|
|
|
293
275
|
// src/init.ts
|
|
294
|
-
var import_store4 = require("@elementor/store");
|
|
295
|
-
function init() {
|
|
296
|
-
initStore();
|
|
297
|
-
}
|
|
298
|
-
function initStore() {
|
|
299
|
-
(0, import_store4.__registerSlice)(slice);
|
|
300
|
-
syncStore();
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// src/hooks/use-active-document.ts
|
|
304
276
|
var import_store7 = require("@elementor/store");
|
|
277
|
+
var import_editor = require("@elementor/editor");
|
|
278
|
+
|
|
279
|
+
// src/hooks/use-sync-document-title.ts
|
|
280
|
+
var import_react = require("react");
|
|
281
|
+
|
|
282
|
+
// src/hooks/use-host-document.ts
|
|
283
|
+
var import_store5 = require("@elementor/store");
|
|
305
284
|
|
|
306
285
|
// src/store/selectors.ts
|
|
307
|
-
var
|
|
286
|
+
var import_store4 = require("@elementor/store");
|
|
308
287
|
var selectEntities = (state) => state.documents.entities;
|
|
309
288
|
var selectActiveId = (state) => state.documents.activeId;
|
|
310
289
|
var selectHostId = (state) => state.documents.hostId;
|
|
311
|
-
var selectActiveDocument = (0,
|
|
290
|
+
var selectActiveDocument = (0, import_store4.__createSelector)(
|
|
312
291
|
selectEntities,
|
|
313
292
|
selectActiveId,
|
|
314
293
|
(entities, activeId) => activeId && entities[activeId] ? entities[activeId] : null
|
|
315
294
|
);
|
|
316
|
-
var selectHostDocument = (0,
|
|
295
|
+
var selectHostDocument = (0, import_store4.__createSelector)(
|
|
317
296
|
selectEntities,
|
|
318
297
|
selectHostId,
|
|
319
298
|
(entities, hostId) => hostId && entities[hostId] ? entities[hostId] : null
|
|
320
299
|
);
|
|
321
300
|
|
|
301
|
+
// src/hooks/use-host-document.ts
|
|
302
|
+
function useHostDocument() {
|
|
303
|
+
return (0, import_store5.__useSelector)(selectHostDocument);
|
|
304
|
+
}
|
|
305
|
+
|
|
322
306
|
// src/hooks/use-active-document.ts
|
|
307
|
+
var import_store6 = require("@elementor/store");
|
|
323
308
|
function useActiveDocument() {
|
|
324
|
-
return (0,
|
|
309
|
+
return (0, import_store6.__useSelector)(selectActiveDocument);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// src/hooks/use-sync-document-title.ts
|
|
313
|
+
var import_i18n = require("@wordpress/i18n");
|
|
314
|
+
function useSyncDocumentTitle() {
|
|
315
|
+
const activeDocument = useActiveDocument();
|
|
316
|
+
const hostDocument = useHostDocument();
|
|
317
|
+
const document = activeDocument && activeDocument.type.value !== "kit" ? activeDocument : hostDocument;
|
|
318
|
+
(0, import_react.useEffect)(() => {
|
|
319
|
+
if (document?.title === void 0) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const title = (0, import_i18n.__)('Edit "%s" with Elementor', "elementor").replace("%s", document.title);
|
|
323
|
+
window.document.title = title;
|
|
324
|
+
}, [document?.title]);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// src/components/logic-hooks.tsx
|
|
328
|
+
function LogicHooks() {
|
|
329
|
+
useSyncDocumentTitle();
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// src/init.ts
|
|
334
|
+
function init() {
|
|
335
|
+
initStore();
|
|
336
|
+
(0, import_editor.injectIntoLogic)({
|
|
337
|
+
id: "documents-hooks",
|
|
338
|
+
component: LogicHooks
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
function initStore() {
|
|
342
|
+
(0, import_store7.__registerSlice)(slice);
|
|
343
|
+
syncStore();
|
|
325
344
|
}
|
|
326
345
|
|
|
327
346
|
// src/hooks/use-active-document-actions.ts
|
|
328
|
-
var
|
|
347
|
+
var import_react2 = require("react");
|
|
329
348
|
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
330
349
|
function useActiveDocumentActions() {
|
|
331
350
|
const document = useActiveDocument();
|
|
332
351
|
const permalink = document?.links?.permalink ?? "";
|
|
333
|
-
const save = (0,
|
|
334
|
-
const saveDraft = (0,
|
|
335
|
-
const saveTemplate = (0,
|
|
336
|
-
const copyAndShare = (0,
|
|
352
|
+
const save = (0, import_react2.useCallback)(() => (0, import_editor_v1_adapters2.__privateRunCommand)("document/save/default"), []);
|
|
353
|
+
const saveDraft = (0, import_react2.useCallback)(() => (0, import_editor_v1_adapters2.__privateRunCommand)("document/save/draft"), []);
|
|
354
|
+
const saveTemplate = (0, import_react2.useCallback)(() => (0, import_editor_v1_adapters2.__privateOpenRoute)("library/save-template"), []);
|
|
355
|
+
const copyAndShare = (0, import_react2.useCallback)(() => {
|
|
337
356
|
navigator.clipboard.writeText(permalink);
|
|
338
357
|
}, [permalink]);
|
|
339
358
|
return {
|
|
@@ -344,17 +363,11 @@ function useActiveDocumentActions() {
|
|
|
344
363
|
};
|
|
345
364
|
}
|
|
346
365
|
|
|
347
|
-
// src/hooks/use-host-document.ts
|
|
348
|
-
var import_store8 = require("@elementor/store");
|
|
349
|
-
function useHostDocument() {
|
|
350
|
-
return (0, import_store8.__useSelector)(selectHostDocument);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
366
|
// src/hooks/use-navigate-to-document.ts
|
|
354
|
-
var
|
|
367
|
+
var import_react3 = require("react");
|
|
355
368
|
var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
|
|
356
369
|
function useNavigateToDocument() {
|
|
357
|
-
return (0,
|
|
370
|
+
return (0, import_react3.useCallback)(async (id) => {
|
|
358
371
|
await (0, import_editor_v1_adapters3.__privateRunCommand)("editor/documents/switch", {
|
|
359
372
|
id,
|
|
360
373
|
setAsInitial: true
|
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 {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport {\n\tslice,\n} from './store';\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, getV1DocumentsExitTo, getV1DocumentPermalink } 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\tsyncOnExitToChange();\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 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(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\tupdateExitTo\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 getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference = ( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nexport function getV1DocumentShowCopyAndShare( documentData: V1Document|null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { 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';\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 { __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"]}
|
|
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-sync-document-title.ts","../src/hooks/use-host-document.ts","../src/store/selectors.ts","../src/hooks/use-active-document.ts","../src/components/logic-hooks.tsx","../src/hooks/use-active-document-actions.ts","../src/hooks/use-navigate-to-document.ts"],"sourcesContent":["import init from './init';\n\nexport {\n\tuseActiveDocument as __useActiveDocument,\n\tuseNavigateToDocument as __useNavigateToDocument,\n\tuseHostDocument as __useHostDocument,\n\tuseActiveDocumentActions as __useActiveDocumentActions,\n} from './hooks';\n\nexport { slice } from './store';\n\nexport * from './types';\n\ninit();\n","import { 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, getV1DocumentsExitTo, getV1DocumentPermalink } 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\tsyncOnExitToChange();\n}\n\nfunction syncInitialization() {\n\tconst { init } = slice.actions;\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\n\t\tconst entities = Object.entries( documentsManager.documents ).reduce(\n\t\t\t( acc: Record< string, Document >, [ id, document ] ) => {\n\t\t\t\tacc[ id ] = normalizeV1Document( document );\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\t__dispatch(\n\t\t\tinit( {\n\t\t\t\tentities,\n\t\t\t\thostId: documentsManager.getInitialId(),\n\t\t\t\tactiveId: documentsManager.getCurrentId(),\n\t\t\t} )\n\t\t);\n\t} );\n}\n\nfunction syncActiveDocument() {\n\tconst { activateDocument, setAsHost } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\tconst documentsManager = getV1DocumentsManager();\n\t\tconst currentDocument = normalizeV1Document( documentsManager.getCurrent() );\n\n\t\t__dispatch( activateDocument( currentDocument ) );\n\n\t\tif ( documentsManager.getInitialId() === currentDocument.id ) {\n\t\t\t__dispatch( setAsHost( currentDocument.id ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnDocumentSave() {\n\tconst { startSaving, endSaving, startSavingDraft, endSavingDraft } = slice.actions;\n\n\tconst isDraft = ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { status: string } >;\n\n\t\t/**\n\t\t * @see https://github.com/elementor/elementor/blob/5f815d40a/assets/dev/js/editor/document/save/hooks/ui/save/before.js#L18-L22\n\t\t */\n\t\treturn event.args?.status === 'autosave';\n\t};\n\n\tlistenTo( commandStartEvent( 'document/save/save' ), ( e ) => {\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( startSavingDraft() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( startSaving() );\n\t} );\n\n\tlistenTo( commandEndEvent( 'document/save/save' ), ( e ) => {\n\t\tconst activeDocument = normalizeV1Document( getV1DocumentsManager().getCurrent() );\n\n\t\tif ( isDraft( e ) ) {\n\t\t\t__dispatch( endSavingDraft( activeDocument ) );\n\t\t} else {\n\t\t\t__dispatch( endSaving( activeDocument ) );\n\t\t}\n\t} );\n}\n\nfunction syncOnTitleChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateTitle = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { post_title?: string } } >;\n\n\t\tif ( ! ( 'post_title' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newTitle = currentDocument.container.settings.get( 'post_title' );\n\n\t\t__dispatch( updateActiveDocument( { title: newTitle } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateTitle );\n}\n\nfunction syncOnExitToChange() {\n\tconst { updateActiveDocument } = slice.actions;\n\n\tconst updateExitTo = debounce( ( e: ListenerEvent ) => {\n\t\tconst event = e as CommandEvent< { settings: { exit_to?: string } } >;\n\n\t\tif ( ! ( 'exit_to' in event.args?.settings ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\t\tconst newExitTo = getV1DocumentsExitTo( currentDocument );\n\t\tconst permalink = getV1DocumentPermalink( currentDocument );\n\n\t\t__dispatch( updateActiveDocument( { links: { platformEdit: newExitTo, permalink } } ) );\n\t}, 400 );\n\n\tlistenTo( commandEndEvent( 'document/elements/settings' ), updateExitTo );\n}\n\nfunction syncOnDocumentChange() {\n\tconst { markAsDirty, markAsPristine } = slice.actions;\n\n\tlistenTo( commandEndEvent( 'document/save/set-is-modified' ), () => {\n\t\tconst currentDocument = getV1DocumentsManager().getCurrent();\n\n\t\tif ( currentDocument.editor.isChanged ) {\n\t\t\t__dispatch( markAsDirty() );\n\t\t\treturn;\n\t\t}\n\n\t\t__dispatch( markAsPristine() );\n\t} );\n}\n\nfunction debounce< TArgs extends unknown[] >( fn: ( ...args: TArgs ) => unknown, timeout: number ) {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\t\t}, timeout );\n\t};\n}\n","import { 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 getV1DocumentsExitTo( documentData: V1Document ) {\n\tconst exitPreference =\n\t\t( window as unknown as ExtendedWindow ).elementor?.getPreferences?.( 'exit_to' ) || 'this_post';\n\n\tswitch ( exitPreference ) {\n\t\tcase 'dashboard':\n\t\t\treturn documentData.config.urls.main_dashboard;\n\n\t\tcase 'all_posts':\n\t\t\treturn documentData.config.urls.all_post_type;\n\n\t\tcase 'this_post':\n\t\tdefault:\n\t\t\treturn documentData.config.urls.exit_to_dashboard;\n\t}\n}\n\nexport function getV1DocumentShowCopyAndShare( documentData: V1Document | null ) {\n\treturn documentData?.config?.panel?.show_copy_and_share ?? false;\n}\n\nexport function getV1DocumentPermalink( documentData: V1Document ) {\n\treturn documentData.config.urls.permalink ?? '';\n}\n\nexport function normalizeV1Document( documentData: V1Document ): Document {\n\t// Draft or autosave.\n\tconst isUnpublishedRevision = documentData.config.revisions.current_id !== documentData.id;\n\tconst exitToUrl = getV1DocumentsExitTo( documentData );\n\n\treturn {\n\t\tid: documentData.id,\n\t\ttitle: documentData.container.settings.get( 'post_title' ),\n\t\ttype: {\n\t\t\tvalue: documentData.config.type,\n\t\t\tlabel: documentData.config.panel.title,\n\t\t},\n\t\tstatus: {\n\t\t\tvalue: documentData.config.status.value,\n\t\t\tlabel: documentData.config.status.label,\n\t\t},\n\t\tlinks: {\n\t\t\tpermalink: getV1DocumentPermalink( documentData ),\n\t\t\tplatformEdit: exitToUrl,\n\t\t},\n\t\tisDirty: documentData.editor.isChanged || isUnpublishedRevision,\n\t\tisSaving: documentData.editor.isSaving,\n\t\tisSavingDraft: false,\n\t\tpermissions: {\n\t\t\tallowAddingWidgets: documentData.config.panel?.allow_adding_widgets ?? true,\n\t\t\tshowCopyAndShare: getV1DocumentShowCopyAndShare( documentData ),\n\t\t},\n\t\tuserCan: {\n\t\t\tpublish: documentData.config.user.can_publish,\n\t\t},\n\t};\n}\n","import { syncStore } from './sync';\nimport { __registerSlice } from '@elementor/store';\nimport { slice } from './store';\nimport { injectIntoLogic } from '@elementor/editor';\nimport { LogicHooks } from './components/logic-hooks';\n\nexport default function init() {\n\tinitStore();\n\n\tinjectIntoLogic( {\n\t\tid: 'documents-hooks',\n\t\tcomponent: LogicHooks,\n\t} );\n}\n\nfunction initStore() {\n\t__registerSlice( slice );\n\n\tsyncStore();\n}\n","import { useEffect } from 'react';\nimport useHostDocument from './use-host-document';\nimport useActiveDocument from './use-active-document';\nimport { __ } from '@wordpress/i18n';\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';\nimport { selectHostDocument } from '../store/selectors';\n\nexport default function useHostDocument() {\n\treturn useSelector( selectHostDocument );\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( 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';\nimport { selectActiveDocument } from '../store/selectors';\n\nexport default function useActiveDocument() {\n\treturn useSelector( selectActiveDocument );\n}\n","import useSyncDocumentTitle from '../hooks/use-sync-document-title';\n\nexport function LogicHooks() {\n\tuseSyncDocumentTitle();\n\n\treturn null;\n}\n","import { useCallback } from 'react';\nimport { __privateOpenRoute as openRoute, __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport useActiveDocument from './use-active-document';\n\nexport default function useActiveDocumentActions() {\n\tconst document = useActiveDocument();\n\n\tconst permalink = document?.links?.permalink ?? '';\n\n\tconst save = useCallback( () => runCommand( 'document/save/default' ), [] );\n\n\tconst saveDraft = useCallback( () => runCommand( 'document/save/draft' ), [] );\n\n\tconst saveTemplate = useCallback( () => openRoute( 'library/save-template' ), [] );\n\n\tconst copyAndShare = useCallback( () => {\n\t\tnavigator.clipboard.writeText( permalink );\n\t}, [ permalink ] );\n\n\treturn {\n\t\tsave,\n\t\tsaveDraft,\n\t\tsaveTemplate,\n\t\tcopyAndShare,\n\t};\n}\n","import { useCallback } from 'react';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport default function useNavigateToDocument() {\n\treturn useCallback( async ( id: number ) => {\n\t\tawait runCommand( 'editor/documents/switch', {\n\t\t\tid,\n\t\t\tsetAsInitial: true,\n\t\t} );\n\n\t\tconst url = new URL( window.location.href );\n\n\t\turl.searchParams.set( 'post', id.toString() );\n\t\turl.searchParams.delete( 'active-document' );\n\n\t\thistory.replaceState( {}, '', url );\n\t}, [] );\n}\n"],"mappings":"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","names":["import_store","init","listenTo","import_store","import_store","import_store","useSelector","import_store","useSelector","import_react","import_editor_v1_adapters","runCommand","openRoute","import_react","import_editor_v1_adapters","runCommand"]}
|