8eb5b13985
Цифровая версия бумажной заявки на командировку (отдел кадров). Можно подать за другого сотрудника; маршрут — лентой точек (город + объект из справочника проектов + даты) с видом транспорта на каждом участке и вторым видом «Схема» (SVG, как схема метро). Задание — список задач. Смета — карточками статей (суточные, проезд, проживание, страховка, виза, другие расходы) с позициями, привязанными к точкам и участкам маршрута; суммы только вручную, итог с долями и разбивкой по объектам. Печать — без шапки с адресатом. Плитка пока только для тестировщиков (comingSoon): списки SharePoint не провизионированы, тип заявки и маршрут в админке не заведены. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
68 lines
2.8 KiB
TypeScript
68 lines
2.8 KiB
TypeScript
import * as React from 'react';
|
|
import { IRequestFormProps, RequestTypeId } from '../models/types';
|
|
|
|
type FormComponent = React.ComponentType<IRequestFormProps>;
|
|
|
|
/**
|
|
* Реестр форм: id типа заявки → лениво загружаемая форма.
|
|
* Каждая форма — отдельный чанк (React.lazy): в бандл первого экрана не попадает,
|
|
* подтягивается только при открытии. Добавить форму = папка + строка здесь.
|
|
*/
|
|
const formRegistry: Record<string, React.LazyExoticComponent<FormComponent>> = {
|
|
'recruiting-selection': React.lazy(
|
|
() =>
|
|
import(
|
|
/* webpackChunkName: 'form-recruiting-selection' */ './RecruitingSelection/RecruitingSelectionForm'
|
|
)
|
|
),
|
|
'recruiting-hire': React.lazy(
|
|
() =>
|
|
import(/* webpackChunkName: 'form-recruiting-hire' */ './RecruitingHire/RecruitingHireForm')
|
|
),
|
|
'recruiting-referral': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-referral' */ './Referral/ReferralForm')
|
|
),
|
|
'it-workplace-setup': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-workplace-setup' */ './WorkplaceSetup/WorkplaceSetupForm')
|
|
),
|
|
'it-1c-ticket': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-1c-ticket' */ './Ticket1C/Ticket1CForm')
|
|
),
|
|
'hr-vacation': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-vacation' */ './Vacation/VacationForm')
|
|
),
|
|
'hr-unpaid-leave': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-unpaid-leave' */ './UnpaidLeave/UnpaidLeaveForm')
|
|
),
|
|
'hr-skud-explanation': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-skud-explanation' */ './SkudExplanation/SkudExplanationForm')
|
|
),
|
|
'hr-business-trip': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-business-trip' */ './BusinessTrip/BusinessTripForm')
|
|
),
|
|
'wh-tmc-transfer': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-tmc-transfer' */ './TmcTransfer/TmcTransferForm')
|
|
),
|
|
'wh-service-request': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-service-request' */ './ServiceRequest/ServiceRequestForm')
|
|
),
|
|
'clearance-form': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-clearance' */ './Clearance/ClearanceForm')
|
|
),
|
|
'hr-dismissal': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-dismissal' */ './Dismissal/DismissalForm')
|
|
),
|
|
'hr-transfer': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-employee-transfer' */ './EmployeeTransfer/EmployeeTransferForm')
|
|
),
|
|
'wh-concrete-request': React.lazy(
|
|
() => import(/* webpackChunkName: 'form-concrete-request' */ './ConcreteRequest/ConcreteRequestForm')
|
|
)
|
|
};
|
|
|
|
export function getFormComponent(
|
|
id: RequestTypeId
|
|
): React.LazyExoticComponent<FormComponent> | undefined {
|
|
return formRegistry[id];
|
|
}
|