diff --git a/src/components/ConversationTimeline.tsx b/src/components/ConversationTimeline.tsx index f5a6bcd..bdb3ae5 100644 --- a/src/components/ConversationTimeline.tsx +++ b/src/components/ConversationTimeline.tsx @@ -262,330 +262,327 @@ export function ConversationTimeline({ } return ( - - - -
- - Conversation Timeline -
-
- - {statusLabels[debt.status]} - - - Round {debt.negotiation_round || 1} - -
-
-
- - {messages.length === 0 ? ( -
- -

No conversation messages yet

-

- Messages will appear here as the negotiation progresses -

-
- ) : ( -
- {messages.map((message, index) => ( -
- {/* Timeline line */} - {index < messages.length - 1 && ( -
- )} + <> + {/* */} + {/* */} +
+
+ +

Conversation Timeline

+
+
+ {/* + {statusLabels[debt.status]} + */} + + Round {debt.negotiation_round || 1} + +
+
+ {/*
*/} + {/*
*/} + {/* */} + {messages.length === 0 ? ( +
+ +

No conversation messages yet

+

+ Messages will appear here as the negotiation progresses +

+
+ ) : ( +
+ {messages.map((message, index) => ( +
+ {/* Timeline line */} + {index < messages.length - 1 && ( +
+ )} -
- {/* Icon */} -
+ {/* Icon */} +
- {getMessageIcon(message)} + > + {getMessageIcon(message)} +
+ + {/* Content */} +
+
+
+

+ {messageTypeLabels[message.message_type] || + message.message_type} +

+ {message.ai_analysis?.sentiment && + getSentimentIcon(message.ai_analysis.sentiment)} +
+
+ + {formatDate(message.created_at)} +
- {/* Content */} -
-
-
-

- {messageTypeLabels[message.message_type] || - message.message_type} -

- {message.ai_analysis?.sentiment && - getSentimentIcon(message.ai_analysis.sentiment)} -
-
- - {formatDate(message.created_at)} -
-
- -
- {message.direction === "outbound" ? ( - <> - - You → {message.to_email} - - ) : ( - <> - - {message.from_email} → You - - )} -
- - {message.subject && ( -

- Subject: {message.subject} -

+
+ {message.direction === "outbound" ? ( + <> + + You → {message.to_email} + + ) : ( + <> + + {message.from_email} → You + )} +
-
-

- {message.body.length > 200 - ? `${message.body.substring(0, 200)}...` - : message.body} -

-
+ {message.subject && ( +

+ Subject: {message.subject} +

+ )} - {/* AI Analysis */} - {message.ai_analysis && ( -
- {message.ai_analysis.intent && ( -
- - Intent: {message.ai_analysis.intent} - - {message.ai_analysis.confidence && ( - - {Math.round( - message.ai_analysis.confidence * 100 - )} - % confidence - - )} -
- )} +
+

+ {message.body.length > 200 + ? `${message.body.substring(0, 200)}...` + : message.body} +

+
- {!!message.ai_analysis.extractedTerms - ?.proposedAmount && ( -
- Proposed Amount: $ - {formatCurrency( - message.ai_analysis.extractedTerms.proposedAmount - )} -
- )} + {/* AI Analysis */} + {message.ai_analysis && ( +
+ {message.ai_analysis.intent && ( +
+ + Intent: {message.ai_analysis.intent} + + {message.ai_analysis.confidence && ( + + {Math.round(message.ai_analysis.confidence * 100)} + % confidence + + )} +
+ )} - {/* Show financial outcome for accepted offers */} - {message.ai_analysis.intent === "acceptance" && - debt.metadata?.financialOutcome && ( -
- {debt.metadata.financialOutcome.financialBenefit - ?.type === "principal_reduction" ? ( - <> -
- - - Principal Reduction Achieved + {!!message.ai_analysis.extractedTerms?.proposedAmount && ( +
+ Proposed Amount: $ + {formatCurrency( + message.ai_analysis.extractedTerms.proposedAmount + )} +
+ )} + + {/* Show financial outcome for accepted offers */} + {message.ai_analysis.intent === "acceptance" && + debt.metadata?.financialOutcome && ( +
+ {debt.metadata.financialOutcome.financialBenefit + ?.type === "principal_reduction" ? ( + <> +
+ + + Principal Reduction Achieved + +
+
+
+ + Original Debt: -
-
-
- - Original Debt: - -
- $ - { - debt.metadata.financialOutcome - .originalAmount - } -
-
-
- - Settlement Amount: - -
- $ - { - debt.metadata.financialOutcome - .acceptedAmount - } -
-
-
- - Total Savings: - -
- $ - { - debt.metadata.financialOutcome - .actualSavings - } -
-
-
- - Reduction: - -
- { - debt.metadata.financialOutcome - .financialBenefit.percentage - } - % -
+
+ $ + { + debt.metadata.financialOutcome + .originalAmount + }
- - ) : debt.metadata.financialOutcome - .financialBenefit?.type === - "payment_restructuring" ? ( - <> -
- - - Payment Plan Restructured +
+ + Settlement Amount: +
+ $ + { + debt.metadata.financialOutcome + .acceptedAmount + } +
-
-
-
- { - debt.metadata.financialOutcome - .financialBenefit.description - } -
- {debt.metadata.financialOutcome - .financialBenefit.cashFlowBenefit && ( -
- 💰{" "} - { - debt.metadata.financialOutcome - .financialBenefit.cashFlowBenefit - } -
- )} +
+ + Total Savings: + +
+ $ + { + debt.metadata.financialOutcome + .actualSavings + } +
+
+
+ + Reduction: + +
+ { + debt.metadata.financialOutcome + .financialBenefit.percentage + } + % +
+
+
+ + ) : debt.metadata.financialOutcome.financialBenefit + ?.type === "payment_restructuring" ? ( + <> +
+ + + Payment Plan Restructured + +
+
+
+
+ { + debt.metadata.financialOutcome + .financialBenefit.description + }
{debt.metadata.financialOutcome - .paymentStructure && ( -
-
- - Monthly Payment: - -
- $ - { - debt.metadata.financialOutcome - .paymentStructure.monthlyAmount - } -
-
-
- - Term Length: - -
- { - debt.metadata.financialOutcome - .paymentStructure - .numberOfPayments - }{" "} - months -
-
-
- - Total Amount: - -
- $ - {formatCurrency( - debt.metadata.financialOutcome - .paymentStructure.totalAmount - )} -
-
-
- - Frequency: - -
- { - debt.metadata.financialOutcome - .paymentStructure.frequency - } -
-
+ .financialBenefit.cashFlowBenefit && ( +
+ 💰{" "} + { + debt.metadata.financialOutcome + .financialBenefit.cashFlowBenefit + }
)}
- - ) : ( - <> -
- - - Offer Accepted - -
-
- Settlement terms have been agreed upon. -
- - )} -
- )} -
- )} -
+ {debt.metadata.financialOutcome + .paymentStructure && ( +
+
+ + Monthly Payment: + +
+ $ + { + debt.metadata.financialOutcome + .paymentStructure.monthlyAmount + } +
+
+
+ + Term Length: + +
+ { + debt.metadata.financialOutcome + .paymentStructure.numberOfPayments + }{" "} + months +
+
+
+ + Total Amount: + +
+ $ + {formatCurrency( + debt.metadata.financialOutcome + .paymentStructure.totalAmount + )} +
+
+
+ + Frequency: + +
+ { + debt.metadata.financialOutcome + .paymentStructure.frequency + } +
+
+
+ )} +
+ + ) : ( + <> +
+ + + Offer Accepted + +
+
+ Settlement terms have been agreed upon. +
+ + )} +
+ )} +
+ )}
- ))} -
- )} - - - - {/* Summary */} -
-
-
- - Total Messages: {messages.length} - - - Negotiation Round: {debt.negotiation_round || 1} -
- {debt.last_message_at && ( - - Last Activity: {formatDate(debt.last_message_at)} - - )} -
+ ))}
- - + )} + + + + {/* Summary */} +
+
+
+ + Total Messages: {messages.length} + + + Negotiation Round: {debt.negotiation_round || 1} + +
+ {debt.last_message_at && ( + + Last Activity: {formatDate(debt.last_message_at)} + + )} +
+
+ {/* */} + ); }