80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
/**
|
|
* Global Request Navigation Utility
|
|
*
|
|
* Centralized navigation logic for request-related routes.
|
|
* This utility decides where to navigate when clicking on request cards
|
|
* from anywhere in the application.
|
|
*
|
|
* Features:
|
|
* - Single point of navigation logic
|
|
* - Handles draft vs active requests
|
|
* - Supports different flow types (CUSTOM, DEALER_CLAIM)
|
|
* - Type-safe navigation
|
|
*/
|
|
|
|
import { NavigateFunction } from 'react-router-dom';
|
|
import { getRequestDetailRoute, RequestFlowType } from './requestTypeUtils';
|
|
|
|
export interface RequestNavigationOptions {
|
|
requestId: string;
|
|
requestTitle?: string;
|
|
status?: string;
|
|
request?: any; // Full request object if available
|
|
navigate: NavigateFunction;
|
|
}
|
|
|
|
/**
|
|
* Navigate to the appropriate request detail page based on request type
|
|
*
|
|
* This is the single point of navigation for all request cards.
|
|
* It handles:
|
|
* - Draft requests (navigate to edit)
|
|
* - Different flow types (CUSTOM, DEALER_CLAIM)
|
|
* - Status-based routing
|
|
*/
|
|
export function navigateToRequest(options: RequestNavigationOptions): void {
|
|
const { requestId, status, request, navigate } = options;
|
|
|
|
// Check if request is a draft - if so, route to edit form instead of detail view
|
|
const isDraft = status?.toLowerCase() === 'draft' || status === 'DRAFT';
|
|
if (isDraft) {
|
|
navigate(`/edit-request/${requestId}`);
|
|
return;
|
|
}
|
|
|
|
// Determine the appropriate route based on request type
|
|
const route = getRequestDetailRoute(requestId, request);
|
|
navigate(route);
|
|
}
|
|
|
|
/**
|
|
* Navigate to create a new request based on flow type
|
|
*/
|
|
export function navigateToCreateRequest(
|
|
navigate: NavigateFunction,
|
|
flowType: RequestFlowType = 'CUSTOM'
|
|
): void {
|
|
const route = flowType === 'DEALER_CLAIM'
|
|
? '/claim-management'
|
|
: '/new-request';
|
|
navigate(route);
|
|
}
|
|
|
|
/**
|
|
* Create a navigation handler function for request cards
|
|
* This can be used directly in onClick handlers
|
|
*/
|
|
export function createRequestNavigationHandler(
|
|
navigate: NavigateFunction
|
|
) {
|
|
return (requestId: string, requestTitle?: string, status?: string, request?: any) => {
|
|
navigateToRequest({
|
|
requestId,
|
|
requestTitle,
|
|
status,
|
|
request,
|
|
navigate,
|
|
});
|
|
};
|
|
}
|