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 });