{encounter.care_team.length === 0 ? (
-
+
) : (
encounter.care_team.map((member, index) => (
void;
placeholder?: string;
disabled?: boolean;
diff --git a/src/components/Common/Charts/ObservationChart.tsx b/src/components/Common/Charts/ObservationChart.tsx
index 96ea6ee7e1c..e18223c70ca 100644
--- a/src/components/Common/Charts/ObservationChart.tsx
+++ b/src/components/Common/Charts/ObservationChart.tsx
@@ -349,8 +349,7 @@ export const ObservationVisualizer = ({
.map((code) => {
if (!code.display) return null;
const details = row[`${code.display}_details`] as
- | ObservationDetails
- | undefined;
+ ObservationDetails | undefined;
if (!details) return null;
return {
code,
diff --git a/src/components/Common/ContactLink.tsx b/src/components/Common/ContactLink.tsx
index 64d62e673ea..e6043b4e47b 100644
--- a/src/components/Common/ContactLink.tsx
+++ b/src/components/Common/ContactLink.tsx
@@ -1,8 +1,7 @@
import CareIcon from "@/CAREUI/icons/CareIcon";
type ContactLinkProps =
- | { mailto: string; tel?: undefined }
- | { mailto?: undefined; tel: string };
+ { mailto: string; tel?: undefined } | { mailto?: undefined; tel: string };
export default function ContactLink(props: ContactLinkProps) {
return (
diff --git a/src/components/Common/LanguageSelector.tsx b/src/components/Common/LanguageSelector.tsx
index ca079a496d9..778d0614508 100644
--- a/src/components/Common/LanguageSelector.tsx
+++ b/src/components/Common/LanguageSelector.tsx
@@ -13,7 +13,7 @@ import {
import { keysOf } from "@/Utils/utils";
import { LANGUAGES } from "@/i18n";
-export const LanguageSelector = () => {
+const LanguageSelector = () => {
const { t, i18n } = useTranslation();
useEffect(() => {
diff --git a/src/components/Common/LanguageSelectorLogin.tsx b/src/components/Common/LanguageSelectorLogin.tsx
index 11423fabdb8..629633621e0 100644
--- a/src/components/Common/LanguageSelectorLogin.tsx
+++ b/src/components/Common/LanguageSelectorLogin.tsx
@@ -7,7 +7,7 @@ import { cn } from "@/lib/utils";
import { keysOf } from "@/Utils/utils";
import { LANGUAGES } from "@/i18n";
-export const LanguageSelectorLogin = () => {
+const LanguageSelectorLogin = () => {
const { i18n, t } = useTranslation();
useEffect(() => {
document.documentElement.setAttribute("lang", i18n.language);
diff --git a/src/components/Common/PDFViewer.tsx b/src/components/Common/PDFViewer.tsx
index d9c527004ca..540216df69b 100644
--- a/src/components/Common/PDFViewer.tsx
+++ b/src/components/Common/PDFViewer.tsx
@@ -1,8 +1,8 @@
-import { Document, Page, pdfjs } from "react-pdf";
-import "react-pdf/dist/esm/Page/AnnotationLayer.css";
-import "react-pdf/dist/esm/Page/TextLayer.css";
+import { Document, Page } from "react-pdf";
+import "react-pdf/dist/Page/AnnotationLayer.css";
+import "react-pdf/dist/Page/TextLayer.css";
-pdfjs.GlobalWorkerOptions.workerSrc = "/pdf.worker.min.mjs";
+import "@/lib/pdfWorker";
export default function PDFViewer(
props: Readonly<{
diff --git a/src/components/Common/PageHeadTitle.tsx b/src/components/Common/PageHeadTitle.tsx
index 574625cfe02..98d08821937 100644
--- a/src/components/Common/PageHeadTitle.tsx
+++ b/src/components/Common/PageHeadTitle.tsx
@@ -4,7 +4,7 @@ export interface IPageTitleProps {
title: string;
}
-export default function PageTitle({ title }: IPageTitleProps) {
+export default function PageHeadTitle({ title }: IPageTitleProps) {
useEffect(() => {
const prevTitle = document.title;
if (title) {
diff --git a/src/components/Common/PasswordDialog.tsx b/src/components/Common/PasswordDialog.tsx
index d4e634db434..ced73b6c4ee 100644
--- a/src/components/Common/PasswordDialog.tsx
+++ b/src/components/Common/PasswordDialog.tsx
@@ -44,7 +44,7 @@ export function PasswordDialog({
const { t } = useTranslation();
const [password, setPassword] = useState("");
- const handleSubmit = (e: React.FormEvent) => {
+ const handleSubmit = (e: React.SubmitEvent) => {
e.preventDefault();
onSubmit(password);
};
diff --git a/src/components/Common/PinPageDialog.tsx b/src/components/Common/PinPageDialog.tsx
index 59aae35c9cd..03f0cb50e00 100644
--- a/src/components/Common/PinPageDialog.tsx
+++ b/src/components/Common/PinPageDialog.tsx
@@ -24,7 +24,7 @@ interface PinPageDialogProps {
url?: string;
}
-export function PinPageDialog({ url }: PinPageDialogProps) {
+function PinPageDialog({ url }: PinPageDialogProps) {
const { t } = useTranslation();
const [open, onOpenChange] = useState(false);
const {
diff --git a/src/components/Common/PrintFooter.tsx b/src/components/Common/PrintFooter.tsx
index 91bd567b9e2..e1ed9bbbe9b 100644
--- a/src/components/Common/PrintFooter.tsx
+++ b/src/components/Common/PrintFooter.tsx
@@ -34,7 +34,7 @@ interface PrintFooterProps {
className?: string;
}
-export function PrintFooter({
+function PrintFooter({
leftContent,
rightContent,
showPreparedBy = false,
diff --git a/src/components/Common/ResourceCategoryForm.tsx b/src/components/Common/ResourceCategoryForm.tsx
index 79dbaacd2a7..0aed987fea7 100644
--- a/src/components/Common/ResourceCategoryForm.tsx
+++ b/src/components/Common/ResourceCategoryForm.tsx
@@ -74,7 +74,7 @@ export function ResourceCategoryForm({
.min(5, t("character_count_validation", { min: 5, max: 25 }))
.max(25, t("character_count_validation", { min: 5, max: 25 })),
description: z.string().optional(),
- resource_sub_type: z.nativeEnum(ResourceCategorySubType),
+ resource_sub_type: z.enum(ResourceCategorySubType),
});
const form = useForm>({
diff --git a/src/components/Common/ResourceSubTypePicker.tsx b/src/components/Common/ResourceSubTypePicker.tsx
index 6fc5d803e33..59a4a0abe2a 100644
--- a/src/components/Common/ResourceSubTypePicker.tsx
+++ b/src/components/Common/ResourceSubTypePicker.tsx
@@ -223,5 +223,3 @@ export function ResourceSubTypePicker({
);
}
-
-export default ResourceSubTypePicker;
diff --git a/src/components/Consent/ConsentFormSheet.tsx b/src/components/Consent/ConsentFormSheet.tsx
index fd7aa6d0c41..084c5895d52 100644
--- a/src/components/Consent/ConsentFormSheet.tsx
+++ b/src/components/Consent/ConsentFormSheet.tsx
@@ -97,7 +97,7 @@ const consentFormSchema = (isEdit: boolean) =>
data.period.start > data.period.end
) {
ctx.addIssue({
- code: z.ZodIssueCode.custom,
+ code: "custom",
message: t("valid_from_after_valid_untill"),
path: ["period.end"],
});
@@ -108,7 +108,7 @@ const consentFormSchema = (isEdit: boolean) =>
new Date(data.period.start) < new Date(data.date)
) {
ctx.addIssue({
- code: z.ZodIssueCode.custom,
+ code: "custom",
message: t("consent_period_start_before_consent_date_validation"),
path: ["period.start"],
});
diff --git a/src/components/Consumable/DispenseDrawer.tsx b/src/components/Consumable/DispenseDrawer.tsx
index 9ffc1fa7b1c..f75ece7e030 100644
--- a/src/components/Consumable/DispenseDrawer.tsx
+++ b/src/components/Consumable/DispenseDrawer.tsx
@@ -12,7 +12,6 @@ import { z } from "zod";
import { CaretSortIcon } from "@radix-ui/react-icons";
import useCurrentFacility from "@/pages/Facility/utils/useCurrentFacility";
-import batchApi from "@/types/base/batch/batchApi";
import {
ChargeItemBatchResponse,
ChargeItemRead,
@@ -27,6 +26,7 @@ import { InventoryRead } from "@/types/inventory/product/inventory";
import inventoryApi from "@/types/inventory/product/inventoryApi";
import { ProductKnowledgeBase } from "@/types/inventory/productKnowledge/productKnowledge";
import { LocationRead } from "@/types/location/location";
+import { BatchRequestObject, useBatchRequest } from "@/Utils/request/batch";
import mutate from "@/Utils/request/mutate";
import query from "@/Utils/request/query";
@@ -77,6 +77,7 @@ import {
extractDispenseOrderFromBatchResponse,
} from "@/types/emr/dispenseOrder/dispenseOrder";
import dispenseOrderApi from "@/types/emr/dispenseOrder/dispenseOrderApi";
+import medicationDispenseApi from "@/types/emr/medicationDispense/medicationDispenseApi";
import {
isGreaterThan,
isLessThanOrEqual,
@@ -116,7 +117,7 @@ const createFormSchema = () =>
z.object({
items: z.array(
z.object({
- reference_id: z.string().uuid(),
+ reference_id: z.uuid(),
productKnowledge: z.any(),
quantity: zodDecimal({ min: 1 }),
lots: z.array(
@@ -272,8 +273,7 @@ export default function DispenseDrawer({
})({ status }),
});
- const { mutate: dispense, isPending } = useMutation({
- mutationFn: mutate(batchApi.batchRequest),
+ const { mutate: dispense, isPending } = useBatchRequest({
onSuccess: (response) => {
toast.success(t("items_dispensed_successfully"));
queryClient.invalidateQueries({
@@ -436,12 +436,7 @@ export default function DispenseDrawer({
const createDispenseRequests = useCallback(
(items: FormItemType[]) => {
- const requests: Array<{
- url: string;
- method: string;
- reference_id: string;
- body: MedicationDispenseCreate;
- }> = [];
+ const requests: BatchRequestObject
[] = [];
items.forEach((item) => {
const productKnowledge = item.productKnowledge;
@@ -480,9 +475,8 @@ export default function DispenseDrawer({
};
requests.push({
- url: `/api/v1/medication/dispense/`,
- method: "POST",
- reference_id: `dispense_${item.reference_id}_lot_${lot.selectedInventoryId}`,
+ api: medicationDispenseApi.create,
+ referenceId: `dispense_${item.reference_id}_lot_${lot.selectedInventoryId}`,
body: dispenseData,
});
});
@@ -511,7 +505,7 @@ export default function DispenseDrawer({
return;
}
- dispense({ requests });
+ dispense(requests);
}, [form, validateFormWithToasts, createDispenseRequests, dispense, t]);
const watchedItems = useWatch({
diff --git a/src/components/Facility/ConsultationDetails/PrintAllQuestionnaireResponses.tsx b/src/components/Facility/ConsultationDetails/PrintAllQuestionnaireResponses.tsx
index 48caa8df2ef..57c121ff4f2 100644
--- a/src/components/Facility/ConsultationDetails/PrintAllQuestionnaireResponses.tsx
+++ b/src/components/Facility/ConsultationDetails/PrintAllQuestionnaireResponses.tsx
@@ -96,7 +96,7 @@ export function PrintAllQuestionnaireResponses({
@@ -113,7 +113,7 @@ export function PrintAllQuestionnaireResponses({
{questionnaireResponses?.results?.map(
(item: QuestionnaireResponse) => (
),
)}
@@ -150,7 +150,7 @@ interface EncounterDetailsProps {
patient?: PatientRead;
}
-export function EncounterDetails({
+export function PrintableEncounterDetails({
encounter,
patient,
}: EncounterDetailsProps) {
@@ -331,7 +331,7 @@ interface ResponseCardProps {
item?: QuestionnaireResponse;
}
-export function ResponseCard({ item }: ResponseCardProps) {
+export function PrintableResponseCard({ item }: ResponseCardProps) {
const { t } = useTranslation();
if (!item) return null;
diff --git a/src/components/Facility/ConsultationDetails/PrintQuestionnaireResponse.tsx b/src/components/Facility/ConsultationDetails/PrintQuestionnaireResponse.tsx
index 9b540edada8..7bb538a3aec 100644
--- a/src/components/Facility/ConsultationDetails/PrintQuestionnaireResponse.tsx
+++ b/src/components/Facility/ConsultationDetails/PrintQuestionnaireResponse.tsx
@@ -4,8 +4,8 @@ import { useTranslation } from "react-i18next";
import PrintPreview from "@/CAREUI/misc/PrintPreview";
import {
- EncounterDetails,
- ResponseCard,
+ PrintableEncounterDetails as EncounterDetails,
+ PrintableResponseCard as ResponseCard,
} from "@/components/Facility/ConsultationDetails/PrintAllQuestionnaireResponses";
import query from "@/Utils/request/query";
diff --git a/src/components/Facility/FacilityHome.tsx b/src/components/Facility/FacilityHome.tsx
index 3c95c99a1f7..e0c174f0315 100644
--- a/src/components/Facility/FacilityHome.tsx
+++ b/src/components/Facility/FacilityHome.tsx
@@ -1,6 +1,6 @@
import careConfig from "@careConfig";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
-import { ChevronDown, Hospital, Printer } from "lucide-react";
+import { ChevronDown, Printer } from "lucide-react";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { formatPhoneNumberIntl } from "react-phone-number-input";
@@ -47,16 +47,6 @@ type Props = {
facilityId: string;
};
-export const getFacilityFeatureIcon = (featureId: number) => {
- const feature = FACILITY_FEATURE_TYPES.find((f) => f.id === featureId);
- if (!feature?.icon) return null;
- return typeof feature.icon === "string" ? (
-
- ) : (
- feature.icon
- );
-};
-
export const FacilityHome = ({ facilityId }: Props) => {
const { t } = useTranslation();
const user = useAuthUser();
diff --git a/src/components/Files/AudioCaptureDialog.tsx b/src/components/Files/AudioCaptureDialog.tsx
index 3fbd62a5d81..bd84c7a2d08 100644
--- a/src/components/Files/AudioCaptureDialog.tsx
+++ b/src/components/Files/AudioCaptureDialog.tsx
@@ -19,10 +19,7 @@ export interface AudioCaptureDialogProps {
export default function AudioCaptureDialog(props: AudioCaptureDialogProps) {
type Status =
- | "RECORDING"
- | "WAITING_TO_RECORD"
- | "PERMISSION_DENIED"
- | "RECORDED";
+ "RECORDING" | "WAITING_TO_RECORD" | "PERMISSION_DENIED" | "RECORDED";
const { show, onHide, onCapture, autoRecord = false } = props;
const [status, setStatus] = useState