refactor: extract editor dnd helpers
This commit is contained in:
@@ -2122,28 +2122,40 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str {
|
||||
await persistSession(session);
|
||||
};
|
||||
|
||||
const runSessionConflictAction = (action, onError) => {
|
||||
const runtime = window.__mnoteDocumentConflictPanelRuntime;
|
||||
if (runtime && typeof runtime.runSessionConflictAction === 'function') {
|
||||
runtime.runSessionConflictAction(action, { onError });
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const result = action();
|
||||
if (result && typeof result.then === 'function') result.catch(onError);
|
||||
} catch (error) {
|
||||
onError(error);
|
||||
}
|
||||
};
|
||||
|
||||
const renderSessionConflictSurface = (session, message) => {
|
||||
clearSessionConflictSurface(session);
|
||||
sessionViews(session).forEach((view) => {
|
||||
const host = view.runtimeDescriptor.root.closest('.document-pane') || view.runtimeDescriptor.root;
|
||||
if (!(host instanceof HTMLElement)) return;
|
||||
const runtime = window.__mnoteDocumentConflictPanelRuntime;
|
||||
const handleConflictActionError = (error) => {
|
||||
setSessionStatus(session, 'external-change-conflict', error instanceof Error ? error.message : String(error));
|
||||
renderSessionConflictSurface(session, error instanceof Error ? error.message : String(error));
|
||||
};
|
||||
let panel = null;
|
||||
if (runtime && typeof runtime.createSessionConflictPanel === 'function') {
|
||||
panel = runtime.createSessionConflictPanel(session, message, {
|
||||
externalConflictMessage,
|
||||
conflictSourceLabel,
|
||||
onAcceptDisk: () => {
|
||||
acceptDiskVersion(session).catch((error) => {
|
||||
setSessionStatus(session, 'external-change-conflict', error instanceof Error ? error.message : String(error));
|
||||
renderSessionConflictSurface(session, error instanceof Error ? error.message : String(error));
|
||||
});
|
||||
runSessionConflictAction(() => acceptDiskVersion(session), handleConflictActionError);
|
||||
},
|
||||
onKeepCurrent: () => {
|
||||
keepCurrentEditorVersion(session).catch((error) => {
|
||||
setSessionStatus(session, 'external-change-conflict', error instanceof Error ? error.message : String(error));
|
||||
renderSessionConflictSurface(session, error instanceof Error ? error.message : String(error));
|
||||
});
|
||||
runSessionConflictAction(() => keepCurrentEditorVersion(session), handleConflictActionError);
|
||||
},
|
||||
onOpenDiff: (_session, createdPanel) => {
|
||||
openConflictDiffPanel(session, createdPanel);
|
||||
@@ -2189,16 +2201,10 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str {
|
||||
panel.append(heading, text, meta, actions, diffPanel);
|
||||
|
||||
acceptDisk.addEventListener('click', () => {
|
||||
acceptDiskVersion(session).catch((error) => {
|
||||
setSessionStatus(session, 'external-change-conflict', error instanceof Error ? error.message : String(error));
|
||||
renderSessionConflictSurface(session, error instanceof Error ? error.message : String(error));
|
||||
});
|
||||
runSessionConflictAction(() => acceptDiskVersion(session), handleConflictActionError);
|
||||
});
|
||||
keepCurrent.addEventListener('click', () => {
|
||||
keepCurrentEditorVersion(session).catch((error) => {
|
||||
setSessionStatus(session, 'external-change-conflict', error instanceof Error ? error.message : String(error));
|
||||
renderSessionConflictSurface(session, error instanceof Error ? error.message : String(error));
|
||||
});
|
||||
runSessionConflictAction(() => keepCurrentEditorVersion(session), handleConflictActionError);
|
||||
});
|
||||
openDiff.addEventListener('click', () => {
|
||||
openConflictDiffPanel(session, panel);
|
||||
@@ -5659,6 +5665,9 @@ mod tests {
|
||||
assert!(DOCUMENT_CONFLICT_PANEL_RUNTIME_JS.contains("onUseCurrent"));
|
||||
assert!(DOCUMENT_CONFLICT_PANEL_RUNTIME_JS.contains("onUseDisk"));
|
||||
assert!(DOCUMENT_CONFLICT_PANEL_RUNTIME_JS.contains("onSaveMerge"));
|
||||
assert!(DOCUMENT_CONFLICT_PANEL_RUNTIME_JS.contains("function runSessionConflictAction"));
|
||||
assert!(DOCUMENT_CONFLICT_PANEL_RUNTIME_JS
|
||||
.contains("runSessionConflictAction: runSessionConflictAction"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
||||
Reference in New Issue
Block a user