diff --git a/app/doctor/_components/analysis-fallback.tsx b/app/doctor/_components/analysis-fallback.tsx new file mode 100644 index 0000000..9431ad7 --- /dev/null +++ b/app/doctor/_components/analysis-fallback.tsx @@ -0,0 +1,27 @@ +'use server'; + +import React from 'react'; + +import { Spinner } from '@kit/ui/makerkit/spinner'; +import { Trans } from '@kit/ui/makerkit/trans'; +import { Progress } from '@kit/ui/shadcn/progress'; + +import { withI18n } from '~/lib/i18n/with-i18n'; + +const AnalysisFallback = ({ + progress, + progressTextKey, +}: { + progress: number; + progressTextKey: string; +}) => { + return ( +
+ + + +
+ ); +}; + +export default withI18n(AnalysisFallback); diff --git a/app/doctor/_components/analysis-feedback.tsx b/app/doctor/_components/analysis-feedback.tsx index c1d4c54..df0a234 100644 --- a/app/doctor/_components/analysis-feedback.tsx +++ b/app/doctor/_components/analysis-feedback.tsx @@ -16,6 +16,7 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useQueryClient } from '@tanstack/react-query'; import { useForm } from 'react-hook-form'; +import { Spinner } from '@kit/ui/makerkit/spinner'; import { Trans } from '@kit/ui/makerkit/trans'; import { Button } from '@kit/ui/shadcn/button'; import { @@ -32,12 +33,21 @@ const AnalysisFeedback = ({ feedback, patient, order, + aiDoctorFeedback, + timestamp, + recommendations, + isRecommendationsEdited, }: { feedback?: DoctorFeedback; patient: Patient; order: Order; + aiDoctorFeedback?: string; + timestamp?: string; + recommendations: string[]; + isRecommendationsEdited: boolean; }) => { const [isDraftSubmitting, setIsDraftSubmitting] = useState(false); + const [isSubmittingFeedback, setIsSubmittingFeedback] = useState(false); const [isConfirmOpen, setIsConfirmOpen] = useState(false); const { data: user } = useUser(); const queryClient = useQueryClient(); @@ -46,7 +56,7 @@ const AnalysisFeedback = ({ resolver: zodResolver(doctorAnalysisFeedbackFormSchema), reValidateMode: 'onChange', defaultValues: { - feedbackValue: feedback?.value ?? '', + feedbackValue: feedback?.value ?? aiDoctorFeedback ?? '', userId: patient.userId, }, }); @@ -71,23 +81,30 @@ const AnalysisFeedback = ({ data: DoctorAnalysisFeedbackForm, status: 'DRAFT' | 'COMPLETED', ) => { + setIsConfirmOpen(false); + setIsSubmittingFeedback(true); + const result = await giveFeedbackAction({ ...data, analysisOrderId: order.analysisOrderId, status, + patientId: patient.userId, + timestamp, + recommendations, + isRecommendationsEdited, }); if (!result.success) { return toast.error(); } + setIsSubmittingFeedback(false); + queryClient.invalidateQueries({ predicate: (query) => query.queryKey.includes('doctor-jobs'), }); - toast.success(); - - return setIsConfirmOpen(false); + return toast.success(); }; const confirmComplete = form.handleSubmit(async (data) => { @@ -96,10 +113,6 @@ const AnalysisFeedback = ({ return ( <> -

- -

-

{feedback?.value ?? '-'}

{!isReadOnly && (
@@ -109,7 +122,11 @@ const AnalysisFeedback = ({ render={({ field }) => ( -