import React, { useEffect, useState } from "react";
import useSWRImmutable from "swr";
import { ConfigurableLink, openmrsFetch } from "@openmrs/esm-framework";
import dayjs from "dayjs";
import capitalize from "lodash/capitalize";
import { OverflowMenu } from "@carbon/react";
import {
AddPatientToListOverflowMenuItem,
FhirPatientResponse,
} from "@ohri/openmrs-esm-ohri-commons-lib";
export function usePatientList(
offSet: number,
pageSize: number,
searchTerm?: string
) {
const url = `/ws/fhir2/R4/Patient?_getpagesoffset=${offSet}&_count=${pageSize}${
searchTerm ? `&name=${searchTerm}` : ""
}&_summary=data`;
const [paginatedPatientRows, setPaginatedPatientRows] = useState([]);
const [totalCount, setTotalCount] = useState(0);
const { data, error, isLoading } = useSWRImmutable<
{ data: FhirPatientResponse },
Error
>(url, openmrsFetch);
useEffect(() => {
if (data) {
const patientRows = data.data?.entry?.map((patient) => {
const patientName =
patient.resource.name[0].given.join(" ") +
" " +
patient.resource.name[0].family;
const getPatientLink = () => {
return (
{patientName}
);
};
const patientActions = (
);
return {
id: patient.resource.id,
name: patientName,
patientLink: getPatientLink(),
gender: capitalize(patient.resource.gender),
birthDate: patient.resource.birthDate,
age:
dayjs().diff(dayjs(patient.resource.birthDate), "year") + " years",
actions: patientActions,
};
});
setTotalCount(data?.data.total);
setPaginatedPatientRows(patientRows);
}
}, [data]);
return {
patients: paginatedPatientRows,
error,
isLoading: isLoading || !data,
total: totalCount,
};
}