diff --git a/src/queue-list/lab-tests/lab-tests.component.tsx b/src/queue-list/lab-tests/lab-tests.component.tsx index 60d57487..5047ca17 100644 --- a/src/queue-list/lab-tests/lab-tests.component.tsx +++ b/src/queue-list/lab-tests/lab-tests.component.tsx @@ -59,16 +59,11 @@ const LabTests: React.FC = ({ encounter, queueId }) => { }, actions: { content: ( - true} - order={item} - encounter={encounter} - queueId={queueId} - /> + true} order={item} /> ), }, })); - }, [encounter, queueId]); + }, [encounter]); if (!encounter) { return ( diff --git a/src/queue-list/laboratory-patient-list.component.tsx b/src/queue-list/laboratory-patient-list.component.tsx index 702caad5..a84c7c86 100644 --- a/src/queue-list/laboratory-patient-list.component.tsx +++ b/src/queue-list/laboratory-patient-list.component.tsx @@ -21,6 +21,8 @@ import { TableExpandedRow, Tile, Button, + DatePicker, + DatePickerInput, } from "@carbon/react"; import { TrashCan } from "@carbon/react/icons"; @@ -35,48 +37,34 @@ import { useSession, } from "@openmrs/esm-framework"; import styles from "./laboratory-queue.scss"; -import { usePatientQueuesList } from "./laboratory-patient-list.resource"; -import { - formatWaitTime, - getTagColor, - trimVisitNumber, -} from "../utils/functions"; -import LabTests from "./lab-tests/lab-tests.component"; -import { EmptyState } from "@openmrs/esm-patient-common-lib"; - -// type FilterProps = { -// rowIds: Array; -// headers: Array; -// cellsById: any; -// inputValue: string; -// getCellId: (row, key) => string; -// }; +import { getStatusColor } from "../utils/functions"; +import { Result, useGetOrdersWorklist } from "../work-list/work-list.resource"; +import PickLabRequestActionMenu from "./pick-lab-request-menu.component"; interface LaboratoryPatientListProps {} interface RejectOrderProps { - order: string; + order: Result; } const LaboratoryPatientList: React.FC = () => { const { t } = useTranslation(); - const session = useSession(); - const { patientQueueEntries, isLoading } = usePatientQueuesList( - session?.sessionLocation?.uuid, - "pending" + const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState(""); + + const { workListEntries, isLoading } = useGetOrdersWorklist( + activatedOnOrAfterDate, + "" ); const pageSizes = [10, 20, 30, 40, 50]; - const [page, setPage] = useState(1); const [currentPageSize, setPageSize] = useState(10); - const [nextOffSet, setNextOffSet] = useState(0); const { goTo, - results: paginatedQueueEntries, + results: paginatedWorklistQueueEntries, currentPage, - } = usePagination(patientQueueEntries, currentPageSize); + } = usePagination(workListEntries, currentPageSize); const RejectOrder: React.FC = ({ order }) => { const launchRejectOrderModal = useCallback(() => { @@ -94,57 +82,78 @@ const LaboratoryPatientList: React.FC = () => { ); }; + // get picked orders let columns = [ - { id: 0, header: t("visitId", "Visit ID"), key: "visitId" }, - { id: 1, header: t("names", "Names"), key: "names" }, - { id: 2, header: t("age", "Age"), key: "age" }, - { id: 3, header: t("orderedFrom", "Ordered from"), key: "orderedFrom" }, - { id: 4, header: t("waitingTime", "Waiting time"), key: "waitingTime" }, - { id: 5, header: t("actions", "Actions"), key: "actions" }, + { id: 0, header: t("date", "Date"), key: "date" }, + + { id: 1, header: t("orderNumber", "Order Number"), key: "orderNumber" }, + { + id: 2, + header: t("accessionNumber", "Accession Number"), + key: "accessionNumber", + }, + { id: 3, header: t("test", "Test"), key: "test" }, + { id: 4, header: t("action", "Action"), key: "action" }, + { id: 5, header: t("status", "Status"), key: "status" }, + { id: 6, header: t("orderer", "Orderer"), key: "orderer" }, + { id: 7, header: t("orderType", "Order Type"), key: "orderType" }, + { id: 8, header: t("urgency", "Urgency"), key: "urgency" }, + { id: 9, header: t("actions", "Actions"), key: "actions" }, ]; const tableRows = useMemo(() => { - return paginatedQueueEntries?.map((entry, index) => ({ - ...entry, - encounter: entry.encounter, - visitId: { - content: {trimVisitNumber(entry.visitNumber)}, - }, - names: { - content: {entry.name}, - }, - age: { - content: {age(entry.patientDob)}, - }, - orderedFrom: { - content: {entry.locationFromName}, - }, - waitingTime: { - content: ( - - - {formatWaitTime(entry.waitTime, t)} - - - ), - }, - actions: { - content: ( - <> - - - ), - }, - })); - }, [paginatedQueueEntries, t]); + return paginatedWorklistQueueEntries + ?.filter((item) => item.action === "NEW") + .map((entry, index) => ({ + ...entry, + id: entry.uuid, + date: { + content: ( + <> + {formatDate(parseDate(entry.dateActivated))} + + ), + }, + orderNumber: { content: {entry.orderNumber} }, + accessionNumber: { content: {entry.accessionNumber} }, + test: { content: {entry.concept.display} }, + action: { content: {entry.action} }, + status: { + content: ( + <> + + + {entry.fulfillerStatus} + + + + ), + }, + orderer: { content: {entry.orderer.display} }, + orderType: { content: {entry.orderType.display} }, + urgency: { content: {entry.urgency} }, + actions: { + content: ( + <> + true} + /> + + + ), + }, + })); + }, [paginatedWorklistQueueEntries]); + if (isLoading) { return ; } - if (patientQueueEntries?.length >= 0) { + if (paginatedWorklistQueueEntries?.length >= 0) { return (
@@ -167,6 +176,20 @@ const LaboratoryPatientList: React.FC = () => { }} > + + + { + setActivatedOnOrAfterDate(event.target.value); + }} + type="date" + value={activatedOnOrAfterDate} + /> + + = () => { > - {headers.map((header) => ( {header.header?.content ?? header.header} @@ -194,31 +216,13 @@ const LaboratoryPatientList: React.FC = () => { {rows.map((row, index) => { return ( - + {row.cells.map((cell) => ( {cell.value?.content ?? cell.value} ))} - - {row.isExpanded ? ( - - <> - - - - ) : ( - - )} + ); })} @@ -244,7 +248,7 @@ const LaboratoryPatientList: React.FC = () => { page={currentPage} pageSize={currentPageSize} pageSizes={pageSizes} - totalItems={patientQueueEntries?.length} + totalItems={workListEntries?.length} className={styles.pagination} onChange={({ pageSize, page }) => { if (pageSize !== currentPageSize) { diff --git a/src/queue-list/pick-lab-request-menu.component.tsx b/src/queue-list/pick-lab-request-menu.component.tsx index 079154bd..31f362a4 100644 --- a/src/queue-list/pick-lab-request-menu.component.tsx +++ b/src/queue-list/pick-lab-request-menu.component.tsx @@ -8,15 +8,11 @@ import { MappedPatientQueueEntry } from "./laboratory-patient-list.resource"; import { Encounter, Order } from "../types/patient-queues"; interface PickLabRequestActionMenuProps { - queueId: string; - encounter: Encounter; order: Order; closeModal: () => void; } const PickLabRequestActionMenu: React.FC = ({ - queueId, - encounter, order, }) => { const { t } = useTranslation(); @@ -24,21 +20,18 @@ const PickLabRequestActionMenu: React.FC = ({ const launchPickLabRequestQueueModal = useCallback(() => { const dispose = showModal("add-to-worklist-dialog", { closeModal: () => dispose(), - queueId, - encounter, + order, }); - }, [encounter, order, queueId]); + }, [order]); return ( - - - + - +
diff --git a/src/review-list/dialog/review-item.resource.ts b/src/review-list/dialog/review-item.resource.ts index e69de29b..6e44609f 100644 --- a/src/review-list/dialog/review-item.resource.ts +++ b/src/review-list/dialog/review-item.resource.ts @@ -0,0 +1,14 @@ +import { FetchResponse, openmrsFetch, useConfig } from "@openmrs/esm-framework"; + +export async function ApproverOrder(body: any) { + const abortController = new AbortController(); + + return openmrsFetch(`/ws/rest/v1/approveorder`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + signal: abortController.signal, + body: body, + }); +} diff --git a/src/summary-tiles/laboratory-summary-tiles.component.tsx b/src/summary-tiles/laboratory-summary-tiles.component.tsx index 788ca427..a99b692c 100644 --- a/src/summary-tiles/laboratory-summary-tiles.component.tsx +++ b/src/summary-tiles/laboratory-summary-tiles.component.tsx @@ -12,10 +12,7 @@ const LaboratorySummaryTiles: React.FC = () => { const session = useSession(); // get tests ordered - const { patientQueueCount } = usePatientQueuesList( - session?.sessionLocation?.uuid, - "pending" - ); + const { count: testOrderedCount } = useLabTestsStats(""); // get worklists const { count: worklistCount } = useLabTestsStats("IN_PROGRESS"); @@ -30,7 +27,7 @@ const LaboratorySummaryTiles: React.FC = () => {
= ({ fulfillerStatus }) => { ); const pageSizes = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]; - const [page, setPage] = useState(1); const [currentPageSize, setPageSize] = useState(10); - const [nextOffSet, setNextOffSet] = useState(0); const { goTo, @@ -136,49 +134,51 @@ const WorkList: React.FC = ({ fulfillerStatus }) => { }; const tableRows = useMemo(() => { - return paginatedWorkListEntries?.map((entry, index) => ({ - ...entry, - id: entry.uuid, - date: { - content: ( - <> - {formatDate(parseDate(entry.dateActivated))} - - ), - }, - orderNumber: { content: {entry.orderNumber} }, - accessionNumber: { content: {entry.accessionNumber} }, - test: { content: {entry.concept.display} }, - action: { content: {entry.action} }, - status: { - content: ( - <> - - - {entry.fulfillerStatus} - - - - ), - }, - orderer: { content: {entry.orderer.display} }, - orderType: { content: {entry.orderType.display} }, - urgency: { content: {entry.urgency} }, - actions: { - content: ( - <> - - - - ), - }, - })); + return paginatedWorkListEntries + ?.filter((item) => item.action === "REVISE") + .map((entry, index) => ({ + ...entry, + id: entry.uuid, + date: { + content: ( + <> + {formatDate(parseDate(entry.dateActivated))} + + ), + }, + orderNumber: { content: {entry.orderNumber} }, + accessionNumber: { content: {entry.accessionNumber} }, + test: { content: {entry.concept.display} }, + action: { content: {entry.action} }, + status: { + content: ( + <> + + + {entry.fulfillerStatus} + + + + ), + }, + orderer: { content: {entry.orderer.display} }, + orderType: { content: {entry.orderType.display} }, + urgency: { content: {entry.urgency} }, + actions: { + content: ( + <> + + + + ), + }, + })); }, [ResultsOrder, paginatedWorkListEntries]); if (isLoading) {