"use client"; import CustomButton from "@/components/customs/custom-button"; import GridColumn from "@/components/layouts/GridColumn"; import FormCustom from "@/components/utils/FormCustom"; import InputForm from "@/components/utils/FormCustom/components/InputForm"; import TextArea from "@/components/utils/FormCustom/components/TextArea"; import { PATH } from "@/constant/config"; import { QUERY_KEY } from "@/constant/config/enum"; import { httpRequest } from "@/services"; import consultationServices, { ConsultationDetail, } from "@/services/consultationServices"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { useParams, useRouter, useSearchParams } from "next/navigation"; import React, { useEffect, useState } from "react"; const UpdateSpecialtyClinicId = () => { const router = useRouter(); const params = useParams(); const searchParams = useSearchParams(); const queryClient = useQueryClient(); const consultationId = searchParams.get("_id") || ""; const specialtyClinicId = searchParams.get("specialtyClinicId") || ""; const [form, setForm] = useState<{ specialtyAssignmentId: string; specialtyNotes: string; diagnosis: string; procedureNotes: string; glassRequired: boolean; glassType: string; }>({ specialtyAssignmentId: "", specialtyNotes: "", diagnosis: "", procedureNotes: "", glassRequired: false, glassType: "", }); /* ========================= GET DETAIL API ========================= */ const consulDetailQuery = useQuery({ queryKey: [QUERY_KEY.chi_tiet_phien_kham, consultationId], enabled: !!consultationId, queryFn: async () => { const res = await httpRequest({ showMessageFailed: true, http: consultationServices.detailConsultations(consultationId), }); return ( res || { id: "", patientId: "", sessionCode: "", visitDate: "", status: 1, chiefComplaint: null, symptomsText: null, vitalSigns: null, diagnosis: null, treatmentPlan: null, doctorNotes: null, createdBy: "", isDeleted: false, specialtyClinics: [ { id: "", specialtyId: "", specialtyName: "", specialtyNotes: null, diagnosis: null, procedureNotes: null, glassRequired: null, glassType: null, examinerName: "", specialtyStatus: 1, sharedItems: [], }, ], aggregatedPrescriptionItems: [], } ); }, }); // Tìm chuyên khoa hiện tại từ data trả về const selectedSpecialtyClinic = consulDetailQuery.data?.specialtyClinics?.find( (item) => item.id === specialtyClinicId, ); /** * ĐIỀU KIỆN KIỂM TRA KHOA MẮT * Bạn hãy thay đổi điều kiện này tùy thuộc vào database của bạn. * Ví dụ: selectedSpecialtyClinic?.specialtyId === "MẮT" hoặc kiểm tra theo tên. */ const isEyeClinic = selectedSpecialtyClinic?.specialtyName?.toLowerCase().includes("mắt") || selectedSpecialtyClinic?.specialtyId?.toLowerCase().includes("mat"); useEffect(() => { const consul = consulDetailQuery.data; if (!consul) return; const specialtyClinic = consul.specialtyClinics?.find( (item) => item.id === specialtyClinicId, ); if (!specialtyClinic) return; setForm({ specialtyAssignmentId: specialtyClinic.id || "", specialtyNotes: specialtyClinic.specialtyNotes || "", diagnosis: specialtyClinic.diagnosis || "", procedureNotes: specialtyClinic.procedureNotes || "", glassRequired: specialtyClinic.glassRequired || false, glassType: specialtyClinic.glassType || "", }); }, [consulDetailQuery.data, specialtyClinicId]); /* ========================= UPDATE MUTATION ========================= */ const specialtyResultsMutation = useMutation({ mutationFn: async () => { if (!consultationId) { throw new Error("Không tìm thấy ID phiên khám!"); } return httpRequest({ showMessageFailed: true, showMessageSuccess: true, msgSuccess: "Cập nhật phiên khám thành công!", http: consultationServices.specialtyResults( form.specialtyAssignmentId, { specialtyNotes: form.specialtyNotes, diagnosis: form.diagnosis, procedureNotes: form.procedureNotes, // Nếu không phải khoa mắt, gán mặc định false và chuỗi rỗng khi gửi API glassRequired: isEyeClinic ? form.glassRequired : false, glassType: isEyeClinic ? form.glassType : "", }, ), }); }, onSuccess(data) { if (!data) return; queryClient.invalidateQueries({ queryKey: [QUERY_KEY.table_list_consultation], }); queryClient.invalidateQueries({ queryKey: [QUERY_KEY.chi_tiet_phien_kham, consultationId], }); router.back(); router.push(PATH.CONSULTATION || "/consultation"); }, }); const handleSubmit = () => { specialtyResultsMutation.mutate(); }; const isLoading = consulDetailQuery.isLoading || specialtyResultsMutation.isPending; if (consulDetailQuery.isLoading) { return (
Đang tải dữ liệu phiên khám...
); } return (
{/* HEADER */}

Phiên khám chuyên khoa

Cập nhật kết quả chi tiết quá trình khám bệnh của bệnh nhân

{/* CHUYÊN KHOA INFO */} {/* KHỐI THÔNG TIN KHÁM CHUNG (Luôn cố định 3 cột đẹp mắt) */}

Thông tin khám chung

setForm((prev) => ({ ...prev, specialtyNotes: String(v) })) } /> setForm((prev) => ({ ...prev, diagnosis: String(v) })) } /> setForm((prev) => ({ ...prev, procedureNotes: String(v) })) } />
{/* KHỐI THÔNG TIN KHÁM MẮT (Chỉ hiển thị khi là khoa mắt) */} {isEyeClinic && (

Chỉ định thị lực (Khoa Mắt)

{/* Radio Chọn Có/Không */}
{/* TextArea Loại Kính (Trải rộng ra 100% dòng tạo cảm giác thoáng đãng) */} {form.glassRequired && (