UNPKG

@accounter/client

Version:
69 lines (57 loc) 1.93 kB
import type { LoaderFunctionArgs, Params } from 'react-router-dom'; /** * Type-safe route parameter definitions */ export interface ChargeParams extends Params { chargeId: string; } export interface BusinessParams extends Params { businessId: string; } export interface BusinessTripParams extends Params { businessTripId: string; } export interface ReportYearParams extends Params { year?: string; } /** * Type-safe loader argument types */ export type ChargeLoaderArgs = LoaderFunctionArgs<ChargeParams>; export type BusinessLoaderArgs = LoaderFunctionArgs<BusinessParams>; export type BusinessTripLoaderArgs = LoaderFunctionArgs<BusinessTripParams>; export type ReportYearLoaderArgs = LoaderFunctionArgs<ReportYearParams>; /** * Helper functions to validate and parse params */ export function validateChargeParams(params: Params): ChargeParams { if (!params.chargeId) { throw new Response('Charge ID is required', { status: 400 }); } return { chargeId: params.chargeId }; } export function validateBusinessParams(params: Params): BusinessParams { if (!params.businessId) { throw new Response('Business ID is required', { status: 400 }); } return { businessId: params.businessId }; } export function validateBusinessTripParams(params: Params): BusinessTripParams { if (!params.businessTripId) { throw new Response('Business Trip ID is required', { status: 400 }); } return { businessTripId: params.businessTripId }; } export function parseYearParam(params: Params): number | undefined { if (!params.year) return undefined; const year = parseInt(params.year, 10); if (Number.isNaN(year) || year < 2000 || year > 2100) { throw new Response('Invalid year parameter', { status: 400 }); } return year; } export interface RouteHandle { breadcrumb?: string | ((data?: unknown) => string); title?: string | ((data?: unknown) => string); [key: string]: unknown; }