/**
* ClaimManagementOverviewTab Component
* Specialized overview tab for Claim Management requests
* Uses modular card components for flexible rendering based on role and request state
*/
import { useState } from 'react';
import {
ActivityInformationCard,
DealerInformationCard,
ProposalDetailsCard,
ProcessDetailsCard,
RequestInitiatorCard,
} from '../claim-cards';
import {
ClaimManagementRequest,
RequestRole,
getRoleBasedVisibility,
} from '../../types/claimManagement.types';
import {
mapToClaimManagementRequest,
determineUserRole,
isClaimManagementRequest,
} from '../../utils/claimDataMapper';
interface ClaimManagementOverviewTabProps {
request: any; // Original request object
apiRequest: any; // API request data
currentUserId: string;
isInitiator: boolean;
onEditClaimAmount?: () => void;
className?: string;
}
export function ClaimManagementOverviewTab({
request,
apiRequest,
currentUserId,
isInitiator,
onEditClaimAmount,
className = '',
}: ClaimManagementOverviewTabProps) {
// Check if this is a claim management request
if (!isClaimManagementRequest(apiRequest)) {
return (
This is not a claim management request.
);
}
// Map API data to claim management structure
const claimRequest = mapToClaimManagementRequest(apiRequest, currentUserId);
if (!claimRequest) {
return (
Unable to load claim management data.
);
}
// Determine user's role
const userRole: RequestRole = determineUserRole(apiRequest, currentUserId);
// Get visibility settings based on role
const visibility = getRoleBasedVisibility(userRole);
// Extract initiator info from request
const initiatorInfo = {
name: apiRequest.requestedBy?.name || apiRequest.createdByName || 'Unknown',
role: 'initiator',
department: apiRequest.requestedBy?.department || apiRequest.department || '',
email: apiRequest.requestedBy?.email || 'N/A',
phone: apiRequest.requestedBy?.phone || apiRequest.requestedBy?.mobile,
};
return (
{/* Left Column: Main Information Cards */}
{/* Activity Information - Always visible */}
{/* Dealer Information - Visible based on role */}
{visibility.showDealerInfo && (
)}
{/* Proposal Details - Only shown after dealer submits proposal */}
{visibility.showProposalDetails && claimRequest.proposalDetails && (
)}
{/* Request Initiator */}
{/* Right Column: Process Details Sidebar */}
);
}
/**
* Wrapper component that decides whether to show claim management or regular overview
*/
interface AdaptiveOverviewTabProps {
request: any;
apiRequest: any;
currentUserId: string;
isInitiator: boolean;
onEditClaimAmount?: () => void;
// Props for regular overview tab
regularOverviewComponent?: React.ComponentType;
regularOverviewProps?: any;
}
export function AdaptiveOverviewTab({
request,
apiRequest,
currentUserId,
isInitiator,
onEditClaimAmount,
regularOverviewComponent: RegularOverview,
regularOverviewProps,
}: AdaptiveOverviewTabProps) {
// Determine if this is a claim management request
const isClaim = isClaimManagementRequest(apiRequest);
if (isClaim) {
return (
);
}
// Render regular overview if provided
if (RegularOverview) {
return ;
}
// Fallback
return (
No overview available for this request type.
);
}