/** * 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.

); }