@@ -16,92 +16,65 @@ import { FeedbackExplanationModal } from "./FeedbackExplanationModal";
1616import { RatingFeedback } from "./RatingFeedback" ;
1717import { ThumbsFeedback } from "./ThumbsFeedback" ;
1818
19+ import type { FeedbackData , FeedbackSubmission } from "@/types/Feedback" ;
1920import type { FeedbackConfig } from "@/types/FlowMetadata" ;
2021
2122interface FeedbackButtonProps {
2223 feedbackConfig : FeedbackConfig ;
2324 spanId : string ;
2425 traceId : string ;
25- telemetryEnabled : boolean ;
2626}
2727
2828export function FeedbackButton ( {
2929 feedbackConfig,
3030 spanId,
3131 traceId,
32- telemetryEnabled,
3332} : FeedbackButtonProps ) {
3433 const [ submitted , setSubmitted ] = useState ( false ) ;
3534 const [ isSubmitting , setIsSubmitting ] = useState ( false ) ;
3635 const [ error , setError ] = useState < string | null > ( null ) ;
3736 const [ showExplanation , setShowExplanation ] = useState ( false ) ;
38- const [ pendingFeedback , setPendingFeedback ] = useState < {
39- type : "thumbs" | "rating" | "category" ;
40- value ?: boolean ;
41- score ?: number ;
42- categories ?: string [ ] ;
43- } | null > ( null ) ;
44-
45- if ( ! telemetryEnabled ) {
46- return null ; // Don't show feedback if telemetry is not enabled
47- }
37+ const [ pendingFeedback , setPendingFeedback ] = useState < FeedbackData | null > (
38+ null ,
39+ ) ;
4840
4941 if ( submitted ) {
5042 return (
51- < div className = "flex items-center gap-2 text-sm text-green-600 " >
52- < Check className = "h-4 w-4" />
43+ < div className = "flex items-center gap-2 text-sm text-muted-foreground " >
44+ < Check className = "h-4 w-4 text-primary " />
5345 < span > Feedback submitted</ span >
5446 </ div >
5547 ) ;
5648 }
5749
5850 if ( isSubmitting ) {
5951 return (
60- < div className = "flex items-center gap-2 text-sm text-gray-500 " >
52+ < div className = "flex items-center gap-2 text-sm text-muted-foreground " >
6153 < Loader2 className = "h-4 w-4 animate-spin" />
6254 < span > Submitting...</ span >
6355 </ div >
6456 ) ;
6557 }
6658
6759 const handleFeedbackSubmit = async (
68- feedback : {
69- type : "thumbs" | "rating" | "category" ;
70- value ?: boolean ;
71- score ?: number ;
72- categories ?: string [ ] ;
73- } ,
60+ feedback : FeedbackData ,
7461 explanation ?: string ,
7562 ) => {
7663 setIsSubmitting ( true ) ;
7764 setError ( null ) ;
7865
7966 try {
80- // Construct feedback data based on type
81- let feedbackData :
82- | { type : "thumbs" ; value : boolean ; explanation ?: string }
83- | { type : "rating" ; score : number ; explanation ?: string }
84- | { type : "category" ; categories : string [ ] ; explanation ?: string } ;
85-
86- if ( feedback . type === "thumbs" && feedback . value !== undefined ) {
87- feedbackData = { type : "thumbs" , value : feedback . value , explanation } ;
88- } else if ( feedback . type === "rating" && feedback . score !== undefined ) {
89- feedbackData = { type : "rating" , score : feedback . score , explanation } ;
90- } else if ( feedback . type === "category" && feedback . categories ) {
91- feedbackData = {
92- type : "category" ,
93- categories : feedback . categories ,
94- explanation,
95- } ;
96- } else {
97- throw new Error ( "Invalid feedback data" ) ;
98- }
99-
100- await apiClient . submitFeedback ( {
67+ const feedbackWithExplanation : FeedbackData = explanation
68+ ? { ...feedback , explanation }
69+ : feedback ;
70+
71+ const submission : FeedbackSubmission = {
10172 span_id : spanId ,
10273 trace_id : traceId ,
103- feedback : feedbackData ,
104- } ) ;
74+ feedback : feedbackWithExplanation ,
75+ } ;
76+
77+ await apiClient . submitFeedback ( submission ) ;
10578
10679 setSubmitted ( true ) ;
10780 setPendingFeedback ( null ) ;
@@ -117,12 +90,7 @@ export function FeedbackButton({
11790 }
11891 } ;
11992
120- const handleFeedbackClick = ( feedback : {
121- type : "thumbs" | "rating" | "category" ;
122- value ?: boolean ;
123- score ?: number ;
124- categories ?: string [ ] ;
125- } ) => {
93+ const handleFeedbackClick = ( feedback : FeedbackData ) => {
12694 // If explanation is enabled, show modal first
12795 if ( feedbackConfig . explanation ) {
12896 setPendingFeedback ( feedback ) ;
@@ -154,7 +122,7 @@ export function FeedbackButton({
154122 ) }
155123 </ div >
156124
157- { error && < div className = "text-sm text-red-600 " > { error } </ div > }
125+ { error && < div className = "text-sm text-destructive " > { error } </ div > }
158126
159127 { showExplanation && pendingFeedback && (
160128 < FeedbackExplanationModal
0 commit comments