3ec1df0e16
Сотрудник рекомендует внешнего кандидата на вакансию. Пять секций: рекомендатель, данные кандидата, вакансия, информация о кандидате, оценка рекомендателя. Есть режим согласующего (ReferralView). Кандидат — не сотрудник тенанта, поэтому его ФИО/телефон/почта — текстовые поля, а не People; маршрут согласования резолвится по рекомендателю. Регистрация: registry, viewRegistry, плитка в data/requests, база имени списка в listTitles, индекс в docs/forms.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.7 KiB
TypeScript
63 lines
2.7 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;
|
||
}
|
||
|
||
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')
|
||
)
|
||
};
|
||
|
||
export function getViewComponent(
|
||
formKey: string
|
||
): React.LazyExoticComponent<ViewComponent> | undefined {
|
||
return viewRegistry[formKey];
|
||
}
|