diff --git a/docs/MIGRATION-CHECKLIST.md b/docs/MIGRATION-CHECKLIST.md index 89c8a23..1555e24 100644 --- a/docs/MIGRATION-CHECKLIST.md +++ b/docs/MIGRATION-CHECKLIST.md @@ -190,6 +190,12 @@ 🐞 Create без проверки NoAccess. 🐞 Номер может совпасть после мягкого удаления. 🐞 Дата «сегодня» — UTC. +**Сознательные отличия от report:** +- `confirm('Утвердить отчет? …')` → `confirmModal` из ui-kit, текст тот же. +- Адрес сайта для списков и ссылки на папку фото — настройка «URL сайта SharePoint» (раньше `pageContext.web.absoluteUrl`); путь папки при создании — по-прежнему от сайта, где стоит страница (`web.serverRelativeUrl`). По умолчанию это один и тот же сайт `/sites/stroy`. +- Если Dataverse ответит на создание записи `204` без тела, старый код брал id из заголовка `OData-EntityId`, а новый клиент заголовков не видит. С `Prefer: return=representation` Dataverse отвечает `201` с телом, поэтому на практике не встречается; при пустом id сохранение останавливается той же ошибкой `reportId is empty`. +- Логика режимов, валидации, сборки строк и порядка записи / удаления сверена со старым кодом построчно и покрыта тестами (45 тестов). + --- ## 6. Импорт работ (stroy-bot-import-works) — `?page=import&projectId=` diff --git a/src/webparts/stroyBot/app/PageOutlet.tsx b/src/webparts/stroyBot/app/PageOutlet.tsx index 0536314..e50601a 100644 --- a/src/webparts/stroyBot/app/PageOutlet.tsx +++ b/src/webparts/stroyBot/app/PageOutlet.tsx @@ -1,34 +1,35 @@ import * as React from 'react'; import { useRouter } from './routing/RouterContext'; -import { SectionPlaceholder } from './SectionPlaceholder'; import { HubPage } from '../pages/hub/HubPage'; -import { ResourcesPage } from '../pages/resources/ResourcesPage'; -import { BinderPage } from '../pages/binder/BinderPage'; -import { ReportsPage } from '../pages/reports/ReportsPage'; -import { ImportWorksPage } from '../pages/import/ImportWorksPage'; import { ObjectsPage } from '../pages/objects/ObjectsPage'; import { WorksPage } from '../pages/works/WorksPage'; +import { ReportsPage } from '../pages/reports/ReportsPage'; +import { ReportPage } from '../pages/report/ReportPage'; +import { ImportWorksPage } from '../pages/import/ImportWorksPage'; +import { ResourcesPage } from '../pages/resources/ResourcesPage'; +import { BinderPage } from '../pages/binder/BinderPage'; -/** Показывает страницу текущего раздела. Разделы подключаются сюда по мере переноса. */ +/** Показывает страницу текущего раздела (раздел берётся из ?page=). */ export const PageOutlet: React.FC = () => { const { route } = useRouter(); switch (route.page) { - case 'hub': - return ; - case 'resources': - return ; - case 'binder': - return ; - case 'reports': - return ; - case 'import': - return ; case 'objects': return ; case 'works': return ; + case 'reports': + return ; + case 'report': + return ; + case 'import': + return ; + case 'resources': + return ; + case 'binder': + return ; + case 'hub': default: - return ; + return ; } }; diff --git a/src/webparts/stroyBot/app/texts.ts b/src/webparts/stroyBot/app/texts.ts index 731a598..deca30a 100644 --- a/src/webparts/stroyBot/app/texts.ts +++ b/src/webparts/stroyBot/app/texts.ts @@ -1,9 +1,7 @@ // Тексты оболочки приложения. Тексты разделов лежат рядом с разделами (pages/*/texts.ts). export const APP_TEXTS = { - brand: 'StroyBot', - sectionInProgress: 'Раздел переносится из старого web part', - sectionInProgressHint: 'Пока пользуйтесь старой страницей раздела.' + brand: 'StroyBot' } as const; export const PROPERTY_PANE_TEXTS = { diff --git a/src/webparts/stroyBot/pages/report/ReportForm.tsx b/src/webparts/stroyBot/pages/report/ReportForm.tsx index a2d6ec4..4450fdd 100644 --- a/src/webparts/stroyBot/pages/report/ReportForm.tsx +++ b/src/webparts/stroyBot/pages/report/ReportForm.tsx @@ -53,7 +53,7 @@ export const ReportForm: React.FC = ({ params }) => { } const isSaved = !!report.successMessage; - const runAsync = (action: () => Promise) => (): void => { + const runAsync = (action: () => Promise): (() => void) => (): void => { action().catch(() => undefined); }; diff --git a/src/webparts/stroyBot/pages/report/picker/PickerCreateForm.tsx b/src/webparts/stroyBot/pages/report/picker/PickerCreateForm.tsx index b4a12ff..301f885 100644 --- a/src/webparts/stroyBot/pages/report/picker/PickerCreateForm.tsx +++ b/src/webparts/stroyBot/pages/report/picker/PickerCreateForm.tsx @@ -23,7 +23,7 @@ const stopPropagation = (event: React.KeyboardEvent): void => event.stopPropagat export const PickerCreateForm: React.FC = ({ create, requiresUnit, nestedInTitle, parentCandidates }) => { const { draft, isCreating, errorMessage } = create; const change = - (field: keyof IPickerCreateDraft) => + (field: keyof IPickerCreateDraft): ((value: string) => void) => (value: string): void => create.changeDraft({ [field]: value });