refactor: separate schema tool state

This commit is contained in:
2026-10-10 05:08:39 +05:00
parent 6d683c1d75
commit 0b3eeab959
4 changed files with 235 additions and 151 deletions
+11 -18
View File
@@ -21,26 +21,19 @@
## High
### H1. `SchemaToolView.svelte` — god-component — В РАБОТЕ
### H1. `SchemaToolView.svelte` — god-component — СДЕЛАНО (2026-10)
План декомпозиции (подшаги, каждый отдельным ревью-коммитом):
Компонент уменьшен со 1115 до ~660 строк (оркестратор: derived-связки, init,
handleFiles, эффекты, workspace-разметка). Декомпозиция:
- **H1a — СДЕЛАНО (2026-10):** aligned-раскладка вынесена в
`SchemaAlignedLayout.svelte` (view-only: разметка + scoped-стили, сниппет
`stepCard` остался в родителе и передаётся пропсом). Родитель уменьшился
примерно на 200 строк.
- **H1b — СДЕЛАНО (2026-10):** runner вынесен в `schema-tool-runner.svelte.ts`
(`createSchemaToolRunner(ctx)`: состояние в `$state`-объекте `RunnerState`,
действия — модульные функции run/download/
copyText/downloadText/assignResult/toDisplayError, геттеры наружу; лимит
`max-lines-per-function` не даёт держать всё в одной фабрике). Компонент
читает состояние через `$derived`-алиасы.
- **H1c (далее):** стейт шагов (мутации `steps`, `touchedByStep`, `lastAxis`) →
`schema-tool-state.svelte.ts`.
Исходная формулировка: ~10 ответственностей в одном компоненте — состояние
цепочки шагов, загрузка файлов, оркестрация запуска, политика скачивания,
clipboard, paste-listener, mask-превью, drag&drop, aspect-lock, две раскладки.
- **H1a:** aligned-раскладка вынесена в `SchemaAlignedLayout.svelte` (view-only:
разметка + scoped-стили, сниппет `stepCard` передаётся пропсом).
- **H1b:** runner вынесен в `schema-tool-runner.svelte.ts`
(`createSchemaToolRunner(ctx)`); идиома «`$state`-объект + модульные функции»
зафиксирована в `docs/architecture.md`, раздел 9.
- **H1c:** стейт шагов вынесен в `schema-tool-state.svelte.ts`
(`createSchemaToolState(ctx)`: steps, touchedByStep/lastAxis, все мутации,
DnD; `toolSchemaOf` — модульный экспорт).
### H2. Race condition превью — СДЕЛАНО (2026-10)
+6
View File
@@ -10,6 +10,12 @@
## Pipeline
- [ ] **баг: drag-n-drop перестановки шагов не работает** — обработчики на месте
(`StepCard` draggable в сниппете `stepCard` `SchemaToolView.svelte`,
`onStepDrop` → `moveStep` в `schema-tool-state.svelte.ts`), но
перетаскивание не срабатывает. Замечено до рефактора H1 (2026-10), не
регрессия от него. Начать с проверки `draggable`/`dragstart` на `StepCard`
и того, что drop не глушится дочерними элементами карточки
- [ ] названия инструментов — в pipeline инструмент называется «обрезать png»,
но он работает с любыми картинками, наверное надо убрать; в заголовке
страницы — возможно, надо указать все форматы (связано с SEO)