fix(document-detail): force edit panel on notification deep-link
Comments only render inside TranscriptionEditView, so a deep-link into a document with existing reviewed transcriptions landed the user in read mode with no comment element in the DOM — the scroll target silently missed. scrollToCommentFromQuery now takes a setPanelMode callback and calls it with 'edit' whenever both query params are present. The page's own transcribe-mode $effect checks a skipInitialPanelMode flag the deep-link flow sets, so its default-panel-mode logic doesn't race against the explicit override. Two new helper tests pin the contract: panel mode is forced to 'edit' both when transcribe mode is off (entering fresh) and when it is already on (same-page notification click). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,10 @@ let activeAnnotationId = $state<string | null>(null);
|
||||
let highlightBlockId = $state<string | null>(null);
|
||||
let flashAnnotationId = $state<string | null>(null);
|
||||
let pdfStripExpanded = $state(false);
|
||||
// Flag set by the deep-link helper so the transcribe-mode $effect does not
|
||||
// overwrite the panelMode it picked (e.g. forcing 'edit' on notification
|
||||
// click-through). One-shot: consumed after the effect's loadBlocks resolves.
|
||||
let skipInitialPanelMode = $state(false);
|
||||
|
||||
const prefersReducedMotion = $derived(
|
||||
typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches
|
||||
@@ -281,7 +285,11 @@ async function checkOcrStatus() {
|
||||
$effect(() => {
|
||||
if (transcribeMode) {
|
||||
loadTranscriptionBlocks().then(() => {
|
||||
panelMode = transcriptionBlocks.length > 0 ? 'read' : 'edit';
|
||||
if (skipInitialPanelMode) {
|
||||
skipInitialPanelMode = false;
|
||||
} else {
|
||||
panelMode = transcriptionBlocks.length > 0 ? 'read' : 'edit';
|
||||
}
|
||||
});
|
||||
checkOcrStatus();
|
||||
}
|
||||
@@ -309,6 +317,10 @@ onMount(() => {
|
||||
scrollToCommentFromQuery(new URL(page.url), {
|
||||
transcribeMode,
|
||||
setTranscribeMode: (v) => (transcribeMode = v),
|
||||
setPanelMode: (m) => {
|
||||
skipInitialPanelMode = true;
|
||||
panelMode = m;
|
||||
},
|
||||
loadBlocks: loadTranscriptionBlocks,
|
||||
setActiveAnnotationId: (id) => (activeAnnotationId = id),
|
||||
flashAnnotation: (annotationId) => {
|
||||
|
||||
Reference in New Issue
Block a user