From d017834b8c8a8e1887353ebb775004e47cba6c12 Mon Sep 17 00:00:00 2001 From: Helena <37183360+helenarebane@users.noreply.github.com> Date: Mon, 25 Aug 2025 16:49:04 +0300 Subject: [PATCH] MED-90: improve doctor analysis detail view (#57) * add doctor jobs view * change translation * another translation change * clean up * add analaysis detail view to paths config * translation * merge fix * fix path * MED-90: improve doctor analysis detail view * add key --- app/doctor/_components/analysis-view.tsx | 108 +++++++++++------ .../_components/doctor-analysis-wrapper.tsx | 103 +++++++++++++++++ app/doctor/_components/doctor-job-select.tsx | 108 +++++++++++++++++ app/doctor/_components/doctor-sidebar.tsx | 13 +-- app/doctor/_components/results-table.tsx | 98 +--------------- app/doctor/analysis/[id]/page.tsx | 1 + .../analysis-results/_components/analysis.tsx | 109 ++++++++++-------- lib/services/medipost.service.ts | 1 + .../server/actions/doctor-server-actions.ts | 8 +- .../doctor-analysis-detail-view.schema.ts | 21 ++++ .../server/schema/doctor-analysis.schema.ts | 5 +- .../services/doctor-analysis.service.ts | 61 +++++++++- .../shared/src/components/ui/info-tooltip.tsx | 2 +- packages/supabase/src/database.types.ts | 23 +++- public/locales/en/common.json | 3 +- public/locales/en/doctor.json | 19 +-- public/locales/et/common.json | 3 +- public/locales/et/doctor.json | 15 ++- public/locales/ru/common.json | 3 +- public/locales/ru/doctor.json | 17 +-- ...d_comment_to_analysis_response_element.sql | 2 + 21 files changed, 499 insertions(+), 224 deletions(-) create mode 100644 app/doctor/_components/doctor-analysis-wrapper.tsx create mode 100644 app/doctor/_components/doctor-job-select.tsx create mode 100644 supabase/migrations/20250821134556_add_comment_to_analysis_response_element.sql diff --git a/app/doctor/_components/analysis-view.tsx b/app/doctor/_components/analysis-view.tsx index 2d43d7f..762c4bd 100644 --- a/app/doctor/_components/analysis-view.tsx +++ b/app/doctor/_components/analysis-view.tsx @@ -19,7 +19,7 @@ import { } from '@kit/doctor/schema/doctor-analysis-detail-view.schema'; import { DoctorAnalysisFeedbackForm, - doctorAnalysisFeedbackSchema, + doctorAnalysisFeedbackFormSchema, } from '@kit/doctor/schema/doctor-analysis.schema'; import ConfirmationModal from '@kit/shared/components/confirmation-modal'; import { getFullName } from '@kit/shared/utils'; @@ -36,9 +36,11 @@ import { toast } from '@kit/ui/sonner'; import { Textarea } from '@kit/ui/textarea'; import { Trans } from '@kit/ui/trans'; -import Analysis from '~/home/(user)/(dashboard)/analysis-results/_components/analysis'; import { bmiFromMetric } from '~/lib/utils'; +import DoctorAnalysisWrapper from './doctor-analysis-wrapper'; +import DoctorJobSelect from './doctor-job-select'; + export default function AnalysisView({ patient, order, @@ -54,16 +56,20 @@ export default function AnalysisView({ const { data: user } = useUser(); - const isInProgress = + const isInProgress = !!( !!feedback?.status && feedback?.doctor_user_id && - feedback?.status !== 'COMPLETED'; + feedback?.status !== 'COMPLETED' + ); + const isCurrentDoctorJob = + !!feedback?.doctor_user_id && feedback?.doctor_user_id === user?.id; const isReadOnly = !isInProgress || (!!feedback?.doctor_user_id && feedback?.doctor_user_id !== user?.id); const form = useForm({ - resolver: zodResolver(doctorAnalysisFeedbackSchema), + resolver: zodResolver(doctorAnalysisFeedbackFormSchema), + reValidateMode: 'onChange', defaultValues: { feedbackValue: feedback?.value ?? '', userId: patient.userId, @@ -103,12 +109,22 @@ export default function AnalysisView({ } }; - const handleDraftSubmit = () => { + const handleDraftSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + form.formState.errors.feedbackValue = undefined; const formData = form.getValues(); onSubmit(formData, 'DRAFT'); }; - const handleCompleteSubmit = () => { + const handleCompleteSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + const isValid = await form.trigger(); + if (!isValid) { + return; + } + setIsConfirmOpen(true); }; @@ -119,16 +135,31 @@ export default function AnalysisView({ return ( <> -
{feedback?.value ?? '-'}
- {!isReadOnly && (