diff --git a/frontend/src/lib/components/translate/TargetSchemaHint.svelte b/frontend/src/lib/components/translate/TargetSchemaHint.svelte index 07afb19a..de6fbd06 100644 --- a/frontend/src/lib/components/translate/TargetSchemaHint.svelte +++ b/frontend/src/lib/components/translate/TargetSchemaHint.svelte @@ -7,7 +7,7 @@ - + @@ -29,16 +29,20 @@ targetSourceLanguageColumn = null, } = $props(); - /** @type {'idle'|'checking'|'complete'|'error'} */ + /** @type {'idle'|'checking'|'complete'|'complete_error'|'error'} */ let state = $state('idle'); let result = $state(null); let abortController = $state(null); let renderKey = $state(0); + /** True if result is a backend/network error (503/504/timeout), not a "table not found" */ + let isTransientError = $derived(state === 'complete' && !result?.table_exists && !!result?.error); + /** CSS-класс body в зависимости от состояния */ let bodyClass = $derived.by(() => { if (state === 'complete' && result?.all_present) return 'px-3 py-2.5 bg-success-light'; if (state === 'complete' && !result?.all_present && result?.table_exists) return 'px-3 py-2.5 bg-warning-light'; + if (state === 'complete' && !result?.table_exists && result?.error) return 'px-3 py-2.5 bg-warning-light'; if (state === 'error' || (state === 'complete' && !result?.table_exists)) return 'px-3 py-2.5 bg-destructive-light'; return 'px-3 py-2.5'; }); @@ -134,7 +138,8 @@
@@ -216,12 +222,22 @@ {:else if state === 'complete' && result} {#key renderKey} {#if !result.table_exists} -
- - - -

{_('translate.target_schema.table_not_found') || 'Target table not found in the database.'}

-
+ {#if result.error} + +
+ + + +

{_('translate.target_schema.check_error') || 'Could not verify target table schema.'}

+
+ {:else} +
+ + + +

{_('translate.target_schema.table_not_found') || 'Target table not found in the database.'}

+
+ {/if} {:else if result.all_present}