design-wave1: миграция desktop на canon — Form/ModalBase/Styles shims снос #42
Reference in New Issue
Block a user
Delete Branch "feat/design-wave1-cleanup-dialogs-forms"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что делает PR
Закрывает первую волну миграции
components/desktopна единый дизайн-канон платформы:снос временных shim'ов вокруг базовых UI-примитивов, переход на canon-компоненты
(
BaseDialog,BaseForm,BaseButton,ThemeToggle) и canon-токеныvar(--p-*).Что сделано
Form → BaseForm + BaseButton (20 call-sites)
shared/ui/Form/Form.vueпревращён в shim, потом сносится.ModalBase → BaseDialog (37 call-sites)
src/(pages/widgets/features) + 18 вextensions/{capital,chairman,powerup}.q-btn>q-dialog>ModalBase→div>q-btn + BaseDialog.persistent→:close-on-backdrop='false' :close-on-escape='false'.@hide→@update:model-value='(v) => !v && X()'.maximized-режимом сохранены через:maximized='true'.ToogleDarkLight → ThemeToggle
ToogleDarkLight(с опечаткой в имени) удалён, заменён на canonThemeToggle.AutoAvatar → shared/ui/domain/AutoAvatar
Снос мёртвого кода
shared/ui/InputStyles— полностью мёртвый, удалён.shared/ui/TitleStyles+CardStyles— стили перенесены в глобальныйsrc/css/legacy-stylers.scss(подключается черезquasar.config.cjs).extensions/capitalудалены.ModalBase/,TitleStyles/,CardStyles/,AutoAvatar/,Form/,ToogleDarkLight/,InputStyles/снесены целиком.src/shared/ui/index.tsвычищены.Параллельный фикс (попал в волну)
entities/Agreement/api: ранний guard вloadCooperativeAgreementsиloadAgreementTemplates— чтобы Zeus не отправлялcoopname=undefinedв GraphQL, пока
getInfoещё не отработал.RequireAgreements+SignUp/SignUp.vue:watch(() => info.coopname)с
immediate: true— прогрессивная подгрузка соглашений по мереготовности system-store, без блокировки рендера.
Метрики
Тестирование
кооперативные настройки, регистрация, главная, capital-страницы,
меню действий (создание/удаление проектов/задач/историй/коммитов).
Связь с другими PR
feat/design-wave2-legacy-stylers-canonбазируется поверхэтой ветки и таргетится в неё (после merge этой автоматически перенацелится на dev).
Что НЕ вошло в волну (долг)
src/css/legacy-stylers.scssещё используют ad-hoc размерычерез
var(--q-*)иrgba()— закрывается в design-wave2..card-value/.card-label/.section-title(~16 файлов)до сих пор наследуют глобальный legacy-стиль — миграция на canon-виджеты
откладывается на отдельную волну.
При bootstrap'е фронта RequireAgreements/SignUp успевают смонтироваться ДО завершения system.loadSystemInfo(), и info.coopname=undefined. Zeus сериализует variables в {} → сервер кидает "Variable $coopname of required type String! was not provided". Решение по слою: - api/index.ts: гард — если coopname пустой, не отправляем запрос. - RequireAgreements/SignUp: watch(() => info.coopname) — load отрабатывает, как только coopname прорастёт, без блокировки UI.В прошлой волне снёс shared/ui/{ModalBase,TitleStyles,CardStyles,AutoAvatar}, но смотрел только src/. В extensions/{capital,chairman}/ осталось: * ModalBase — 17 файлов * TitleStyles (side-effect SCSS) — 6 страниц capital * CardStyles (side-effect SCSS) — 1 виджет capital * AutoAvatar — 1 страница capital Из-за этого vite валился на 404 TitleStyles → "Failed to fetch dynamically imported module src/boot/init.ts" и фронт не грузился. Восстановлены оригинальные файлы. AutoAvatar в shared/ui/AutoAvatar оставлен как re-export нового канон-расположения shared/ui/domain/AutoAvatar. Полная миграция extensions на BaseDialog и канон-токены — отдельная волна.ResourceInfoWidget в extensions/powerup импортирует ModalBase через barrel: import { ModalBase } from 'src/shared/ui'. После сноса re-export'а vite валился SyntaxError: does not provide an export. Возвращаю строку обратно — папка ModalBase уже восстановлена предыдущим коммитом.ModalBase → BaseDialog (18 call-sites): * extensions/capital — 14 features + 1 widget (ImportContributorsButton). * extensions/chairman — 2 approval features + 1 page (AgendaPresetsPage). * extensions/powerup — 1 widget (ResourceInfoWidget, через barrel). Паттерн: q-dialog внутри q-btn → BaseDialog параллельно q-btn в общей div-обёртке. persistent=true → :close-on-backdrop='false' :close-on-escape='false'. @hide → @update:model-value='(v) => !v && callback()'. maximized → :maximized='true'. ProjectInvestFabAction: два дублирующих q-dialog объединены в один BaseDialog. TitleStyles + CardStyles → src/css/legacy-stylers.scss (глобально через quasar.config.cjs). Все 8 side-effect import'ов в extensions/capital удалены. Долг: переписать .title-container/.info-card/.card-* классы на canon-токены. AutoAvatar: 1 импорт в CapitalProfilePage переключён на shared/ui/domain/AutoAvatar. Shim shared/ui/AutoAvatar снесён. Удалены: shared/ui/{ModalBase,TitleStyles,CardStyles,AutoAvatar} + reexport ModalBase из shared/ui/index.ts. Design-wave1 закрыт полностью.