From ac614b742e88569d6b736697adc91cf5361eddcd Mon Sep 17 00:00:00 2001 From: jabahum Date: Mon, 2 Oct 2023 15:34:51 +0300 Subject: [PATCH] ft : lab results --- src/index.ts | 5 + .../view-laboratory-item.component.tsx | 37 +++ .../view-laboratory-item.resource.ts | 0 .../laboratory-item/view-laboratory-item.scss | 0 .../laboratory-order.component.tsx | 278 ++++++++++++++---- .../laboratory-order.resource.ts | 0 src/patient-chart/laboratory-order.scss | 9 + .../results-summary.component.tsx | 7 + .../results-summary.resource.tsx | 0 .../results-summary/results-summary.scss | 0 .../add-to-worklist-dialog.resource.ts | 7 + src/routes.json | 4 + 12 files changed, 284 insertions(+), 63 deletions(-) create mode 100644 src/patient-chart/laboratory-item/view-laboratory-item.component.tsx create mode 100644 src/patient-chart/laboratory-item/view-laboratory-item.resource.ts create mode 100644 src/patient-chart/laboratory-item/view-laboratory-item.scss create mode 100644 src/patient-chart/laboratory-order.resource.ts create mode 100644 src/patient-chart/laboratory-order.scss create mode 100644 src/patient-chart/results-summary/results-summary.component.tsx create mode 100644 src/patient-chart/results-summary/results-summary.resource.tsx create mode 100644 src/patient-chart/results-summary/results-summary.scss diff --git a/src/index.ts b/src/index.ts index fa83527..db56075 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,6 +59,11 @@ export const addToWorklistDialog = getAsyncLifecycle( options ); +export const resultsSummaryWorkSpace = getAsyncLifecycle( + () => import("./patient-chart/results-summary/results-summary.component"), + options +); + export function startupApp() { defineConfigSchema(moduleName, configSchema); } diff --git a/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx b/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx new file mode 100644 index 0000000..dccd312 --- /dev/null +++ b/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx @@ -0,0 +1,37 @@ +import { showModal, useSession } from "@openmrs/esm-framework"; +import React, { useCallback } from "react"; +import { useTranslation } from "react-i18next"; +import { Button, Tooltip } from "@carbon/react"; +import { View } from "@carbon/react/icons"; +import { launchPatientWorkspace } from "@openmrs/esm-patient-common-lib"; + +interface ViewLaboratoryItemActionMenuProps { + closeModal: () => void; +} + +const ViewLaboratoryItemActionMenu: React.FC< + ViewLaboratoryItemActionMenuProps +> = () => { + const { t } = useTranslation(); + + const handleClick = useCallback( + () => + launchPatientWorkspace("results-summary", { + workspaceTitle: `Results Summary Form`, + }), + [] + ); + + return ( + + + + ); +}; + +export default ViewLaboratoryItemActionMenu; diff --git a/src/patient-chart/laboratory-item/view-laboratory-item.resource.ts b/src/patient-chart/laboratory-item/view-laboratory-item.resource.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/patient-chart/laboratory-item/view-laboratory-item.scss b/src/patient-chart/laboratory-item/view-laboratory-item.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/patient-chart/laboratory-order.component.tsx b/src/patient-chart/laboratory-order.component.tsx index 8eaa2dd..d73ad8d 100644 --- a/src/patient-chart/laboratory-order.component.tsx +++ b/src/patient-chart/laboratory-order.component.tsx @@ -1,16 +1,43 @@ -import React, { useMemo } from "react"; +import React, { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { + EmptyState, EncounterList, EncounterListColumn, getObsFromEncounter, } from "@ohri/openmrs-esm-ohri-commons-lib"; -import moment from "moment"; +import styles from "./laboratory-order.scss"; +import { age, usePagination, useSession } from "@openmrs/esm-framework"; +import { usePatientQueuesList } from "../queue-list/laboratory-patient-list.resource"; import { - moduleName, - LABORATARORY_ENCOUNTER_TYPE, - TEST_ORDER_ENCOUNTER_TYPE, -} from "../constants"; + DataTable, + DataTableHeader, + DataTableSkeleton, + Pagination, + Table, + TableBody, + TableCell, + TableContainer, + TableExpandHeader, + TableExpandRow, + TableHead, + TableHeader, + TableRow, + TabPanel, + TableToolbar, + TableToolbarContent, + TableToolbarSearch, + Layer, + Tag, + TableExpandedRow, +} from "@carbon/react"; +import LabTests from "../queue-list/lab-tests/lab-tests.component"; +import { + formatWaitTime, + getTagColor, + trimVisitNumber, +} from "../utils/functions"; +import ViewLaboratoryItemActionMenu from "./laboratory-item/view-laboratory-item.component"; interface LaboratoryOrderOverviewProps { patientUuid: string; @@ -21,68 +48,193 @@ const LaboratoryOrder: React.FC = ({ }) => { const { t } = useTranslation(); - const columnsLab: EncounterListColumn[] = useMemo( - () => [ - { - key: "encounterDate", - header: t("encounterDate", "Encounter Date"), - getValue: (encounter) => { - return moment(encounter.encounterDatetime).format("DD-MMM-YYYY"); - }, + const session = useSession(); + + // const { patientQueueEntries, isLoading } = usePatientQueuesList( + // session?.sessionLocation?.uuid, + // status + // ); + + const pageSizes = [10, 20, 30, 40, 50]; + const [page, setPage] = useState(1); + const [currentPageSize, setPageSize] = useState(10); + const [nextOffSet, setNextOffSet] = useState(0); + const [isLoading, setIsLoading] = useState(false); + + // const { + // goTo, + // results: paginatedQueueEntries, + // currentPage, + // } = usePagination(patientQueueEntries, currentPageSize); + + const items = [ + { + encounterDate: "2023-04-05", + orders: ["test", "test", "test", "test", "test", "test", "test", "test"], + location: session.sessionLocation.display, + results: "tests returned", + }, + { + encounterDate: "2023-04-05", + orders: ["test", "test", "test", "test", "test", "test", "test", "test"], + location: session.sessionLocation.display, + results: "tests returned", + }, + ]; + + let columns = [ + { + id: 0, + header: t("encounterDate", "Encouter Date"), + key: "encounterDate", + }, + { id: 1, header: t("orders", "Order"), key: "orders" }, + { id: 2, header: t("location", "Location"), key: "location" }, + { id: 3, header: t("status", "Status"), key: "status" }, + { id: 4, header: t("actions", "Action"), key: "actions" }, + ]; + + const tableRows = useMemo(() => { + return items?.map((entry) => ({ + ...entry, + encounterDate: { + content: {entry.encounterDate}, }, - { - key: "testOrders", - header: t("deliveryType", "Test Order(s)"), - getValue: (encounter) => { - return getObsFromEncounter(encounter, TEST_ORDER_ENCOUNTER_TYPE); - }, + orders: { + content: ( + <> + {entry.orders.map((order) => { + return {order}; + })} + + ), }, - - { - key: "actions", - header: t("actions", "Actions"), - getValue: (encounter) => { - const baseActions = [ - { - form: { - name: "HMIS LAB 001:General Laboratory Test Request Form", - }, - encounterUuid: encounter.uuid, - intent: "*", - label: "View Details", - mode: "view", - }, - { - form: { - name: "HMIS LAB 001:General Laboratory Test Request Form", - }, - encounterUuid: encounter.uuid, - intent: "*", - label: "Edit Form", - mode: "edit", - }, - ]; - return baseActions; - }, + location: { + content: {entry.location}, }, - ], - [t] - ); - const headerTitle = t("Laboratory"); + status: { + content: {entry.results}, + }, + actions: { + content: ( + <> + true} /> + + ), + }, + })); + }, [items]); + + if (isLoading) { + return ; + } + + if (items?.length) { + return ( +
+
+ + {({ + rows, + headers, + getHeaderProps, + getTableProps, + getRowProps, + onInputChange, + }) => ( + + + + + + + + + + + + + {headers.map((header) => ( + + {header.header} + + ))} + + + + {rows.map((row, index) => { + return ( + + + {row.cells.map((cell) => ( + + {cell.value?.content ?? cell.value} + + ))} + + {row.isExpanded ? ( + + <> + + + + ) : ( + + )} + + ); + })} + +
+ {/* { + if (pageSize !== currentPageSize) { + setPageSize(pageSize); + } + if (page !== currentPage) { + goTo(page); + } + }} + /> */} +
+ )} +
+
+ ); + } return ( - +
+
+ +
); }; diff --git a/src/patient-chart/laboratory-order.resource.ts b/src/patient-chart/laboratory-order.resource.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/patient-chart/laboratory-order.scss b/src/patient-chart/laboratory-order.scss new file mode 100644 index 0000000..3b6a361 --- /dev/null +++ b/src/patient-chart/laboratory-order.scss @@ -0,0 +1,9 @@ +@use '@carbon/styles/scss/spacing'; +@use '@carbon/styles/scss/type'; +@import "~@openmrs/esm-styleguide/src/vars"; +@import '../root.scss'; +.headerBtnContainer { + background-color: $ui-background; + padding: spacing.$spacing-05; + text-align: right; + } \ No newline at end of file diff --git a/src/patient-chart/results-summary/results-summary.component.tsx b/src/patient-chart/results-summary/results-summary.component.tsx new file mode 100644 index 0000000..1aa9c69 --- /dev/null +++ b/src/patient-chart/results-summary/results-summary.component.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +const ResultsSummary = () => { + return Laboratory Results; +}; + +export default ResultsSummary; diff --git a/src/patient-chart/results-summary/results-summary.resource.tsx b/src/patient-chart/results-summary/results-summary.resource.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/patient-chart/results-summary/results-summary.scss b/src/patient-chart/results-summary/results-summary.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts b/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts index 3b49504..00d27ca 100644 --- a/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts +++ b/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts @@ -117,3 +117,10 @@ export function useSpecimenTypes() { isLoading, }; } + +// generate specimen id +export function useGenerateSampleID() { + return { + sampleID: {}, + }; +} diff --git a/src/routes.json b/src/routes.json index 0ea4f34..07965ea 100644 --- a/src/routes.json +++ b/src/routes.json @@ -47,6 +47,10 @@ { "name": "add-to-worklist-dialog", "component": "addToWorklistDialog" + }, + { + "name": "results-summary", + "component": "resultsSummaryWorkSpace" } ] }