32 lines
1.5 KiB
TypeScript
32 lines
1.5 KiB
TypeScript
// Маршрутизация портала по параметрам URL.
|
|
//
|
|
// Обычный режим (нет параметров) — подача заявок (features/submit).
|
|
// Режим согласующего — переход по ссылке из потока Power Automate:
|
|
// …/СтраницаПортала.aspx?mode=approve&type=<форма>&id=<RowID>
|
|
// где type = ключ формы в реестре (forms/registry), id = RowID заявки в её списке данных.
|
|
|
|
export type PortalMode = 'submit' | 'approve';
|
|
|
|
export interface IRoute {
|
|
mode: PortalMode;
|
|
/** Ключ формы (тип заявки) — только для mode='approve'. */
|
|
formKey?: string;
|
|
/** Id заявки в списке данных — только для mode='approve'. */
|
|
itemId?: number;
|
|
}
|
|
|
|
/** Разобрать строку запроса (по умолчанию — из адреса страницы) в маршрут. */
|
|
export function parseRoute(search: string = window.location.search): IRoute {
|
|
const params = new URLSearchParams(search);
|
|
const mode = params.get('mode');
|
|
const formKey = params.get('type') ?? undefined;
|
|
const idRaw = params.get('id');
|
|
const itemId = idRaw ? Number(idRaw) : undefined;
|
|
|
|
// Режим согласующего валиден только при полном наборе параметров.
|
|
if (mode === 'approve' && formKey && itemId && !isNaN(itemId)) {
|
|
return { mode: 'approve', formKey, itemId };
|
|
}
|
|
return { mode: 'submit' };
|
|
}
|