/** * Dealer Claim Request Overview Tab * * This component is specific to Dealer Claim requests. * Located in: src/dealer-claim/components/request-detail/ */ import { ActivityInformationCard, DealerInformationCard, ProposalDetailsCard, RequestInitiatorCard, } from './claim-cards'; import { isClaimManagementRequest } from '@/utils/claimRequestUtils'; import { mapToClaimManagementRequest, determineUserRole, getRoleBasedVisibility, type RequestRole, } from '@/utils/claimDataMapper'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { RichTextEditor } from '@/components/ui/rich-text-editor'; import { FormattedDescription } from '@/components/common/FormattedDescription'; import { CheckCircle, RefreshCw, Loader2 } from 'lucide-react'; import { formatDateTime } from '@/utils/dateFormatter'; interface ClaimManagementOverviewTabProps { request: any; // Original request object apiRequest: any; // API request data currentUserId: string; isInitiator: boolean; onEditClaimAmount?: () => void; className?: string; // Closure props needsClosure?: boolean; conclusionRemark?: string; setConclusionRemark?: (value: string) => void; conclusionLoading?: boolean; conclusionSubmitting?: boolean; aiGenerated?: boolean; handleGenerateConclusion?: () => void; handleFinalizeConclusion?: () => void; } export function ClaimManagementOverviewTab({ request: _request, apiRequest, currentUserId, isInitiator: _isInitiator, onEditClaimAmount: _onEditClaimAmount, className = '', needsClosure = false, conclusionRemark = '', setConclusionRemark, conclusionLoading = false, conclusionSubmitting = false, aiGenerated = false, handleGenerateConclusion, handleFinalizeConclusion, }: 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) { console.warn('[ClaimManagementOverviewTab] Failed to map claim data:', { apiRequest, hasClaimDetails: !!apiRequest?.claimDetails, hasProposalDetails: !!apiRequest?.proposalDetails, hasCompletionDetails: !!apiRequest?.completionDetails, }); return (

Unable to load claim management data.

Please ensure the request has been properly initialized.

); } // Mapped claim data ready // Determine user's role const userRole: RequestRole = determineUserRole(apiRequest, currentUserId); // Get visibility settings based on role const visibility = getRoleBasedVisibility(userRole); // User role and visibility determined // Extract initiator info from request // The apiRequest has initiator object with displayName, email, department, phone, etc. const initiatorInfo = { name: apiRequest.initiator?.name || apiRequest.initiator?.displayName || apiRequest.initiator?.email || 'Unknown', role: apiRequest.initiator?.role || apiRequest.initiator?.designation || 'Initiator', department: apiRequest.initiator?.department || apiRequest.department || '', email: apiRequest.initiator?.email || 'N/A', phone: apiRequest.initiator?.phone || apiRequest.initiator?.mobile, }; // Closure setup check completed return (
{/* Activity Information - Always visible */} {/* Dealer-claim module: Business logic for preparing timestamp data */} {/* Dealer Information - Always visible */} {/* Proposal Details - Only shown after dealer submits proposal */} {visibility.showProposalDetails && claimRequest.proposalDetails && ( )} {/* Request Initiator */} {/* Closed Request Conclusion Remark Display */} {apiRequest?.status === 'closed' && apiRequest?.conclusionRemark && ( Conclusion Remark Final summary of this closed request
{apiRequest.closureDate && (
Request closed on {formatDateTime(apiRequest.closureDate)} By {initiatorInfo.name}
)}
)} {/* Conclusion Remark Section - Closure Setup */} {needsClosure && (
Conclusion Remark - Final Step {(apiRequest?.status || '').toLowerCase() === 'rejected' ? 'This request was rejected. Please review the AI-generated closure remark and finalize it to close this request.' : 'All approvals are complete. Please review and finalize the conclusion to close this request.'}
{handleGenerateConclusion && ( )}
{conclusionLoading ? (

Preparing conclusion remark...

) : (
{aiGenerated && ( ✓ System-generated suggestion (editable) )}
{setConclusionRemark && ( setConclusionRemark(html)} placeholder="Enter a professional conclusion remark summarizing the request outcome, key decisions, and approvals..." className="text-sm" minHeight="160px" data-testid="conclusion-remark-textarea" /> )}

💡 Tip: You can paste formatted content (lists, tables) and the formatting will be preserved.

This will be the final summary for this request

{conclusionRemark ? conclusionRemark.replace(/<[^>]*>/g, '').length : 0} / 2000 characters

Finalizing this request will:

  • Change request status to "CLOSED"
  • Notify all participants of closure
  • Move request to Closed Requests
  • Save conclusion remark permanently
{handleFinalizeConclusion && (
)}
)}
)}
); } // Export as DealerClaimOverviewTab for consistency export { ClaimManagementOverviewTab as DealerClaimOverviewTab };