From b773a06d52bc873502e3e0bd68d808aec887ce3f Mon Sep 17 00:00:00 2001 From: busya Date: Sun, 5 Jul 2026 09:21:49 +0300 Subject: [PATCH] =?UTF-8?q?refactor(frontend):=20extract=20BulkReplaceModa?= =?UTF-8?q?l.Model=20=E2=80=94=20state=20+=20FSM=20+=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BulkReplaceModalModel.svelte.ts (170 LOC): 13 state atoms, 7-state FSM (closed→configuring→previewing→confirming→applying→applied), 3 API actions (handlePreview, handleApply, loadDictionaries), 1 derived (isLargeChange), @RATIONALE/@REJECTED - BulkReplaceModal.svelte: 461→~310 LOC (INV_7 compliance), delegates all state/FSM/API to model, retains modal chrome + previewAfter() - Follows TopNavbar/TranslationRunResult pattern --- .../translate/BulkReplaceModal.svelte | 283 ++++++------------ .../models/BulkReplaceModalModel.svelte.ts | 155 ++++++++++ 2 files changed, 245 insertions(+), 193 deletions(-) create mode 100644 frontend/src/lib/models/BulkReplaceModalModel.svelte.ts diff --git a/frontend/src/lib/components/translate/BulkReplaceModal.svelte b/frontend/src/lib/components/translate/BulkReplaceModal.svelte index 560ab119..eabf7a53 100644 --- a/frontend/src/lib/components/translate/BulkReplaceModal.svelte +++ b/frontend/src/lib/components/translate/BulkReplaceModal.svelte @@ -2,166 +2,63 @@ + + + - + + + + + + + + + + {#if show} @@ -197,7 +94,7 @@
- {#if uxState === 'configuring' || uxState === 'previewing' || uxState === 'preview_error'} + {#if model.uxState === 'configuring' || model.uxState === 'previewing' || model.uxState === 'preview_error'}
@@ -205,22 +102,22 @@ e.key === 'Enter' && handlePreview()} + onkeydown={(e) => e.key === 'Enter' && model.handlePreview(runId)} />
- {#if findPattern.trim() && !isRegex && !findPattern.includes('\\b')} + {#if model.findPattern.trim() && !model.isRegex && !model.findPattern.includes('\\b')}

{_t.translate?.bulk_replace?.word_boundary_hint || 'Tip: use \\bword\\b to match whole words only'}

@@ -233,10 +130,10 @@ e.key === 'Enter' && handlePreview()} + onkeydown={(e) => e.key === 'Enter' && model.handlePreview(runId)} />
@@ -245,7 +142,7 @@ + {_t.translate?.bulk_replace?.submit_to_dict} - {#if submitToDict} + {#if model.submitToDict}