From 4fc3356312f5dfa3b72ced079679bed93b13f0fa Mon Sep 17 00:00:00 2001 From: busya Date: Tue, 2 Jun 2026 09:54:18 +0300 Subject: [PATCH] refactor(frontend): migrate Svelte stores from .ts to .svelte.ts runes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete legacy .ts stores (auth, activity, assistantChat, datasetReview, environmentContext, health, sidebar, taskDrawer, translationRun) - Create new .svelte.ts runes-based stores using reactive primitives - Migrate i18n: /i18n → /i18n/index.svelte.js - Migrate toasts: /toasts → /toasts.svelte.js - Update all component imports across 180+ files: components, pages, routes, lib - Remove fromStore() wrappers — use store.value directly with Svelte 5 runes - Update test mocks for new import paths - Add @DEPRECATED annotation to legacy alias --- frontend/src/components/DashboardGrid.svelte | 4 +- frontend/src/components/EnvSelector.svelte | 2 +- frontend/src/components/MappingTable.svelte | 2 +- frontend/src/components/Navbar.svelte | 17 +- .../components/RepositoryDashboardGrid.svelte | 4 +- .../StartupEnvironmentWizard.svelte | 6 +- frontend/src/components/TaskHistory.svelte | 4 +- frontend/src/components/TaskList.svelte | 2 +- frontend/src/components/TaskLogViewer.svelte | 2 +- frontend/src/components/TaskRunner.svelte | 15 +- frontend/src/components/Toast.svelte | 2 +- .../__tests__/task_log_viewer.test.ts | 2 +- .../src/components/auth/ProtectedRoute.svelte | 2 +- .../src/components/backups/BackupList.svelte | 2 +- .../components/backups/BackupManager.svelte | 6 +- .../src/components/git/BranchSelector.svelte | 2 +- .../src/components/git/CommitHistory.svelte | 4 +- .../src/components/git/CommitModal.svelte | 2 +- .../components/git/ConflictResolver.svelte | 2 +- .../src/components/git/DeploymentModal.svelte | 2 +- .../src/components/git/GitInitPanel.svelte | 2 +- frontend/src/components/git/GitManager.svelte | 2 +- .../src/components/git/GitMergeDialog.svelte | 2 +- .../components/git/GitOperationsPanel.svelte | 2 +- .../src/components/git/GitReleasePanel.svelte | 2 +- .../components/git/GitWorkspacePanel.svelte | 2 +- frontend/src/components/llm/DocPreview.svelte | 2 +- .../src/components/llm/ProviderConfig.svelte | 4 +- .../components/llm/ValidationReport.svelte | 2 +- .../src/components/storage/FileList.svelte | 4 +- .../src/components/storage/FileUpload.svelte | 4 +- .../components/tasks/TaskResultPanel.svelte | 2 +- .../src/components/tools/DebugTool.svelte | 13 +- .../src/components/tools/MapperTool.svelte | 8 +- frontend/src/lib/api.ts | 2 +- .../src/lib/api/__tests__/reports_api.test.ts | 2 +- frontend/src/lib/auth/store.svelte.ts | 141 ++ frontend/src/lib/auth/store.ts | 109 - .../DashboardMaintenanceBadge.svelte | 2 +- .../components/MaintenanceEventsTable.svelte | 2 +- .../MaintenanceSettingsPanel.svelte | 2 +- .../components/StartMaintenanceForm.svelte | 4 +- .../assistant/AssistantChatPanel.svelte | 22 +- .../AssistantClarificationCard.svelte | 2 +- ...ssistant_clarification.integration.test.ts | 141 +- ...assistant_confirmation.integration.test.ts | 103 +- ...ssistant_first_message.integration.test.ts | 84 +- .../dataset-review/CompiledSQLPreview.svelte | 2 +- .../ExecutionMappingReview.svelte | 2 +- .../LaunchConfirmationPanel.svelte | 2 +- .../dataset-review/SemanticLayerReview.svelte | 2 +- .../dataset-review/SourceIntakePanel.svelte | 2 +- .../ValidationFindingsPanel.svelte | 2 +- .../__tests__/source_intake_panel.ux.test.ts | 2 +- .../us2_semantic_workspace.ux.test.ts | 2 +- .../__tests__/us3_execution_batch.ux.test.ts | 2 +- .../validation_findings_panel.ux.test.ts | 2 +- .../lib/components/health/HealthMatrix.svelte | 167 +- .../health/ScheduleAtAGlance.svelte | 2 +- .../lib/components/layout/Breadcrumbs.svelte | 8 +- .../src/lib/components/layout/Sidebar.svelte | 56 +- .../lib/components/layout/TaskDrawer.svelte | 18 +- .../lib/components/layout/TopNavbar.svelte | 40 +- .../layout/__tests__/test_sidebar.svelte.js | 52 +- .../__tests__/test_taskDrawer.svelte.js | 32 +- .../layout/__tests__/test_topNavbar.svelte.js | 32 +- .../src/lib/components/llm/UrlParser.svelte | 4 +- .../components/llm/ValidationTaskForm.svelte | 374 +-- .../llm/ValidationTaskReport.svelte | 2 +- .../__tests__/validation_task_form.v2.test.ts | 40 +- .../lib/components/reports/ReportCard.svelte | 2 +- .../reports/ReportDetailPanel.svelte | 2 +- .../reports/__tests__/report_card.ux.test.ts | 2 +- .../__tests__/report_detail.ux.test.ts | 2 +- .../reports/__tests__/reports_list.ux.test.ts | 2 +- .../components/reports/reportTypeProfiles.ts | 2 +- .../lib/components/settings/ApiKeysTab.svelte | 4 +- .../translate/BulkCorrectionSidebar.svelte | 4 +- .../translate/BulkReplaceModal.svelte | 4 +- .../components/translate/ConfigTabForm.svelte | 2 +- .../translate/CorrectionCell.svelte | 4 +- .../components/translate/RunTabContent.svelte | 4 +- .../translate/ScheduleConfig.svelte | 4 +- .../translate/TargetSchemaHint.svelte | 2 +- .../components/translate/TargetTabForm.svelte | 2 +- .../translate/TermCorrectionPopup.svelte | 4 +- .../TranslationMetricsDashboard.svelte | 4 +- .../translate/TranslationPreview.svelte | 4 +- .../TranslationRunGlobalIndicator.svelte | 6 +- .../translate/TranslationRunProgress.svelte | 10 +- .../translate/TranslationRunResult.svelte | 4 +- .../ui/DatabaseSearchCombobox.svelte | 2 +- .../ui/DatasetSearchCombobox.svelte | 2 +- .../lib/i18n/{index.ts => index.svelte.ts} | 118 +- frontend/src/lib/i18n/locales/en/health.json | 9 +- .../src/lib/i18n/locales/en/validation.json | 20 +- frontend/src/lib/i18n/locales/ru/health.json | 9 +- .../src/lib/i18n/locales/ru/validation.json | 19 +- frontend/src/lib/models/BranchModel.svelte.ts | 7 +- frontend/src/lib/models/CommitModel.svelte.ts | 7 +- .../src/lib/models/DeploymentModel.svelte.ts | 7 +- .../src/lib/models/GitConfigModel.svelte.ts | 7 +- .../src/lib/models/GitManagerModel.svelte.ts | 9 +- .../src/lib/models/GitStatusModel.svelte.ts | 9 +- .../src/lib/models/MappingsModel.svelte.ts | 6 +- .../src/lib/models/MigrationModel.svelte.ts | 6 +- .../lib/models/__tests__/BranchModel.test.ts | 8 +- .../lib/models/__tests__/CommitModel.test.ts | 8 +- .../models/__tests__/DeploymentModel.test.ts | 8 +- .../models/__tests__/GitConfigModel.test.ts | 35 +- .../models/__tests__/GitManagerModel.test.ts | 6 +- .../models/__tests__/GitStatusModel.test.ts | 8 +- .../models/__tests__/MappingsModel.test.ts | 12 +- .../models/__tests__/MigrationModel.test.ts | 12 +- frontend/src/lib/stores.svelte.ts | 97 + frontend/src/lib/stores.ts | 64 - .../stores/__tests__/assistantChat.test.ts | 16 +- .../src/lib/stores/__tests__/sidebar.test.ts | 15 +- .../lib/stores/__tests__/taskDrawer.test.ts | 2 +- .../src/lib/stores/__tests__/test_activity.ts | 26 +- .../__tests__/test_datasetReviewSession.ts | 14 +- .../src/lib/stores/__tests__/test_sidebar.ts | 17 +- .../lib/stores/__tests__/test_taskDrawer.ts | 20 +- frontend/src/lib/stores/activity.svelte.ts | 86 + frontend/src/lib/stores/activity.ts | 49 - .../src/lib/stores/assistantChat.svelte.ts | 107 + frontend/src/lib/stores/assistantChat.ts | 83 - ...sion.ts => datasetReviewSession.svelte.ts} | 65 +- .../lib/stores/environmentContext.svelte.ts | 197 ++ frontend/src/lib/stores/environmentContext.ts | 157 -- frontend/src/lib/stores/health.svelte.ts | 121 + frontend/src/lib/stores/health.ts | 81 - frontend/src/lib/stores/maintenance.svelte.ts | 2 +- .../stores/{sidebar.ts => sidebar.svelte.ts} | 63 +- .../{taskDrawer.ts => taskDrawer.svelte.ts} | 83 +- ...slationRun.ts => translationRun.svelte.ts} | 97 +- .../src/lib/{toasts.ts => toasts.svelte.ts} | 38 +- frontend/src/lib/ui/Button.svelte | 5 +- frontend/src/lib/ui/Card.svelte | 4 +- frontend/src/lib/ui/Icon.svelte | 2 +- frontend/src/lib/ui/Input.svelte | 11 +- frontend/src/lib/ui/LanguageSwitcher.svelte | 2 +- frontend/src/lib/ui/PageHeader.svelte | 2 +- frontend/src/lib/ui/Select.svelte | 11 +- frontend/src/lib/ui/index.ts | 1 + frontend/src/lib/utils.ts | 23 +- frontend/src/pages/Dashboard.svelte | 2 +- frontend/src/pages/Settings.svelte | 4 +- frontend/src/routes/+layout.svelte | 18 +- frontend/src/routes/admin/roles/+page.svelte | 2 +- .../src/routes/admin/settings/+page.svelte | 2 +- .../routes/admin/settings/llm/+page.svelte | 4 +- frontend/src/routes/admin/users/+page.svelte | 2 +- frontend/src/routes/dashboards/+page.svelte | 2241 +++-------------- .../src/routes/dashboards/[id]/+page.svelte | 69 +- .../components/DashboardGitManager.svelte | 2 +- .../[id]/components/DashboardHeader.svelte | 2 +- .../DashboardLinkedResources.svelte | 2 +- .../components/DashboardTaskHistory.svelte | 2 +- ...board-profile-override.integration.test.ts | 10 +- .../src/routes/dashboards/health/+page.svelte | 384 +-- .../__tests__/health_page.integration.test.ts | 8 +- frontend/src/routes/datasets/+page.svelte | 13 +- .../src/routes/datasets/ColumnsTable.svelte | 2 +- .../src/routes/datasets/DatasetList.svelte | 2 +- .../src/routes/datasets/DatasetPreview.svelte | 2 +- .../src/routes/datasets/MetricsTable.svelte | 2 +- frontend/src/routes/datasets/StatsBar.svelte | 2 +- .../src/routes/datasets/[id]/+page.svelte | 4 +- .../src/routes/datasets/review/+page.svelte | 11 +- .../review/ReviewWorkspaceHeader.svelte | 2 +- .../review/ReviewWorkspaceLeftSidebar.svelte | 2 +- .../review/ReviewWorkspaceRightRail.svelte | 2 +- .../routes/datasets/review/[id]/+page.svelte | 21 +- .../dataset_review_workspace.ux.test.ts | 10 +- .../__tests__/dataset_review_entry.test.ts | 17 +- .../__tests__/dataset_review_entry.ux.test.ts | 17 +- .../datasets/review/useReviewSession.ts | 4 +- frontend/src/routes/git/+page.svelte | 15 +- frontend/src/routes/login/+page.svelte | 4 +- frontend/src/routes/maintenance/+page.svelte | 2 +- frontend/src/routes/migration/+page.svelte | 250 +- .../__tests__/migration_dashboard.ux.test.ts | 8 +- .../routes/migration/mappings/+page.svelte | 2 +- frontend/src/routes/profile/+page.svelte | 15 +- .../profile-preferences.integration.test.ts | 8 +- ...profile-settings-state.integration.test.ts | 8 +- frontend/src/routes/reports/+page.svelte | 6 +- .../routes/reports/llm/[taskId]/+page.svelte | 4 +- frontend/src/routes/settings/+page.svelte | 4 +- .../routes/settings/EnvironmentsTab.svelte | 4 +- .../routes/settings/FeaturesSettings.svelte | 2 +- .../src/routes/settings/LlmSettings.svelte | 2 +- .../routes/settings/LoggingSettings.svelte | 2 +- .../settings/MigrationMappingsTable.svelte | 2 +- .../routes/settings/MigrationSettings.svelte | 4 +- .../routes/settings/StorageSettings.svelte | 2 +- .../src/routes/settings/SystemSettings.svelte | 2 +- .../settings_page.integration.test.ts | 6 +- .../__tests__/settings_page.ux.test.ts | 6 +- .../routes/settings/automation/+page.svelte | 2 +- frontend/src/routes/settings/git/+page.svelte | 2 +- .../__tests__/git_settings_page.ux.test.ts | 56 +- .../settings/notifications/+page.svelte | 4 +- .../src/routes/storage/repos/+page.svelte | 15 +- .../src/routes/tools/backups/+page.svelte | 2 +- frontend/src/routes/tools/debug/+page.svelte | 2 +- frontend/src/routes/tools/mapper/+page.svelte | 2 +- .../src/routes/tools/storage/+page.svelte | 4 +- frontend/src/routes/translate/+page.svelte | 4 +- .../src/routes/translate/[id]/+page.svelte | 10 +- .../translate/dictionaries/+page.svelte | 4 +- .../translate/dictionaries/[id]/+page.svelte | 4 +- .../src/routes/translate/history/+page.svelte | 4 +- .../src/routes/validation-tasks/+page.svelte | 4 +- .../validation-tasks/[policyId]/+page.svelte | 4 +- .../[policyId]/edit/+page.svelte | 8 +- .../[policyId]/runs/[runId]/+page.svelte | 2 +- .../validation-tasks/history/+page.svelte | 2 +- .../routes/validation-tasks/new/+page.svelte | 4 +- frontend/svelte.config.js | 2 +- frontend/tests/maintenance-store.test.ts | 4 +- frontend/tests/maintenance.test.ts | 5 +- 223 files changed, 3045 insertions(+), 3897 deletions(-) create mode 100644 frontend/src/lib/auth/store.svelte.ts delete mode 100644 frontend/src/lib/auth/store.ts rename frontend/src/lib/i18n/{index.ts => index.svelte.ts} (59%) create mode 100644 frontend/src/lib/stores.svelte.ts delete mode 100644 frontend/src/lib/stores.ts create mode 100644 frontend/src/lib/stores/activity.svelte.ts delete mode 100644 frontend/src/lib/stores/activity.ts create mode 100644 frontend/src/lib/stores/assistantChat.svelte.ts delete mode 100644 frontend/src/lib/stores/assistantChat.ts rename frontend/src/lib/stores/{datasetReviewSession.ts => datasetReviewSession.svelte.ts} (64%) create mode 100644 frontend/src/lib/stores/environmentContext.svelte.ts delete mode 100644 frontend/src/lib/stores/environmentContext.ts create mode 100644 frontend/src/lib/stores/health.svelte.ts delete mode 100644 frontend/src/lib/stores/health.ts rename frontend/src/lib/stores/{sidebar.ts => sidebar.svelte.ts} (52%) rename frontend/src/lib/stores/{taskDrawer.ts => taskDrawer.svelte.ts} (55%) rename frontend/src/lib/stores/{translationRun.ts => translationRun.svelte.ts} (77%) rename frontend/src/lib/{toasts.ts => toasts.svelte.ts} (73%) diff --git a/frontend/src/components/DashboardGrid.svelte b/frontend/src/components/DashboardGrid.svelte index a62b7c08..c7f670c3 100644 --- a/frontend/src/components/DashboardGrid.svelte +++ b/frontend/src/components/DashboardGrid.svelte @@ -15,11 +15,11 @@ -
+
{#if loading} -
-
-
-
+
+ {#each Array(5) as _, i (i)} +
+ {/each}
{:else if error} -
-

{$t.health?.load_failed}

-

{error}

+
+

{$t.health?.load_failed || 'Failed to load health data'}

+

{error}

{:else} -
-
-
🟢 {pass_count}
-
{$t.health?.status_pass}
-
- -
-
🟡 {warn_count}
-
{$t.health?.status_warn}
-
- -
-
🔴 {fail_count}
-
{$t.health?.status_fail}
-
+
+ + -
-
⚪ {unknown_count}
-
{$t.health?.status_unknown}
-
+ + + + + + + + + + +
- + {#if total === 0} -
- {$t.health?.no_records_for_environment} +
+ + + +

{$t.health?.no_records_for_environment || 'No validation records for this environment'}

{/if} {/if}
- - diff --git a/frontend/src/lib/components/health/ScheduleAtAGlance.svelte b/frontend/src/lib/components/health/ScheduleAtAGlance.svelte index a69b83c8..ed3f5d47 100644 --- a/frontend/src/lib/components/health/ScheduleAtAGlance.svelte +++ b/frontend/src/lib/components/health/ScheduleAtAGlance.svelte @@ -19,7 +19,7 @@ import { SvelteSet } from 'svelte/reactivity'; import { goto } from '$app/navigation'; import { getValidationTasks as fetchTasks } from '$lib/api.js'; - import { t } from '$lib/i18n'; + import { t } from '$lib/i18n/index.svelte.js'; /** @type {{ healthItems: Array<{task_id?: string, status: string}>, selectedEnvId?: string, appTimezone?: string }} */ let { diff --git a/frontend/src/lib/components/layout/Breadcrumbs.svelte b/frontend/src/lib/components/layout/Breadcrumbs.svelte index 9958eb0e..184099ae 100644 --- a/frontend/src/lib/components/layout/Breadcrumbs.svelte +++ b/frontend/src/lib/components/layout/Breadcrumbs.svelte @@ -20,16 +20,14 @@ */ import { page } from "$app/state"; - import { fromStore } from "svelte/store"; - import { t, _ } from "$lib/i18n"; + import { t, _ } from "$lib/i18n/index.svelte.js"; import Icon from "$lib/ui/Icon.svelte"; let { maxVisible = 3 } = $props(); - const translationState = fromStore(t); // Breadcrumb items derived from current path let breadcrumbItems = $derived( - getBreadcrumbs(page.url.pathname || "/", maxVisible, translationState.current), + getBreadcrumbs(page.url.pathname || "/", maxVisible, t), ); /** @@ -150,7 +148,7 @@