diff --git a/app/api/job/handler/sync-analysis-groups.ts b/app/api/job/handler/sync-analysis-groups.ts index c037378..515e91b 100644 --- a/app/api/job/handler/sync-analysis-groups.ts +++ b/app/api/job/handler/sync-analysis-groups.ts @@ -41,7 +41,7 @@ export default async function syncAnalysisGroups() { try { console.info('Getting latest public message id'); - const lastCheckedDate = await getLastCheckedDate(); + // const lastCheckedDate = await getLastCheckedDate(); never used? const latestMessage = await getLatestPublicMessageListItem(); if (!latestMessage) { diff --git a/app/api/job/handler/sync-connected-online.ts b/app/api/job/handler/sync-connected-online.ts index 80e89c9..2255479 100644 --- a/app/api/job/handler/sync-connected-online.ts +++ b/app/api/job/handler/sync-connected-online.ts @@ -81,21 +81,19 @@ export default async function syncConnectedOnline() { }); } - let clinics; - let services; - let serviceProviders; - let jobTitleTranslations; // Filter out "Dentas Demo OÜ" in prod or only sync "Dentas Demo OÜ" in any other environment const isDemoClinic = (clinicId: number) => isProd ? clinicId !== 2 : clinicId === 2; - clinics = responseData.Data.T_Lic.filter(({ ID }) => isDemoClinic(ID)); - services = responseData.Data.T_Service.filter(({ ClinicID }) => + const clinics = responseData.Data.T_Lic.filter(({ ID }) => + isDemoClinic(ID), + ); + const services = responseData.Data.T_Service.filter(({ ClinicID }) => isDemoClinic(ClinicID), ); - serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) => + const serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) => isDemoClinic(ClinicID), ); - jobTitleTranslations = createTranslationMap( + const jobTitleTranslations = createTranslationMap( responseData.Data.P_JobTitleTranslations.filter(({ ClinicID }) => isDemoClinic(ClinicID), ), diff --git a/app/api/job/medipost-retry-dispatch/route.ts b/app/api/job/medipost-retry-dispatch/route.ts index 06a2db6..a191998 100644 --- a/app/api/job/medipost-retry-dispatch/route.ts +++ b/app/api/job/medipost-retry-dispatch/route.ts @@ -21,7 +21,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/send-open-jobs-emails/route.ts b/app/api/job/send-open-jobs-emails/route.ts index 9bf4118..0c22957 100644 --- a/app/api/job/send-open-jobs-emails/route.ts +++ b/app/api/job/send-open-jobs-emails/route.ts @@ -14,7 +14,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/sync-analysis-groups-store/route.ts b/app/api/job/sync-analysis-groups-store/route.ts index be54509..1def4a9 100644 --- a/app/api/job/sync-analysis-groups-store/route.ts +++ b/app/api/job/sync-analysis-groups-store/route.ts @@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/sync-analysis-groups/route.ts b/app/api/job/sync-analysis-groups/route.ts index 83cc6d3..cb06e1c 100644 --- a/app/api/job/sync-analysis-groups/route.ts +++ b/app/api/job/sync-analysis-groups/route.ts @@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/sync-analysis-results/route.ts b/app/api/job/sync-analysis-results/route.ts index 392be6a..0f66fbc 100644 --- a/app/api/job/sync-analysis-results/route.ts +++ b/app/api/job/sync-analysis-results/route.ts @@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/sync-connected-online/route.ts b/app/api/job/sync-connected-online/route.ts index 065c8ec..41fb295 100644 --- a/app/api/job/sync-connected-online/route.ts +++ b/app/api/job/sync-connected-online/route.ts @@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/api/job/test-medipost-responses/route.ts b/app/api/job/test-medipost-responses/route.ts index fc1f2e1..0634efd 100644 --- a/app/api/job/test-medipost-responses/route.ts +++ b/app/api/job/test-medipost-responses/route.ts @@ -18,7 +18,7 @@ export async function POST(request: NextRequest) { try { validateApiKey(request); - } catch (e) { + } catch { return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' }); } diff --git a/app/auth/membership-confirmation/layout.tsx b/app/auth/membership-confirmation/layout.tsx index e3d32c7..1360b0f 100644 --- a/app/auth/membership-confirmation/layout.tsx +++ b/app/auth/membership-confirmation/layout.tsx @@ -1,5 +1,3 @@ -import { withI18n } from '~/lib/i18n/with-i18n'; - async function SiteLayout(props: React.PropsWithChildren) { return (
diff --git a/app/auth/update-account/_lib/server/update-account.ts b/app/auth/update-account/_lib/server/update-account.ts index 622787d..2b8b62e 100644 --- a/app/auth/update-account/_lib/server/update-account.ts +++ b/app/auth/update-account/_lib/server/update-account.ts @@ -4,7 +4,6 @@ import { updateCustomer } from '@lib/data/customer'; import { AccountSubmitData, createAuthApi } from '@kit/auth/api'; import { enhanceAction } from '@kit/next/actions'; -import { pathsConfig } from '@kit/shared/config'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { UpdateAccountSchemaServer } from '../schemas/update-account.schema'; diff --git a/app/doctor/_components/analysis-feedback.tsx b/app/doctor/_components/analysis-feedback.tsx new file mode 100644 index 0000000..c1d4c54 --- /dev/null +++ b/app/doctor/_components/analysis-feedback.tsx @@ -0,0 +1,156 @@ +import React, { useState } from 'react'; + +import { giveFeedbackAction } from '@/packages/features/doctor/src/lib/server/actions/doctor-server-actions'; +import { + DoctorFeedback, + Order, + Patient, +} from '@/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema'; +import { + DoctorAnalysisFeedbackForm, + doctorAnalysisFeedbackFormSchema, +} from '@/packages/features/doctor/src/lib/server/schema/doctor-analysis.schema'; +import ConfirmationModal from '@/packages/shared/src/components/confirmation-modal'; +import { useUser } from '@/packages/supabase/src/hooks/use-user'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { useQueryClient } from '@tanstack/react-query'; +import { useForm } from 'react-hook-form'; + +import { Trans } from '@kit/ui/makerkit/trans'; +import { Button } from '@kit/ui/shadcn/button'; +import { + Form, + FormControl, + FormField, + FormItem, + FormMessage, +} from '@kit/ui/shadcn/form'; +import { toast } from '@kit/ui/shadcn/sonner'; +import { Textarea } from '@kit/ui/shadcn/textarea'; + +const AnalysisFeedback = ({ + feedback, + patient, + order, +}: { + feedback?: DoctorFeedback; + patient: Patient; + order: Order; +}) => { + const [isDraftSubmitting, setIsDraftSubmitting] = useState(false); + const [isConfirmOpen, setIsConfirmOpen] = useState(false); + const { data: user } = useUser(); + const queryClient = useQueryClient(); + + const form = useForm({ + resolver: zodResolver(doctorAnalysisFeedbackFormSchema), + reValidateMode: 'onChange', + defaultValues: { + feedbackValue: feedback?.value ?? '', + userId: patient.userId, + }, + }); + + const isReadOnly = + !!feedback?.doctor_user_id && feedback?.doctor_user_id !== user?.id; + + const handleDraftSubmit = async (e: React.FormEvent) => { + setIsDraftSubmitting(true); + e.preventDefault(); + + form.formState.errors.feedbackValue = undefined; + const formData = form.getValues(); + await onSubmit(formData, 'DRAFT'); + setIsDraftSubmitting(false); + }; + const handleCompleteSubmit = form.handleSubmit(async () => { + setIsConfirmOpen(true); + }); + + const onSubmit = async ( + data: DoctorAnalysisFeedbackForm, + status: 'DRAFT' | 'COMPLETED', + ) => { + const result = await giveFeedbackAction({ + ...data, + analysisOrderId: order.analysisOrderId, + status, + }); + + if (!result.success) { + return toast.error(); + } + + queryClient.invalidateQueries({ + predicate: (query) => query.queryKey.includes('doctor-jobs'), + }); + + toast.success(); + + return setIsConfirmOpen(false); + }; + + const confirmComplete = form.handleSubmit(async (data) => { + await onSubmit(data, 'COMPLETED'); + }); + + return ( + <> +

+ +

+

{feedback?.value ?? '-'}

+ {!isReadOnly && ( +
+ + ( + + +