Files
request-portal/src/webparts/requestPortal/forms/viewRegistry.ts
T
gorbenko.pavel 3a7579a5ef feat(ServiceRequest): новая форма «Заявка на услуги» (wh-service-request)
Электронный аналог бумажной Service Requisition Form ПТО: заявитель,
проект (маршрут резолвится по нему), описание требований, табличные части
«Приложения» и «Смета» (JSON-колонки, сумма считается на лету), только
фаза согласования — без исполнения. Форма подачи + режим согласующего,
провижининг-манифесты данных и согласования, регистрация в реестрах форм.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-01 11:40:10 +05:00

75 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import * as React from 'react';
import type { WebPartContext } from '@microsoft/sp-webpart-base';
export interface IApprovalViewProps {
context: WebPartContext;
itemId: number;
/**
* Ключ формы (= pageUrl типа заявки в approval-route API) — тот же, что и
* rptype в ссылке (см. ApproveFeature). Нужен режиму согласующего, чтобы
* самому резолвить числовой RequestTypeId через useRequestTypeId (форма
* подачи получает готовый requestType.id, а View — только itemId/context).
*/
formKey: string;
/**
* Партиция (серверный url списка), где лежит именно ЭТА заявка — см.
* shared/approval/listPartitions.ts. Не задан — просмотр откатывается на
* текущую партицию типа заявки (старые ссылки без параметра).
*/
listId?: string;
/**
* Уведомление о загруженном уникальном коде заявки — нужен родителю
* (RequestPortal) для заголовка Drawer, который рендерится ДО того, как
* View успевает загрузить саму заявку и узнать её код.
*/
onCodeLoaded?: (code: string) => void;
}
type ViewComponent = React.ComponentType<IApprovalViewProps>;
/**
* Реестр форм «только для чтения» (режим согласующего): ключ формы → ленивый просмотр.
* Добавить просмотр = создать <Форма>View.tsx + строка здесь.
*/
const viewRegistry: Record<string, React.LazyExoticComponent<ViewComponent>> = {
'recruiting-selection': React.lazy(
() => import(/* webpackChunkName: 'view-recruiting-selection' */ './RecruitingSelection/RecruitingSelectionView')
),
'recruiting-hire': React.lazy(
() => import(/* webpackChunkName: 'view-recruiting-hire' */ './RecruitingHire/RecruitingHireView')
),
'recruiting-referral': React.lazy(
() => import(/* webpackChunkName: 'view-referral' */ './Referral/ReferralView')
),
'it-workplace-setup': React.lazy(
() => import(/* webpackChunkName: 'view-workplace-setup' */ './WorkplaceSetup/WorkplaceSetupView')
),
'it-1c-ticket': React.lazy(
() => import(/* webpackChunkName: 'view-1c-ticket' */ './Ticket1C/Ticket1CView')
),
'hr-vacation': React.lazy(
() => import(/* webpackChunkName: 'view-vacation' */ './Vacation/VacationView')
),
'hr-unpaid-leave': React.lazy(
() => import(/* webpackChunkName: 'view-unpaid-leave' */ './UnpaidLeave/UnpaidLeaveView')
),
'wh-tmc-transfer': React.lazy(
() => import(/* webpackChunkName: 'view-tmc-transfer' */ './TmcTransfer/TmcTransferView')
),
'wh-service-request': React.lazy(
() => import(/* webpackChunkName: 'view-service-request' */ './ServiceRequest/ServiceRequestView')
),
'clearance-form': React.lazy(
() => import(/* webpackChunkName: 'view-clearance' */ './Clearance/ClearanceView')
),
'hr-dismissal': React.lazy(
() => import(/* webpackChunkName: 'view-dismissal' */ './Dismissal/DismissalView')
)
};
export function getViewComponent(
formKey: string
): React.LazyExoticComponent<ViewComponent> | undefined {
return viewRegistry[formKey];
}