feat(admin): add OCR entry to EntityNav sidebar and flyout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -299,6 +299,7 @@
|
|||||||
"history_field_receivers": "Empfänger",
|
"history_field_receivers": "Empfänger",
|
||||||
"history_field_tags": "Schlagworte",
|
"history_field_tags": "Schlagworte",
|
||||||
"admin_tab_system": "System",
|
"admin_tab_system": "System",
|
||||||
|
"admin_tab_ocr": "OCR",
|
||||||
"admin_system_backfill_heading": "Verlaufsdaten auffüllen",
|
"admin_system_backfill_heading": "Verlaufsdaten auffüllen",
|
||||||
"admin_system_backfill_description": "Erstellt einen initialen Verlaufseintrag für alle Dokumente, die noch keinen Verlauf haben (z.B. importierte Dokumente). Dadurch werden beim nächsten Bearbeiten nur die tatsächlich geänderten Felder hervorgehoben.",
|
"admin_system_backfill_description": "Erstellt einen initialen Verlaufseintrag für alle Dokumente, die noch keinen Verlauf haben (z.B. importierte Dokumente). Dadurch werden beim nächsten Bearbeiten nur die tatsächlich geänderten Felder hervorgehoben.",
|
||||||
"admin_system_backfill_btn": "Jetzt auffüllen",
|
"admin_system_backfill_btn": "Jetzt auffüllen",
|
||||||
|
|||||||
@@ -299,6 +299,7 @@
|
|||||||
"history_field_receivers": "Receivers",
|
"history_field_receivers": "Receivers",
|
||||||
"history_field_tags": "Tags",
|
"history_field_tags": "Tags",
|
||||||
"admin_tab_system": "System",
|
"admin_tab_system": "System",
|
||||||
|
"admin_tab_ocr": "OCR",
|
||||||
"admin_system_backfill_heading": "Backfill history data",
|
"admin_system_backfill_heading": "Backfill history data",
|
||||||
"admin_system_backfill_description": "Creates an initial history entry for all documents that do not have one yet (e.g. imported documents). This ensures that future edits only highlight actually changed fields.",
|
"admin_system_backfill_description": "Creates an initial history entry for all documents that do not have one yet (e.g. imported documents). This ensures that future edits only highlight actually changed fields.",
|
||||||
"admin_system_backfill_btn": "Backfill now",
|
"admin_system_backfill_btn": "Backfill now",
|
||||||
|
|||||||
@@ -299,6 +299,7 @@
|
|||||||
"history_field_receivers": "Destinatarios",
|
"history_field_receivers": "Destinatarios",
|
||||||
"history_field_tags": "Etiquetas",
|
"history_field_tags": "Etiquetas",
|
||||||
"admin_tab_system": "Sistema",
|
"admin_tab_system": "Sistema",
|
||||||
|
"admin_tab_ocr": "OCR",
|
||||||
"admin_system_backfill_heading": "Completar datos de historial",
|
"admin_system_backfill_heading": "Completar datos de historial",
|
||||||
"admin_system_backfill_description": "Crea una entrada de historial inicial para todos los documentos que aún no tienen ninguna (p.ej. documentos importados). Así, en la próxima edición solo se resaltarán los campos realmente modificados.",
|
"admin_system_backfill_description": "Crea una entrada de historial inicial para todos los documentos que aún no tienen ninguna (p.ej. documentos importados). Así, en la próxima edición solo se resaltarán los campos realmente modificados.",
|
||||||
"admin_system_backfill_btn": "Completar ahora",
|
"admin_system_backfill_btn": "Completar ahora",
|
||||||
|
|||||||
@@ -122,6 +122,23 @@ function handleKeydown(event: KeyboardEvent) {
|
|||||||
</svg>
|
</svg>
|
||||||
{/snippet}
|
{/snippet}
|
||||||
|
|
||||||
|
{#snippet ocrIcon()}
|
||||||
|
<svg
|
||||||
|
class="h-5 w-5 flex-shrink-0 {isActive('ocr') ? 'text-brand-mint' : 'text-white/40'}"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="1.5"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
{/snippet}
|
||||||
|
|
||||||
<svelte:document onkeydown={handleKeydown} />
|
<svelte:document onkeydown={handleKeydown} />
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
@@ -188,6 +205,17 @@ function handleKeydown(event: KeyboardEvent) {
|
|||||||
icon={systemIcon}
|
icon={systemIcon}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
{#if canRunMaintenance}
|
||||||
|
<EntityNavSection
|
||||||
|
variant="sidebar"
|
||||||
|
href="/admin/ocr"
|
||||||
|
label={m.admin_tab_ocr()}
|
||||||
|
isActive={isActive('ocr')}
|
||||||
|
onTabletTrigger={openFlyout}
|
||||||
|
icon={ocrIcon}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{#if flyoutOpen}
|
{#if flyoutOpen}
|
||||||
@@ -261,5 +289,16 @@ function handleKeydown(event: KeyboardEvent) {
|
|||||||
icon={systemIcon}
|
icon={systemIcon}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
{#if canRunMaintenance}
|
||||||
|
<EntityNavSection
|
||||||
|
variant="flyout"
|
||||||
|
href="/admin/ocr"
|
||||||
|
label={m.admin_tab_ocr()}
|
||||||
|
isActive={isActive('ocr')}
|
||||||
|
onFlyoutClick={closeFlyout}
|
||||||
|
icon={ocrIcon}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -79,3 +79,16 @@ describe('EntityNav — flyout', () => {
|
|||||||
await expect.element(page.getByRole('dialog')).not.toBeInTheDocument();
|
await expect.element(page.getByRole('dialog')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('EntityNav — OCR entry', () => {
|
||||||
|
it('renders OCR link when canRunMaintenance is true', async () => {
|
||||||
|
render(EntityNav, props);
|
||||||
|
await expect.element(page.getByRole('link', { name: /OCR/i })).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not render OCR link when canRunMaintenance is false', async () => {
|
||||||
|
render(EntityNav, { ...props, canRunMaintenance: false });
|
||||||
|
const links = document.querySelectorAll('a[href="/admin/ocr"]');
|
||||||
|
expect(links.length).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user