72 lines
3.2 KiB
TypeScript
72 lines
3.2 KiB
TypeScript
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')
|
||
),
|
||
'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];
|
||
}
|