@eightyfourthousand/lib-editing 2026.4.3 → 2026.5.1
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/lib/components/editor/EditorProvider.d.ts +2 -1
- package/lib/components/editor/EditorProvider.js +181 -112
- package/lib/components/editor/EditorProvider.js.map +1 -1
- package/lib/components/editor/PaginationProvider.js +28 -4
- package/lib/components/editor/PaginationProvider.js.map +1 -1
- package/lib/components/editor/TranslationBuilder.js +15 -2
- package/lib/components/editor/TranslationBuilder.js.map +1 -1
- package/lib/components/editor/extensions/EndNoteLink/EndNoteLinkHoverContent.d.ts +3 -1
- package/lib/components/editor/extensions/EndNoteLink/EndNoteLinkHoverContent.js +5 -7
- package/lib/components/editor/extensions/EndNoteLink/EndNoteLinkHoverContent.js.map +1 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstance.d.ts +3 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstance.js +39 -25
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstance.js.map +1 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstanceNode.d.ts +4 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstanceNode.js +8 -6
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstanceNode.js.map +1 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossarySearch.d.ts +11 -0
- package/lib/components/editor/extensions/GlossaryInstance/GlossarySearch.js +59 -0
- package/lib/components/editor/extensions/GlossaryInstance/GlossarySearch.js.map +1 -0
- package/lib/components/editor/extensions/InternalLink/InternalLink.js +5 -4
- package/lib/components/editor/extensions/InternalLink/InternalLink.js.map +1 -1
- package/lib/components/editor/extensions/InternalLink/InternalLinkHoverContent.d.ts +3 -1
- package/lib/components/editor/extensions/InternalLink/InternalLinkHoverContent.js +3 -5
- package/lib/components/editor/extensions/InternalLink/InternalLinkHoverContent.js.map +1 -1
- package/lib/components/editor/extensions/Link/LinkHoverContent.d.ts +3 -1
- package/lib/components/editor/extensions/Link/LinkHoverContent.js +3 -5
- package/lib/components/editor/extensions/Link/LinkHoverContent.js.map +1 -1
- package/lib/components/editor/extensions/Mention/MentionHoverContent.d.ts +3 -1
- package/lib/components/editor/extensions/Mention/MentionHoverContent.js +3 -5
- package/lib/components/editor/extensions/Mention/MentionHoverContent.js.map +1 -1
- package/lib/components/editor/extensions/Passage/EditorOptions.d.ts +4 -1
- package/lib/components/editor/extensions/Passage/EditorOptions.js +16 -4
- package/lib/components/editor/extensions/Passage/EditorOptions.js.map +1 -1
- package/lib/components/editor/extensions/Passage/Passage.js +14 -3
- package/lib/components/editor/extensions/Passage/Passage.js.map +1 -1
- package/lib/components/editor/extensions/Passage/PassageNode.js +63 -0
- package/lib/components/editor/extensions/Passage/PassageNode.js.map +1 -1
- package/lib/components/editor/extensions/Passage/ReaderOptions.js +6 -6
- package/lib/components/editor/extensions/Passage/ReaderOptions.js.map +1 -1
- package/lib/components/editor/menus/selectors/GlossarySelector.js +13 -9
- package/lib/components/editor/menus/selectors/GlossarySelector.js.map +1 -1
- package/lib/components/editor/save-filter.d.ts +4 -7
- package/lib/components/editor/save-filter.js +27 -11
- package/lib/components/editor/save-filter.js.map +1 -1
- package/lib/components/shared/HoverCardProvider.d.ts +2 -16
- package/lib/components/shared/HoverCardProvider.js +35 -52
- package/lib/components/shared/HoverCardProvider.js.map +1 -1
- package/lib/components/shared/LabeledElement.d.ts +3 -1
- package/lib/components/shared/LabeledElement.js +10 -5
- package/lib/components/shared/LabeledElement.js.map +1 -1
- package/lib/components/shared/NavigationProvider.js +1 -1
- package/lib/components/shared/NavigationProvider.js.map +1 -1
- package/lib/components/shared/OpenGraphImage.js +1 -1
- package/lib/components/shared/OpenGraphImage.js.map +1 -1
- package/lib/components/shared/SearchReplacePanel.js +5 -2
- package/lib/components/shared/SearchReplacePanel.js.map +1 -1
- package/lib/components/shared/SourceReader.js +1 -1
- package/lib/components/shared/SourceReader.js.map +1 -1
- package/lib/components/shared/bibliography/BibliographyBody.js +4 -1
- package/lib/components/shared/bibliography/BibliographyBody.js.map +1 -1
- package/lib/components/shared/bibliography/BibliographyList.js +1 -1
- package/lib/components/shared/bibliography/BibliographyList.js.map +1 -1
- package/lib/components/shared/glossary/GlossaryTermList.js +1 -1
- package/lib/components/shared/glossary/GlossaryTermList.js.map +1 -1
- package/lib/passage.d.ts +4 -1
- package/lib/passage.js +28 -1
- package/lib/passage.js.map +1 -1
- package/package.json +7 -7
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInput.d.ts +0 -4
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInput.js +0 -22
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInput.js.map +0 -1
|
@@ -14,10 +14,11 @@ interface EditorContextState {
|
|
|
14
14
|
setDoc: (doc: Doc) => void;
|
|
15
15
|
getEditor: (key: string) => Editor | undefined;
|
|
16
16
|
setEditor: (key: string, editor?: Editor) => void;
|
|
17
|
+
refreshEditorBaseline: (key: string) => void;
|
|
17
18
|
save: () => Promise<void>;
|
|
18
19
|
startObserving: (builder: string) => void;
|
|
19
20
|
stopObserving: (builder: string) => void;
|
|
20
|
-
setNavigating: (navigating: boolean,
|
|
21
|
+
setNavigating: (navigating: boolean, resetLastObservedUuids?: boolean, fragment?: XmlFragment) => void;
|
|
21
22
|
isNavigating: () => boolean;
|
|
22
23
|
}
|
|
23
24
|
export declare const EditorContext: React.Context<EditorContextState>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React, { createContext, useCallback, useContext, useRef } from 'react';
|
|
4
|
+
import { CircleAlertIcon, CircleCheckIcon, TriangleAlertIcon, } from 'lucide-react';
|
|
4
5
|
import { Doc, XmlElement, XmlFragment } from 'yjs';
|
|
5
6
|
import { createGraphQLClient, hasPermission, savePassages, } from '@eightyfourthousand/client-graphql';
|
|
7
|
+
import { Toaster, toast } from '@eightyfourthousand/design-system';
|
|
6
8
|
import { passagesFromNodes, ensureUuids } from '../../passage';
|
|
7
9
|
import { NavigationProvider } from '../shared';
|
|
8
10
|
import { useDirtyStore } from './hooks/useDirtyStore';
|
|
@@ -43,9 +45,14 @@ export const EditorContext = createContext({
|
|
|
43
45
|
setEditor: () => {
|
|
44
46
|
throw Error('Not implemented');
|
|
45
47
|
},
|
|
46
|
-
|
|
48
|
+
refreshEditorBaseline: () => {
|
|
47
49
|
// No-op when outside provider
|
|
48
50
|
},
|
|
51
|
+
save: async () => {
|
|
52
|
+
toast('Unable to save.', {
|
|
53
|
+
icon: _jsx(TriangleAlertIcon, { className: "size-4 text-warning" }),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
49
56
|
startObserving: () => {
|
|
50
57
|
throw Error('Not implemented');
|
|
51
58
|
},
|
|
@@ -62,10 +69,12 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
62
69
|
const [doc, setDoc] = React.useState(initialDoc || new Doc());
|
|
63
70
|
// Use ref for immediate tracking to avoid state updates on every keystroke
|
|
64
71
|
const dirtyUuidsRef = useRef(new Set());
|
|
65
|
-
const deletedUuidsRef = useRef(new Set());
|
|
66
72
|
const isNavigatingRef = useRef(false);
|
|
73
|
+
const isNormalizingForSaveRef = useRef(false);
|
|
67
74
|
const clearedFragmentRef = useRef(null);
|
|
68
|
-
const
|
|
75
|
+
const lastObservedUuidsByFragmentRef = useRef(new Map());
|
|
76
|
+
const savedBaselineUuidsByEditorRef = useRef({});
|
|
77
|
+
const observedFragmentsByBuilderRef = useRef({});
|
|
69
78
|
// Store for dirty state with subscription support
|
|
70
79
|
const dirtyStore = useDirtyStore();
|
|
71
80
|
const editorCache = useRef({});
|
|
@@ -75,6 +84,7 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
75
84
|
const setEditor = useCallback((key, editor) => {
|
|
76
85
|
if (!editor && editorCache.current[key]) {
|
|
77
86
|
delete editorCache.current[key];
|
|
87
|
+
delete savedBaselineUuidsByEditorRef.current[key];
|
|
78
88
|
}
|
|
79
89
|
else if (editor) {
|
|
80
90
|
editorCache.current[key] = editor;
|
|
@@ -83,72 +93,56 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
83
93
|
const getFragment = useCallback((builder) => {
|
|
84
94
|
return doc?.getXmlFragment(builder);
|
|
85
95
|
}, [doc]);
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
const getFragmentUuids = useCallback((fragment) => {
|
|
97
|
+
const uuids = new Set();
|
|
98
|
+
for (let i = 0; i < fragment.length; i++) {
|
|
99
|
+
const child = fragment.get(i);
|
|
100
|
+
if (child instanceof XmlElement && child.nodeName === 'passage') {
|
|
101
|
+
const uuid = child.getAttribute('uuid');
|
|
102
|
+
if (uuid) {
|
|
103
|
+
uuids.add(uuid);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
91
106
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
107
|
+
return uuids;
|
|
108
|
+
}, []);
|
|
109
|
+
const getEditorUuids = useCallback((editor) => {
|
|
110
|
+
const uuids = new Set();
|
|
111
|
+
editor.state.doc.descendants((node) => {
|
|
112
|
+
if (node.type.name !== 'passage' || !node.attrs.uuid) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
uuids.add(node.attrs.uuid);
|
|
116
|
+
return false;
|
|
96
117
|
});
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
return uuids;
|
|
119
|
+
}, []);
|
|
120
|
+
const refreshEditorBaseline = useCallback((key) => {
|
|
121
|
+
const editor = editorCache.current[key];
|
|
122
|
+
if (!editor || editor.isDestroyed) {
|
|
99
123
|
return;
|
|
100
124
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// Calling blur()/focus() on a destroyed editor throws a TipTap error
|
|
106
|
-
// about view['hasFocus'] not being accessible.
|
|
107
|
-
if (editor.isDestroyed)
|
|
108
|
-
return;
|
|
109
|
-
// Ensure all nodes have unique, non-null UUIDs before reading them.
|
|
110
|
-
// New paragraph nodes created by splitting (e.g. pressing Enter) have
|
|
111
|
-
// uuid: null until the NodeView mount cycle runs validateAttrs. If we
|
|
112
|
-
// read the document before that cycle completes, annotationExportsFromNode
|
|
113
|
-
// silently drops any annotation whose node.attrs.uuid is falsy, producing
|
|
114
|
-
// missing paragraph annotations. ensureUuids fixes this synchronously.
|
|
115
|
-
ensureUuids(editor);
|
|
116
|
-
editor.commands.blur();
|
|
117
|
-
passages.push(...passagesFromNodes({
|
|
118
|
-
uuids: uuidsToSave,
|
|
119
|
-
workUuid: work.uuid,
|
|
120
|
-
editor,
|
|
121
|
-
}));
|
|
122
|
-
editor.commands.focus();
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
const result = await savePassages({
|
|
126
|
-
client,
|
|
127
|
-
passages,
|
|
128
|
-
deletedUuids: deletedUuids.length > 0 ? deletedUuids : undefined,
|
|
129
|
-
});
|
|
130
|
-
if (!result?.success) {
|
|
131
|
-
console.error('Save failed:', result?.error ?? 'unknown error');
|
|
132
|
-
return;
|
|
125
|
+
savedBaselineUuidsByEditorRef.current[key] = getEditorUuids(editor);
|
|
126
|
+
const fragment = getFragment(key);
|
|
127
|
+
if (fragment) {
|
|
128
|
+
lastObservedUuidsByFragmentRef.current.set(fragment, getFragmentUuids(fragment));
|
|
133
129
|
}
|
|
134
|
-
|
|
135
|
-
// Clear both ref and state
|
|
136
|
-
dirtyUuidsRef.current.clear();
|
|
137
|
-
deletedUuidsRef.current.clear();
|
|
138
|
-
dirtyStore.setDirty(false);
|
|
139
|
-
}, [editorCache, client, work.uuid]);
|
|
130
|
+
}, [getEditorUuids, getFragment, getFragmentUuids]);
|
|
140
131
|
const observerFunction = useCallback((evts, txn) => {
|
|
141
132
|
if (!txn.local) {
|
|
142
133
|
return;
|
|
143
134
|
}
|
|
144
|
-
// Detect passage deletions by diffing
|
|
135
|
+
// Detect passage deletions by diffing the last observed UUIDs against
|
|
136
|
+
// the current fragment state.
|
|
145
137
|
// We walk up from any event target to find the observed XmlFragment rather than
|
|
146
138
|
// checking each event's target, because merge operations may only produce events
|
|
147
139
|
// targeting passage-level XmlElements (not the fragment itself).
|
|
148
140
|
// We intentionally avoid using Yjs `changes.deleted` because operations like
|
|
149
141
|
// splitPassage (replaceWith + insert) cause the binding to delete and re-create
|
|
150
142
|
// XmlElements internally, producing false positives.
|
|
151
|
-
if (!isNavigatingRef.current &&
|
|
143
|
+
if (!isNavigatingRef.current &&
|
|
144
|
+
!isNormalizingForSaveRef.current &&
|
|
145
|
+
evts.length > 0) {
|
|
152
146
|
let fragment = null;
|
|
153
147
|
let current = evts[0].target;
|
|
154
148
|
while (current) {
|
|
@@ -160,38 +154,38 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
160
154
|
current = current.parent;
|
|
161
155
|
}
|
|
162
156
|
if (fragment) {
|
|
163
|
-
const
|
|
157
|
+
const liveUuids = new Set();
|
|
164
158
|
for (let i = 0; i < fragment.length; i++) {
|
|
165
159
|
const child = fragment.get(i);
|
|
166
160
|
if (child instanceof XmlElement && child.nodeName === 'passage') {
|
|
167
161
|
const uuid = child.getAttribute('uuid');
|
|
168
162
|
if (uuid) {
|
|
169
|
-
|
|
163
|
+
liveUuids.add(uuid);
|
|
170
164
|
}
|
|
171
165
|
}
|
|
172
166
|
}
|
|
173
|
-
const
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
// Detect new passages: UUIDs in current but not in known.
|
|
167
|
+
const lastObservedUuidsForFragment = lastObservedUuidsByFragmentRef.current.get(fragment);
|
|
168
|
+
if (lastObservedUuidsForFragment &&
|
|
169
|
+
lastObservedUuidsForFragment.size > 0) {
|
|
170
|
+
const hasDeleted = Array.from(lastObservedUuidsForFragment).some((uuid) => !liveUuids.has(uuid));
|
|
171
|
+
// Detect new passages: UUIDs in the current fragment but not in
|
|
172
|
+
// the last observed fragment state.
|
|
182
173
|
// This catches passages created by splitPassage, where the Yjs
|
|
183
174
|
// binding creates XmlElements with attributes set during construction
|
|
184
175
|
// (pre-integration), so txn.changed never includes them.
|
|
185
|
-
|
|
186
|
-
if (!
|
|
176
|
+
liveUuids.forEach((uuid) => {
|
|
177
|
+
if (!lastObservedUuidsForFragment.has(uuid)) {
|
|
187
178
|
dirtyUuidsRef.current.add(uuid);
|
|
188
179
|
}
|
|
189
180
|
});
|
|
181
|
+
if (hasDeleted && !dirtyStore.isDirty) {
|
|
182
|
+
dirtyStore.setDirty(true);
|
|
183
|
+
}
|
|
190
184
|
}
|
|
191
|
-
|
|
185
|
+
lastObservedUuidsByFragmentRef.current.set(fragment, liveUuids);
|
|
192
186
|
}
|
|
193
187
|
}
|
|
194
|
-
if (!isNavigatingRef.current) {
|
|
188
|
+
if (!isNavigatingRef.current && !isNormalizingForSaveRef.current) {
|
|
195
189
|
txn.changed.forEach((_change, key) => {
|
|
196
190
|
// Start from key itself (not key.parent) so that structural changes
|
|
197
191
|
// directly on a passage XmlElement (e.g. children moved during merge)
|
|
@@ -213,42 +207,42 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
213
207
|
}
|
|
214
208
|
});
|
|
215
209
|
}
|
|
216
|
-
|
|
217
|
-
if (deletedUuidsRef.current.size > 0 && !dirtyStore.isDirty) {
|
|
218
|
-
dirtyStore.setDirty(true);
|
|
219
|
-
}
|
|
220
|
-
}, []);
|
|
210
|
+
}, [dirtyStore, getFragmentUuids]);
|
|
221
211
|
const startObserving = useCallback((builder) => {
|
|
222
212
|
const fragment = getFragment(builder);
|
|
223
213
|
if (fragment) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const uuids = new Set();
|
|
229
|
-
for (let i = 0; i < fragment.length; i++) {
|
|
230
|
-
const child = fragment.get(i);
|
|
231
|
-
if (child instanceof XmlElement && child.nodeName === 'passage') {
|
|
232
|
-
const uuid = child.getAttribute('uuid');
|
|
233
|
-
if (uuid) {
|
|
234
|
-
uuids.add(uuid);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
214
|
+
const observedFragment = observedFragmentsByBuilderRef.current[builder];
|
|
215
|
+
if (observedFragment === fragment) {
|
|
216
|
+
refreshEditorBaseline(builder);
|
|
217
|
+
return;
|
|
237
218
|
}
|
|
238
|
-
|
|
219
|
+
if (observedFragment) {
|
|
220
|
+
observedFragment.unobserveDeep(observerFunction);
|
|
221
|
+
lastObservedUuidsByFragmentRef.current.delete(observedFragment);
|
|
222
|
+
}
|
|
223
|
+
// Pre-populate lastObservedUuidsByFragmentRef so the diff-based
|
|
224
|
+
// deletion detection has a baseline from the very first observer event.
|
|
225
|
+
// Without this, a merge that happens before any other edit would not be
|
|
226
|
+
// detected because the ref would be empty and the diff would be skipped.
|
|
227
|
+
lastObservedUuidsByFragmentRef.current.set(fragment, getFragmentUuids(fragment));
|
|
239
228
|
fragment.observeDeep(observerFunction);
|
|
229
|
+
observedFragmentsByBuilderRef.current[builder] = fragment;
|
|
230
|
+
refreshEditorBaseline(builder);
|
|
240
231
|
}
|
|
241
|
-
}, [getFragment, observerFunction]);
|
|
232
|
+
}, [getFragment, getFragmentUuids, observerFunction, refreshEditorBaseline]);
|
|
242
233
|
const stopObserving = useCallback((builder) => {
|
|
243
|
-
const
|
|
244
|
-
if (
|
|
245
|
-
|
|
234
|
+
const observedFragment = observedFragmentsByBuilderRef.current[builder];
|
|
235
|
+
if (observedFragment) {
|
|
236
|
+
observedFragment.unobserveDeep(observerFunction);
|
|
237
|
+
lastObservedUuidsByFragmentRef.current.delete(observedFragment);
|
|
238
|
+
delete observedFragmentsByBuilderRef.current[builder];
|
|
246
239
|
}
|
|
247
|
-
|
|
248
|
-
|
|
240
|
+
delete savedBaselineUuidsByEditorRef.current[builder];
|
|
241
|
+
}, [observerFunction]);
|
|
242
|
+
const setNavigating = useCallback((navigating, resetLastObservedUuids = false, fragment) => {
|
|
249
243
|
isNavigatingRef.current = navigating;
|
|
250
|
-
if (navigating &&
|
|
251
|
-
// Clear
|
|
244
|
+
if (navigating && resetLastObservedUuids) {
|
|
245
|
+
// Clear last observed UUIDs so the first observer call after navigation
|
|
252
246
|
// repopulates without diffing against the stale pre-navigation set.
|
|
253
247
|
// Only done for full navigation (clearContent + setContent), not for
|
|
254
248
|
// load-more which only adds passages and needs to keep its baseline.
|
|
@@ -256,11 +250,11 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
256
250
|
// entry so other editors (e.g. endnotes) retain their baseline and
|
|
257
251
|
// can still detect deletions.
|
|
258
252
|
if (fragment) {
|
|
259
|
-
|
|
253
|
+
lastObservedUuidsByFragmentRef.current.delete(fragment);
|
|
260
254
|
clearedFragmentRef.current = fragment;
|
|
261
255
|
}
|
|
262
256
|
else {
|
|
263
|
-
|
|
257
|
+
lastObservedUuidsByFragmentRef.current.clear();
|
|
264
258
|
}
|
|
265
259
|
}
|
|
266
260
|
// When navigation ends, repopulate the baseline for any fragment that
|
|
@@ -269,18 +263,9 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
269
263
|
if (!navigating && clearedFragmentRef.current) {
|
|
270
264
|
const f = clearedFragmentRef.current;
|
|
271
265
|
clearedFragmentRef.current = null;
|
|
272
|
-
|
|
273
|
-
for (let i = 0; i < f.length; i++) {
|
|
274
|
-
const child = f.get(i);
|
|
275
|
-
if (child instanceof XmlElement && child.nodeName === 'passage') {
|
|
276
|
-
const uuid = child.getAttribute('uuid');
|
|
277
|
-
if (uuid)
|
|
278
|
-
uuids.add(uuid);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
knownUuidsRef.current.set(f, uuids);
|
|
266
|
+
lastObservedUuidsByFragmentRef.current.set(f, getFragmentUuids(f));
|
|
282
267
|
}
|
|
283
|
-
}, []);
|
|
268
|
+
}, [getFragmentUuids]);
|
|
284
269
|
const isNavigating = useCallback(() => isNavigatingRef.current, []);
|
|
285
270
|
const canEdit = useCallback(async () => {
|
|
286
271
|
return await hasPermission({ client, permission: 'EDITOR_EDIT' });
|
|
@@ -329,7 +314,90 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
329
314
|
setNavigating(false);
|
|
330
315
|
}
|
|
331
316
|
}, [setNavigating]);
|
|
332
|
-
|
|
317
|
+
const save = useCallback(async () => {
|
|
318
|
+
const editorEntries = Object.entries(editorCache.current).filter(([, editor]) => !editor.isDestroyed);
|
|
319
|
+
if (!editorEntries.length) {
|
|
320
|
+
console.warn('No editor instance found, cannot save.');
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const liveUuidsByEditor = {};
|
|
324
|
+
editorEntries.forEach(([key, editor]) => {
|
|
325
|
+
liveUuidsByEditor[key] = getEditorUuids(editor);
|
|
326
|
+
});
|
|
327
|
+
const savedBaselineUuidsByEditor = Object.fromEntries(Object.keys(liveUuidsByEditor)
|
|
328
|
+
.map((key) => [key, savedBaselineUuidsByEditorRef.current[key]])
|
|
329
|
+
.filter((entry) => Boolean(entry[1])));
|
|
330
|
+
const { uuidsToSave, uuidsToDelete: deletedUuids, hasChanges, } = computeSavePayload({
|
|
331
|
+
dirtyUuids: dirtyUuidsRef.current,
|
|
332
|
+
baseline: savedBaselineUuidsByEditor,
|
|
333
|
+
current: liveUuidsByEditor,
|
|
334
|
+
});
|
|
335
|
+
if (!hasChanges) {
|
|
336
|
+
console.log('No changes to save.');
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const passages = [];
|
|
340
|
+
if (uuidsToSave.length) {
|
|
341
|
+
const uuidsToSaveSet = new Set(uuidsToSave);
|
|
342
|
+
isNormalizingForSaveRef.current = true;
|
|
343
|
+
try {
|
|
344
|
+
editorEntries.forEach(([, editor]) => {
|
|
345
|
+
const editorUuids = Array.from(getEditorUuids(editor)).filter((uuid) => uuidsToSaveSet.has(uuid));
|
|
346
|
+
if (editorUuids.length === 0) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
ensureUuids(editor, { passageUuids: new Set(editorUuids) });
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
finally {
|
|
353
|
+
isNormalizingForSaveRef.current = false;
|
|
354
|
+
}
|
|
355
|
+
editorEntries.forEach(([, editor]) => {
|
|
356
|
+
const editorUuids = Array.from(getEditorUuids(editor)).filter((uuid) => uuidsToSaveSet.has(uuid));
|
|
357
|
+
if (editorUuids.length === 0) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
editor.commands.blur();
|
|
361
|
+
passages.push(...passagesFromNodes({
|
|
362
|
+
uuids: editorUuids,
|
|
363
|
+
workUuid: work.uuid,
|
|
364
|
+
editor,
|
|
365
|
+
}));
|
|
366
|
+
editor.commands.focus();
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
const result = await savePassages({
|
|
370
|
+
client,
|
|
371
|
+
passages,
|
|
372
|
+
deletedUuids: deletedUuids.length > 0 ? deletedUuids : undefined,
|
|
373
|
+
});
|
|
374
|
+
if (!result?.success) {
|
|
375
|
+
console.error('Save failed:', result?.error ?? 'unknown error');
|
|
376
|
+
toast('Error saving content.', {
|
|
377
|
+
icon: _jsx(CircleAlertIcon, { className: "size-4 text-error" }),
|
|
378
|
+
});
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
console.log('Document state saved.');
|
|
382
|
+
toast('Content saved', {
|
|
383
|
+
icon: _jsx(CircleCheckIcon, { className: "size-4 text-success" }),
|
|
384
|
+
});
|
|
385
|
+
if (result.passages?.length) {
|
|
386
|
+
await applyReplacedPassages(result.passages);
|
|
387
|
+
}
|
|
388
|
+
// Clear both ref and state
|
|
389
|
+
dirtyUuidsRef.current.clear();
|
|
390
|
+
editorEntries.forEach(([key]) => refreshEditorBaseline(key));
|
|
391
|
+
dirtyStore.setDirty(false);
|
|
392
|
+
}, [
|
|
393
|
+
client,
|
|
394
|
+
work.uuid,
|
|
395
|
+
getEditorUuids,
|
|
396
|
+
applyReplacedPassages,
|
|
397
|
+
refreshEditorBaseline,
|
|
398
|
+
dirtyStore,
|
|
399
|
+
]);
|
|
400
|
+
return (_jsxs(EditorContext.Provider, { value: {
|
|
333
401
|
work,
|
|
334
402
|
doc,
|
|
335
403
|
dirtyStore,
|
|
@@ -339,12 +407,13 @@ export const EditorContextProvider = ({ work, doc: initialDoc, children, }) => {
|
|
|
339
407
|
setDoc,
|
|
340
408
|
getEditor,
|
|
341
409
|
setEditor,
|
|
410
|
+
refreshEditorBaseline,
|
|
342
411
|
save,
|
|
343
412
|
startObserving,
|
|
344
413
|
stopObserving,
|
|
345
414
|
setNavigating,
|
|
346
415
|
isNavigating,
|
|
347
|
-
}, children: _jsx(NavigationProvider, { uuid: work.uuid, children: children }) }));
|
|
416
|
+
}, children: [_jsx(NavigationProvider, { uuid: work.uuid, children: children }), _jsx(Toaster, {})] }));
|
|
348
417
|
};
|
|
349
418
|
export const useEditorState = () => useContext(EditorContext);
|
|
350
419
|
//# sourceMappingURL=EditorProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorProvider.js","sourceRoot":"","sources":["../../../../../../libs/lib-editing/src/lib/components/editor/EditorProvider.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditorProvider.js","sourceRoot":"","sources":["../../../../../../libs/lib-editing/src/lib/components/editor/EditorProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,GAAG,EAAe,UAAU,EAAE,WAAW,EAAU,MAAM,KAAK,CAAC;AAExE,OAAO,EACL,mBAAmB,EACnB,aAAa,EAEb,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAmB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAA0B,MAAM,eAAe,CAAC;AAwB3E,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAqB;IAC7D,IAAI,EAAE;QACJ,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,CAAC;QACR,eAAe,EAAE,IAAI,IAAI,EAAE;QAC3B,kBAAkB,EAAE,OAAO;QAC3B,WAAW,EAAE,KAAK;QAClB,GAAG,EAAE,EAAE;KACR;IACD,UAAU,EAAE;QACV,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE;YACpB,+DAA+D;QACjE,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,4CAA4C;QAC9C,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;KACzB;IACD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;IAC1B,qBAAqB,EAAE,KAAK,IAAI,EAAE;QAChC,8BAA8B;IAChC,CAAC;IACD,WAAW,EAAE,GAAG,EAAE;QAChB,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,EAAE,GAAG,EAAE;QACX,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;IAC1B,SAAS,EAAE,GAAG,EAAE;QACd,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,qBAAqB,EAAE,GAAG,EAAE;QAC1B,8BAA8B;IAChC,CAAC;IACD,IAAI,EAAE,KAAK,IAAI,EAAE;QACf,KAAK,CAAC,iBAAiB,EAAE;YACvB,IAAI,EAAE,KAAC,iBAAiB,IAAC,SAAS,EAAC,qBAAqB,GAAG;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,cAAc,EAAE,GAAG,EAAE;QACnB,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QAClB,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QAClB,8BAA8B;IAChC,CAAC;IACD,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;CAC1B,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,IAAI,EACJ,GAAG,EAAE,UAAU,EACf,QAAQ,GACW,EAAE,EAAE;IACvB,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IAErC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAM,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACnE,2EAA2E;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC5D,MAAM,8BAA8B,GAAG,MAAM,CAC3C,IAAI,GAAG,EAAE,CACV,CAAC;IACF,MAAM,6BAA6B,GAAG,MAAM,CAAoB,EAAE,CAAC,CAAC;IACpE,MAAM,6BAA6B,GAAG,MAAM,CAA8B,EAAE,CAAC,CAAC;IAE9E,kDAAkD;IAClD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,MAAM,WAAW,GAAG,MAAM,CAA4B,EAAE,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC5C,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,MAAe,EAAE,EAAE;QAC7D,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,6BAA6B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,OAAe,EAAe,EAAE;QAC/B,OAAO,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,QAAqB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAChE,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,GAAW,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,6BAA6B,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpE,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,8BAA8B,CAAC,OAAO,CAAC,GAAG,CACxC,QAAQ,EACR,gBAAgB,CAAC,QAAQ,CAAC,CAC3B,CAAC;QACJ,CAAC;IACH,CAAC,EACD,CAAC,cAAc,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAChD,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAwC,EAAE,GAAgB,EAAE,EAAE;QAC7D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,8BAA8B;QAC9B,gFAAgF;QAChF,iFAAiF;QACjF,iEAAiE;QACjE,6EAA6E;QAC7E,gFAAgF;QAChF,qDAAqD;QACrD,IACE,CAAC,eAAe,CAAC,OAAO;YACxB,CAAC,uBAAuB,CAAC,OAAO;YAChC,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,CAAC;YACD,IAAI,QAAQ,GAAuB,IAAI,CAAC;YACxC,IAAI,OAAO,GAAoC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9D,OAAO,OAAO,EAAE,CAAC;gBACf,IACE,OAAO,YAAY,WAAW;oBAC9B,CAAC,CAAC,OAAO,YAAY,UAAU,CAAC,EAChC,CAAC;oBACD,QAAQ,GAAG,OAAO,CAAC;oBACnB,MAAM;gBACR,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,MAAyC,CAAC;YAC9D,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAChE,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBACxC,IAAI,IAAI,EAAE,CAAC;4BACT,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,MAAM,4BAA4B,GAChC,8BAA8B,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvD,IACE,4BAA4B;oBAC5B,4BAA4B,CAAC,IAAI,GAAG,CAAC,EACrC,CAAC;oBACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAC/B,CAAC;oBAEF,gEAAgE;oBAChE,oCAAoC;oBACpC,+DAA+D;oBAC/D,sEAAsE;oBACtE,yDAAyD;oBACzD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;wBACzB,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC5C,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACtC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAED,8BAA8B,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;YACjE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACnC,oEAAoE;gBACpE,sEAAsE;gBACtE,sEAAsE;gBACtE,gDAAgD;gBAChD,IAAI,IAAI,GAAG,GAA4B,CAAC;gBACxC,OAAO,IAAI,EAAE,QAAQ,KAAK,SAAS,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACpD,IAAI,GAAG,IAAI,CAAC,MAAoB,CAAC;gBACnC,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,IAAI,EAAE,CAAC;oBACT,2DAA2D;oBAC3D,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,oDAAoD;oBACpD,kEAAkE;oBAClE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EACD,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAC/B,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAe,EAAE,EAAE;QAClB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,gBAAgB,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBACjD,8BAA8B,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAClE,CAAC;YAED,gEAAgE;YAChE,wEAAwE;YACxE,wEAAwE;YACxE,yEAAyE;YACzE,8BAA8B,CAAC,OAAO,CAAC,GAAG,CACxC,QAAQ,EACR,gBAAgB,CAAC,QAAQ,CAAC,CAC3B,CAAC;YAEF,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACvC,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;YAC1D,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CACzE,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,OAAe,EAAE,EAAE;QAClB,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,gBAAgB,EAAE,CAAC;YACrB,gBAAgB,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACjD,8BAA8B,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAChE,OAAO,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CACE,UAAmB,EACnB,sBAAsB,GAAG,KAAK,EAC9B,QAAsB,EACtB,EAAE;QACF,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC;QACrC,IAAI,UAAU,IAAI,sBAAsB,EAAE,CAAC;YACzC,wEAAwE;YACxE,oEAAoE;YACpE,qEAAqE;YACrE,qEAAqE;YACrE,mEAAmE;YACnE,mEAAmE;YACnE,8BAA8B;YAC9B,IAAI,QAAQ,EAAE,CAAC;gBACb,8BAA8B,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxD,kBAAkB,CAAC,OAAO,GAAG,QAAQ,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,8BAA8B,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,wEAAwE;QACxE,8DAA8D;QAC9D,IAAI,CAAC,UAAU,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC;YACrC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,8BAA8B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,OAAO,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,qBAAqB,GAAG,WAAW,CACvC,KAAK,EAAE,QAA2B,EAAE,EAAE;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,QAAQ;iBACL,MAAM,CACL,CACE,OAAO,EAGP,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAC3B;iBACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAC7C,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpD,IAAI,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpD,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAIb,EAAE,CAAC;gBAER,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBACzC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;wBACrD,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACxD,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;wBACtB,YAAY,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,GAAG;4BACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE,WAAW,CAAC,IAAI;yBAC9B,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBAED,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,YAAY;qBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;qBAC/B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;oBAC3C,EAAE,GAAG,EAAE,CAAC,WAAW,CACjB,IAAI,EACJ,IAAI,GAAG,QAAQ,EACf,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CACxC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEL,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAC9D,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CACpC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,GAAsB,EAAE,CAAC;QAChD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;YACtC,iBAAiB,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,MAAM,0BAA0B,GAAG,MAAM,CAAC,WAAW,CACnD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;aAC3B,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,6BAA6B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAU,CACpE;aACA,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CACzD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAClB,CACiB,CAAC;QAEvB,MAAM,EACJ,WAAW,EACX,aAAa,EAAE,YAAY,EAC3B,UAAU,GACX,GAAG,kBAAkB,CAAC;YACrB,UAAU,EAAE,aAAa,CAAC,OAAO;YACjC,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YAC5C,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;oBACnC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAC3D,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CACnC,CAAC;oBACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7B,OAAO;oBACT,CAAC;oBAED,WAAW,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,uBAAuB,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1C,CAAC;YAED,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;gBACnC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CACzB,CAAC;gBACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CACX,GAAG,iBAAiB,CAAC;oBACnB,KAAK,EAAE,WAAW;oBAClB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,MAAM;iBACP,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,MAAM;YACN,QAAQ;YACR,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,eAAe,CAAC,CAAC;YAChE,KAAK,CAAC,uBAAuB,EAAE;gBAC7B,IAAI,EAAE,KAAC,eAAe,IAAC,SAAS,EAAC,mBAAmB,GAAG;aACxD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,KAAK,CAAC,eAAe,EAAE;YACrB,IAAI,EAAE,KAAC,eAAe,IAAC,SAAS,EAAC,qBAAqB,GAAG;SAC1D,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC5B,MAAM,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,2BAA2B;QAC3B,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9B,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,EAAE;QACD,MAAM;QACN,IAAI,CAAC,IAAI;QACT,cAAc;QACd,qBAAqB;QACrB,qBAAqB;QACrB,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,aAAa,CAAC,QAAQ,IACrB,KAAK,EAAE;YACL,IAAI;YACJ,GAAG;YACH,UAAU;YACV,OAAO;YACP,qBAAqB;YACrB,WAAW;YACX,MAAM;YACN,SAAS;YACT,SAAS;YACT,qBAAqB;YACrB,IAAI;YACJ,cAAc;YACd,aAAa;YACb,aAAa;YACb,YAAY;SACb,aAED,KAAC,kBAAkB,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,QAAQ,GAAsB,EACpE,KAAC,OAAO,KAAG,IACY,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -4,9 +4,9 @@ import { createContext, useContext, useRef, useState, useEffect, useMemo, } from
|
|
|
4
4
|
import { useBlockEditor, useTranslationExtensions } from './hooks';
|
|
5
5
|
import { createGraphQLClient, getTranslationBlocks, getTranslationBlocksAround, } from '@eightyfourthousand/client-graphql';
|
|
6
6
|
import { PassageSkeleton } from '../shared/PassageSkeleton';
|
|
7
|
-
import { isUuid, scrollToElement, useIsMobile } from '@eightyfourthousand/lib-utils';
|
|
7
|
+
import { isUuid, scrollToElement, useIsMobile, } from '@eightyfourthousand/lib-utils';
|
|
8
8
|
import { useNavigation } from '../shared';
|
|
9
|
-
import { LotusPond, SHEET_ANIMATION_DURATION } from '@eightyfourthousand/design-system';
|
|
9
|
+
import { LotusPond, SHEET_ANIMATION_DURATION, } from '@eightyfourthousand/design-system';
|
|
10
10
|
import { useEditorState } from './EditorProvider';
|
|
11
11
|
import { usePaginationLoadTriggers } from '../shared/hooks/usePaginationLoadTriggers';
|
|
12
12
|
const LOADING_SKELETONS_COUNT = 3;
|
|
@@ -36,7 +36,7 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
36
36
|
const initialEndCursor = Array.isArray(content)
|
|
37
37
|
? content.at(-1)?.attrs?.uuid
|
|
38
38
|
: content?.attrs?.uuid;
|
|
39
|
-
const { setNavigating } = useEditorState();
|
|
39
|
+
const { refreshEditorBaseline, setNavigating } = useEditorState();
|
|
40
40
|
const [startCursor, setStartCursor] = useState();
|
|
41
41
|
const [endCursor, setEndCursor] = useState(initialEndCursor || undefined);
|
|
42
42
|
const [navCursor, setNavCursor] = useState();
|
|
@@ -56,7 +56,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
56
56
|
// When a `tab` is specified, only accept the hash when the panel's active tab
|
|
57
57
|
// matches — this prevents a PaginationProvider for one tab (e.g. endnotes)
|
|
58
58
|
// from reacting to hashes set by a different tab (e.g. glossary).
|
|
59
|
-
const panelHash = !tab ||
|
|
59
|
+
const panelHash = !tab ||
|
|
60
|
+
panels[panel]?.tab === tab ||
|
|
61
|
+
(tab === 'translation' && panels[panel]?.tab === 'compare')
|
|
60
62
|
? panels[panel]?.hash
|
|
61
63
|
: undefined;
|
|
62
64
|
const { extensions } = useTranslationExtensions({
|
|
@@ -135,6 +137,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
135
137
|
});
|
|
136
138
|
setStartCursor(hasMoreBefore && prevCursor ? prevCursor : undefined);
|
|
137
139
|
setEndCursor(hasMoreAfter && nextCursor ? nextCursor : undefined);
|
|
140
|
+
if (tab) {
|
|
141
|
+
refreshEditorBaseline(tab);
|
|
142
|
+
}
|
|
138
143
|
// Wait for React to re-render and update the DOM (remove/add skeletons)
|
|
139
144
|
// by waiting until the element's position stabilizes
|
|
140
145
|
await new Promise((resolve) => {
|
|
@@ -195,6 +200,10 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
195
200
|
dataClient,
|
|
196
201
|
updatePanel,
|
|
197
202
|
isMobile,
|
|
203
|
+
refreshEditorBaseline,
|
|
204
|
+
setNavigating,
|
|
205
|
+
tab,
|
|
206
|
+
fragment,
|
|
198
207
|
]);
|
|
199
208
|
useEffect(() => {
|
|
200
209
|
return () => {
|
|
@@ -223,6 +232,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
223
232
|
setNavigating(true);
|
|
224
233
|
await insertContentChunked(editor, pos, blocks);
|
|
225
234
|
setNavigating(false);
|
|
235
|
+
if (tab) {
|
|
236
|
+
refreshEditorBaseline(tab);
|
|
237
|
+
}
|
|
226
238
|
}
|
|
227
239
|
setEndCursor(hasMore && nextCursor ? nextCursor : undefined);
|
|
228
240
|
setEndIsLoading(false);
|
|
@@ -235,6 +247,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
235
247
|
endCursor,
|
|
236
248
|
dataClient,
|
|
237
249
|
endLoadRequest,
|
|
250
|
+
refreshEditorBaseline,
|
|
251
|
+
setNavigating,
|
|
252
|
+
tab,
|
|
238
253
|
]);
|
|
239
254
|
useEffect(() => {
|
|
240
255
|
if (startLoadRequest === 0 ||
|
|
@@ -265,6 +280,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
265
280
|
setNavigating(true);
|
|
266
281
|
editor.commands.insertContentAt(pos, blocks);
|
|
267
282
|
setNavigating(false);
|
|
283
|
+
if (tab) {
|
|
284
|
+
refreshEditorBaseline(tab);
|
|
285
|
+
}
|
|
268
286
|
requestAnimationFrame(() => {
|
|
269
287
|
const newScrollHeight = scrollContainer?.scrollHeight || 0;
|
|
270
288
|
const deltaHeight = newScrollHeight - previousScrollHeight;
|
|
@@ -278,6 +296,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
278
296
|
setNavigating(true);
|
|
279
297
|
editor.commands.insertContentAt(pos, blocks);
|
|
280
298
|
setNavigating(false);
|
|
299
|
+
if (tab) {
|
|
300
|
+
refreshEditorBaseline(tab);
|
|
301
|
+
}
|
|
281
302
|
}
|
|
282
303
|
setStartCursor(hasMoreBefore && prevCursor ? prevCursor : undefined);
|
|
283
304
|
setStartIsLoading(false);
|
|
@@ -290,6 +311,9 @@ export const PaginationProvider = ({ uuid, filter, panel, tab, content, fragment
|
|
|
290
311
|
startCursor,
|
|
291
312
|
dataClient,
|
|
292
313
|
startLoadRequest,
|
|
314
|
+
refreshEditorBaseline,
|
|
315
|
+
setNavigating,
|
|
316
|
+
tab,
|
|
293
317
|
]);
|
|
294
318
|
return (_jsxs(PaginationContext.Provider, { value: {
|
|
295
319
|
startCursor,
|