Files
request-portal/src/webparts/requestPortal/forms/viewRegistry.ts
T
gorbenko.pavel 3ec1df0e16 Форма «Реферальная рекомендация» (recruiting-referral)
Сотрудник рекомендует внешнего кандидата на вакансию. Пять секций:
рекомендатель, данные кандидата, вакансия, информация о кандидате,
оценка рекомендателя. Есть режим согласующего (ReferralView).

Кандидат — не сотрудник тенанта, поэтому его ФИО/телефон/почта — текстовые
поля, а не People; маршрут согласования резолвится по рекомендателю.

Регистрация: registry, viewRegistry, плитка в data/requests, база имени
списка в listTitles, индекс в docs/forms.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 13:42:20 +05:00

63 lines
2.7 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;
}
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];
}