diff --git a/src/completed-list/completed-list.component.tsx b/src/completed-list/completed-list.component.tsx
index caa21c1d..15f99ee9 100644
--- a/src/completed-list/completed-list.component.tsx
+++ b/src/completed-list/completed-list.component.tsx
@@ -2,15 +2,13 @@ import React, { useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { useGetOrdersWorklist } from "../work-list/work-list.resource";
import {
- ErrorState,
formatDate,
parseDate,
usePagination,
- isDesktop,
+ ConfigurableLink,
} from "@openmrs/esm-framework";
import {
DataTable,
- DataTableSkeleton,
Pagination,
Table,
TableBody,
@@ -19,17 +17,15 @@ import {
TableHead,
TableHeader,
TableRow,
+ Tile,
TableToolbar,
TableToolbarContent,
- TableToolbarSearch,
Layer,
- Tile,
+ TableToolbarSearch,
DatePicker,
DatePickerInput,
- Select,
- SelectItem,
+ DataTableSkeleton,
Tag,
- Dropdown,
} from "@carbon/react";
import styles from "./completed-list.scss";
import { getStatusColor } from "../utils/functions";
@@ -38,97 +34,13 @@ interface CompletedListProps {
fulfillerStatus: string;
}
-interface TableRowProps {
- entry: {
- uuid: string;
- orderNumber: string;
- accessionNumber: string;
- concept: { display: string };
- action: string;
- fulfillerStatus: string;
- orderer: { display: string };
- urgency: string;
- dateActivated: string;
- patient: { display: string };
- };
-}
-
-const StatusTag: React.FC<{ fulfillerStatus: string }> = ({
- fulfillerStatus,
-}) => {
- return (
-
-
- {fulfillerStatus}
-
-
- );
-};
-
-const CustomTableRow: React.FC = ({ entry }) => {
- const {
- uuid,
- orderNumber,
- accessionNumber,
- concept,
- action,
- fulfillerStatus,
- orderer,
- urgency,
- dateActivated,
- patient,
- } = entry;
-
- return (
-
-
- {formatDate(parseDate(dateActivated))}
-
-
- {orderNumber}
-
-
- {patient.display.split("-")[1]}
-
-
- {accessionNumber}
-
-
- {concept.display}
-
-
- {action}
-
-
-
-
-
- {orderer.display}
-
-
- {urgency}
-
-
- );
-};
-
const CompletedList: React.FC = ({ fulfillerStatus }) => {
const { t } = useTranslation();
- const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
+ const { workListEntries, isLoading } = useGetOrdersWorklist(fulfillerStatus);
- const { workListEntries, isLoading } = useGetOrdersWorklist(
- activatedOnOrAfterDate,
- fulfillerStatus
- );
-
- const pageSizes = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50];
- const [page, setPage] = useState(1);
- const [currentPageSize, setPageSize] = useState(5);
- const [nextOffSet, setNextOffSet] = useState(0);
+ const pageSizes = [10, 20, 30, 40, 50];
+ const [currentPageSize, setPageSize] = useState(10);
const {
goTo,
@@ -153,28 +65,134 @@ const CompletedList: React.FC = ({ fulfillerStatus }) => {
];
const tableRows = useMemo(() => {
- return paginatedWorkListEntries?.map((entry, index) => (
-
- ));
- }, [paginatedWorkListEntries]);
+ return paginatedWorkListEntries
+ ?.filter(
+ (item) =>
+ (item.action === "DISCONTINUE" || item.action === "REVISE") &&
+ item.fulfillerStatus === fulfillerStatus
+ )
+ .map((entry) => ({
+ ...entry,
+ id: entry?.uuid,
+ date: formatDate(parseDate(entry?.dateActivated)),
+
+ patient: (
+
+ {entry?.patient?.display.split("-")[1]}
+
+ ),
+ orderNumber: entry?.orderNumber,
+ accessionNumber: entry?.accessionNumber,
+ test: entry?.concept?.display,
+ action: entry?.action,
+ status: (
+
+ {entry?.fulfillerStatus}
+
+ ),
+ orderer: entry?.orderer?.display,
+ orderType: entry?.orderType.display,
+ urgency: entry?.urgency,
+ }));
+ }, [fulfillerStatus, paginatedWorkListEntries]);
if (isLoading) {
return ;
}
- if (paginatedWorkListEntries?.length > 0) {
- return ;
- } else {
+ if (paginatedWorkListEntries?.length >= 0) {
return (
-
-
-
-
- {t("noCompletedListToDisplay", "No Completed List to display")}
-
-
-
-
+
+ {({
+ rows,
+ headers,
+ getHeaderProps,
+ getTableProps,
+ getRowProps,
+ onInputChange,
+ }) => (
+
+
+
+
+
+
+
+
+
+
+
+ {headers.map((header) => (
+
+ {header.header?.content ?? header.header}
+
+ ))}
+
+
+
+ {rows.map((row, index) => {
+ return (
+
+
+ {row.cells.map((cell) => (
+
+ {cell.value?.content ?? cell.value}
+
+ ))}
+
+
+ );
+ })}
+
+
+ {rows.length === 0 ? (
+
+
+
+
+ {t(
+ "noWorklistsToDisplay",
+ "No worklists orders to display"
+ )}
+
+
+
+
+ ) : null}
+ {
+ if (pageSize !== currentPageSize) {
+ setPageSize(pageSize);
+ }
+ if (page !== currentPage) {
+ goTo(page);
+ }
+ }}
+ />
+
+ )}
+
);
}
};
diff --git a/src/completed-list/completed-list.scss b/src/completed-list/completed-list.scss
index 68c5ddf9..585be500 100644
--- a/src/completed-list/completed-list.scss
+++ b/src/completed-list/completed-list.scss
@@ -194,10 +194,10 @@ title {
}
.toolbar {
- display: flex;
- align-items: center;
- padding: 5px;
- margin: 10px;
+ position: static;
+ height: 3rem;
+ overflow: visible;
+ background-color: color;
}
.tileContainer {
@@ -221,4 +221,4 @@ title {
@include type.type-style('heading-compact-02');
color: $text-02;
margin-bottom: 0.5rem;
-}
+}
\ No newline at end of file
diff --git a/src/config-schema.ts b/src/config-schema.ts
index 9e76fb91..2682e985 100644
--- a/src/config-schema.ts
+++ b/src/config-schema.ts
@@ -23,7 +23,7 @@ export const configSchema = {
},
laboratoryOrderTypeUuid: {
_type: Type.String,
- _default: "52a447d3-a64a-11e3-9aeb-50e549534c5e",
+ _default: "",
_description: "Uuid for orderType",
},
laboratoryReferalDestinationUuid: {
diff --git a/src/header/laboratory-header.component.tsx b/src/header/laboratory-header.component.tsx
index 1107c08d..3bbc5100 100644
--- a/src/header/laboratory-header.component.tsx
+++ b/src/header/laboratory-header.component.tsx
@@ -15,7 +15,6 @@ export const LaboratoryHeader: React.FC = () => {
- {/*
{t('laboratory', 'Laboratory')}
*/}
{t("laboratory", "Laboratory")}
diff --git a/src/header/laboratory-header.scss b/src/header/laboratory-header.scss
index 1bd8b4e2..88aec206 100644
--- a/src/header/laboratory-header.scss
+++ b/src/header/laboratory-header.scss
@@ -7,8 +7,11 @@
color: $text-02;
height: spacing.$spacing-12;
background-color: $ui-02;
+ border: 1px solid $ui-03;
+ border-left: 0px;
display: flex;
justify-content: space-between;
+ margin-bottom: 2rem;
}
.left-justified-items {
diff --git a/src/index.ts b/src/index.ts
index bf784d66..37ffe370 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,8 +5,24 @@ import {
} from "@openmrs/esm-framework";
import { configSchema } from "./config-schema";
import { createHomeDashboardLink } from "./components/create-dashboard-link.component";
-
+import rootComponent from "./root.component";
import laboratoryReferralWorkspaceComponent from "./patient-chart/laboratory-workspaces/laboratory-referral.workspace.component";
+import laboratory from "./laboratory.component";
+import laboratoryOrder from "./patient-chart/patient-laboratory-order-results.component";
+import addToWorklist from "./tests-ordered/lab-dialogs/add-to-worklist-dialog.component";
+import sendEmail from "./patient-chart/results-summary/send-email-dialog.component";
+import reviewItemDialogComponent from "./review-list/dialog/review-item.component";
+import rejectOrderDialogComponent from "./reject-order/reject-order-dialog.component";
+import approvedTabComponent from "./lab-tabs/approved-tab.component";
+import referredTestTabComponent from "./lab-tabs/referred-tab.component";
+import worklistTabComponent from "./lab-tabs/work-list-tab.component";
+import reveiwTabComponent from "./lab-tabs/review-tab.component";
+import pickLabRequestButtonComponent from "./tests-ordered/pick-lab-request-menu.component";
+import rejectOrderButtonComponent from "./order-actions/reject-order.component";
+import worklistTile from "./lab-tiles/worklist-tile.component";
+import referredTile from "./lab-tiles/referred-tile.component";
+import completedTile from "./lab-tiles/completed-tile.component";
+import testsOrdered from "./lab-tiles/tests-ordered-tile.component";
import {
createDashboardLink,
@@ -27,10 +43,7 @@ export const importTranslation = require.context(
"lazy"
);
-export const root = getAsyncLifecycle(
- () => import("./root.component"),
- options
-);
+export const root = getSyncLifecycle(rootComponent, options);
export const laboratoryDashboardLink = getSyncLifecycle(
createHomeDashboardLink({
@@ -41,10 +54,7 @@ export const laboratoryDashboardLink = getSyncLifecycle(
options
);
-export const laboratoryComponent = getAsyncLifecycle(
- () => import("./laboratory.component"),
- options
-);
+export const laboratoryComponent = getSyncLifecycle(laboratory, options);
// Patient chart
export const laboratoryOrderDashboardLink = getSyncLifecycle(
@@ -55,93 +65,59 @@ export const laboratoryOrderDashboardLink = getSyncLifecycle(
}),
options
);
-export const laboratoryOrderComponent = getAsyncLifecycle(
- () => import("./patient-chart/patient-laboratory-order-results.component"),
+export const laboratoryOrderComponent = getSyncLifecycle(
+ laboratoryOrder,
options
);
-export const addToWorklistDialog = getAsyncLifecycle(
- () => import("./queue-list/lab-dialogs/add-to-worklist-dialog.component"),
- options
-);
+export const addToWorklistDialog = getSyncLifecycle(addToWorklist, options);
-export const sendEmailDialog = getAsyncLifecycle(
- () => import("./patient-chart/results-summary/send-email-dialog.component"),
- options
-);
+export const sendEmailDialog = getSyncLifecycle(sendEmail, options);
-export const resultsSummaryWorkSpace = getAsyncLifecycle(
- () => import("./patient-chart/results-summary/results-summary.component"),
+export const reviewItemDialog = getSyncLifecycle(
+ reviewItemDialogComponent,
options
);
-export const editResultsDialog = getAsyncLifecycle(
- () =>
- import(
- "./patient-chart/results-summary/results-dialog/edit-results-dialog.component"
- ),
+export const rejectOrderDialog = getSyncLifecycle(
+ rejectOrderDialogComponent,
options
);
-export const reviewItemDialog = getAsyncLifecycle(
- () => import("./review-list/dialog/review-item.component"),
- options
-);
+export const reviewComponent = getSyncLifecycle(reveiwTabComponent, options);
-export const rejectOrderDialog = getAsyncLifecycle(
- () => import("./reject-order/reject-order-dialog.component"),
+export const approvedComponent = getSyncLifecycle(
+ approvedTabComponent,
options
);
-export const reviewComponent = getAsyncLifecycle(
- () => import("./lab-tabs/review-tab.component"),
+export const referredTestComponent = getSyncLifecycle(
+ referredTestTabComponent,
options
);
-export const approvedComponent = getAsyncLifecycle(
- () => import("./lab-tabs/approved-tab.component"),
+export const worklistComponent = getSyncLifecycle(
+ worklistTabComponent,
options
);
-export const referredTestComponent = getAsyncLifecycle(
- () => import("./lab-tabs/referred-tab.component"),
+export const pickLabRequestButton = getSyncLifecycle(
+ pickLabRequestButtonComponent,
options
);
-export const worklistComponent = getAsyncLifecycle(
- () => import("./lab-tabs/work-list-tab.component"),
+export const rejectOrderButton = getSyncLifecycle(
+ rejectOrderButtonComponent,
options
);
-export const pickLabRequestButton = getAsyncLifecycle(
- () => import("./queue-list/pick-lab-request-menu.component"),
- options
-);
+export const worklistTileComponent = getSyncLifecycle(worklistTile, options);
-export const rejectOrderButton = getAsyncLifecycle(
- () => import("./order-actions/reject-order.component"),
- options
-);
-
-export const worklistTileComponent = getAsyncLifecycle(
- () => import("./lab-tiles/worklist-tile.component"),
- options
-);
-
-export const referredTileComponent = getAsyncLifecycle(
- () => import("./lab-tiles/referred-tile.component"),
- options
-);
+export const referredTileComponent = getSyncLifecycle(referredTile, options);
-export const completedTileComponent = getAsyncLifecycle(
- () => import("./lab-tiles/completed-tile.component"),
- options
-);
+export const completedTileComponent = getSyncLifecycle(completedTile, options);
-export const testOrderedTileComponent = getAsyncLifecycle(
- () => import("./lab-tiles/tests-ordered-tile.component"),
- options
-);
+export const testOrderedTileComponent = getSyncLifecycle(testsOrdered, options);
export function startupApp() {
defineConfigSchema(moduleName, configSchema);
diff --git a/src/lab-tabs/approved-tab.component.tsx b/src/lab-tabs/approved-tab.component.tsx
index 8d8a7093..6d30e604 100644
--- a/src/lab-tabs/approved-tab.component.tsx
+++ b/src/lab-tabs/approved-tab.component.tsx
@@ -1,6 +1,5 @@
import React from "react";
import CompletedList from "../completed-list/completed-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
const ApprovedComponent = () => {
return (
diff --git a/src/lab-tabs/referred-tab.component.tsx b/src/lab-tabs/referred-tab.component.tsx
index 6cfb2e19..92c99508 100644
--- a/src/lab-tabs/referred-tab.component.tsx
+++ b/src/lab-tabs/referred-tab.component.tsx
@@ -1,6 +1,5 @@
import React from "react";
import { EmptyState } from "@openmrs/esm-patient-common-lib";
-import styles from "../queue-list/laboratory-queue.scss";
const ReferredComponent = () => {
return (
diff --git a/src/lab-tabs/review-tab.component.tsx b/src/lab-tabs/review-tab.component.tsx
index 47f144bf..d569d683 100644
--- a/src/lab-tabs/review-tab.component.tsx
+++ b/src/lab-tabs/review-tab.component.tsx
@@ -1,6 +1,5 @@
import React from "react";
import ReviewList from "../review-list/review-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
const ReviewComponent = () => {
return (
diff --git a/src/lab-tiles/completed-tile.component.tsx b/src/lab-tiles/completed-tile.component.tsx
index ae943f0f..5db4f5c3 100644
--- a/src/lab-tiles/completed-tile.component.tsx
+++ b/src/lab-tiles/completed-tile.component.tsx
@@ -1,6 +1,4 @@
import React from "react";
-import CompletedList from "../completed-list/completed-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
import { useTranslation } from "react-i18next";
import SummaryTile from "../summary-tiles/summary-tile.component";
import { useLabTestsStats } from "../summary-tiles/laboratory-summary.resource";
diff --git a/src/lab-tiles/referred-tile.component.tsx b/src/lab-tiles/referred-tile.component.tsx
index c3c25a89..67fa6004 100644
--- a/src/lab-tiles/referred-tile.component.tsx
+++ b/src/lab-tiles/referred-tile.component.tsx
@@ -1,6 +1,4 @@
import React from "react";
-import CompletedList from "../completed-list/completed-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
import { useTranslation } from "react-i18next";
import SummaryTile from "../summary-tiles/summary-tile.component";
diff --git a/src/lab-tiles/tests-ordered-tile.component.tsx b/src/lab-tiles/tests-ordered-tile.component.tsx
index 2c65e041..c5fcea42 100644
--- a/src/lab-tiles/tests-ordered-tile.component.tsx
+++ b/src/lab-tiles/tests-ordered-tile.component.tsx
@@ -1,6 +1,4 @@
import React from "react";
-import CompletedList from "../completed-list/completed-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
import { useTranslation } from "react-i18next";
import SummaryTile from "../summary-tiles/summary-tile.component";
import { useLabTestsStats } from "../summary-tiles/laboratory-summary.resource";
diff --git a/src/lab-tiles/worklist-tile.component.tsx b/src/lab-tiles/worklist-tile.component.tsx
index dd65c8c7..e0f85d16 100644
--- a/src/lab-tiles/worklist-tile.component.tsx
+++ b/src/lab-tiles/worklist-tile.component.tsx
@@ -1,6 +1,4 @@
import React from "react";
-import CompletedList from "../completed-list/completed-list.component";
-import styles from "../queue-list/laboratory-queue.scss";
import { useTranslation } from "react-i18next";
import SummaryTile from "../summary-tiles/summary-tile.component";
import { useLabTestsStats } from "../summary-tiles/laboratory-summary.resource";
diff --git a/src/laboratory.component.tsx b/src/laboratory.component.tsx
index 7b5969cc..6c993640 100644
--- a/src/laboratory.component.tsx
+++ b/src/laboratory.component.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { LaboratoryHeader } from "./header/laboratory-header.component";
import LaboratorySummaryTiles from "./summary-tiles/laboratory-summary-tiles.component";
-import LaboratoryQueueList from "./queue-list/laboratory-tabs.component";
+import LaboratoryOrdersList from "./tests-ordered/laboratory-tabs.component";
import Overlay from "./components/overlay/overlay.component";
const Laboratory: React.FC = () => {
@@ -9,7 +9,7 @@ const Laboratory: React.FC = () => {
-
+
);
diff --git a/src/patient-chart/laboratory-active-test-order/laboratory-active-test-order-results.component.tsx b/src/patient-chart/laboratory-active-test-order/laboratory-active-test-order-results.component.tsx
index f9c7b26f..23e85c98 100644
--- a/src/patient-chart/laboratory-active-test-order/laboratory-active-test-order-results.component.tsx
+++ b/src/patient-chart/laboratory-active-test-order/laboratory-active-test-order-results.component.tsx
@@ -54,10 +54,10 @@ import {
import TestsResults from "../results-summary/test-results-table.component";
import { useReactToPrint } from "react-to-print";
import PrintResultsSummary from "../results-summary/print-results-summary.component";
-import { EncounterResponse } from "../laboratory-item/view-laboratory-item.resource";
import { useGetPatientByUuid } from "../../utils/functions";
import {
ResourceRepresentation,
+ Result,
getOrderColor,
} from "../patient-laboratory-order-results.resource";
import { useLaboratoryOrderResultsPages } from "../patient-laboratory-order-results-table.resource";
@@ -71,7 +71,7 @@ interface LaboratoryActiveTestOrderResultsProps {
}
interface PrintProps {
- encounter: EncounterResponse;
+ encounter: Result;
}
const LaboratoryActiveTestOrderResults: React.FC<
@@ -450,11 +450,6 @@ const LaboratoryActiveTestOrderResults: React.FC<
"No test orders to display"
)}
-
- {t("checkFilters", "Check the filters above")}
-
- {t("or", "or")}
-
diff --git a/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx b/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx
deleted file mode 100644
index 2dc6144e..00000000
--- a/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-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";
-import { EncounterResponse } from "./view-laboratory-item.resource";
-
-interface ViewLaboratoryItemActionMenuProps {
- closeModal: () => void;
- encounter: EncounterResponse;
-}
-
-const ViewLaboratoryItemActionMenu: React.FC<
- ViewLaboratoryItemActionMenuProps
-> = ({ encounter }) => {
- const { t } = useTranslation();
-
- const handleClick = useCallback(
- () =>
- launchPatientWorkspace("results-summary", {
- workspaceTitle: `Results Summary Form`,
- encounter,
- }),
- [encounter]
- );
-
- 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
deleted file mode 100644
index 6a07d96a..00000000
--- a/src/patient-chart/laboratory-item/view-laboratory-item.resource.ts
+++ /dev/null
@@ -1,290 +0,0 @@
-import { openmrsFetch, restBaseUrl } from "@openmrs/esm-framework";
-import useSWR from "swr";
-
-export interface EncounterResponse {
- uuid: string;
- display: string;
- encounterDatetime: string;
- patient: Patient;
- location: Location;
- form: Form;
- encounterType: EncounterType2;
- obs: Ob[];
- orders: Order[];
- voided: boolean;
- auditInfo: AuditInfo;
- visit: Visit;
- encounterProviders: any[];
- diagnoses: any[];
- links: Link[];
- resourceVersion: string;
-}
-
-export interface Patient {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Link {
- rel: string;
- uri: string;
- resourceAlias: string;
-}
-
-export interface Location {
- uuid: string;
- display: string;
- name: string;
- description: any;
- address1: any;
- address2: any;
- cityVillage: any;
- stateProvince: any;
- country: string;
- postalCode: any;
- latitude: any;
- longitude: any;
- countyDistrict: any;
- address3: any;
- address4: any;
- address5: any;
- address6: any;
- tags: Tag[];
- parentLocation: ParentLocation;
- childLocations: ChildLocation[];
- retired: boolean;
- attributes: any[];
- address7: any;
- address8: any;
- address9: any;
- address10: any;
- address11: any;
- address12: any;
- address13: any;
- address14: any;
- address15: any;
- links: Link[];
- resourceVersion: string;
-}
-
-export interface Tag {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface ParentLocation {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface ChildLocation {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Form {
- uuid: string;
- display: string;
- name: string;
- description: string;
- encounterType: EncounterType;
- version: string;
- build: any;
- published: boolean;
- formFields: any[];
- retired: boolean;
- resources: Resource[];
- links: Link[];
- resourceVersion: string;
-}
-
-export interface EncounterType {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Resource {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface EncounterType2 {
- uuid: string;
- display: string;
- name: string;
- description: string;
- retired: boolean;
- links: Link[];
- resourceVersion: string;
-}
-
-export interface Ob {
- uuid: string;
- display: string;
- concept: Concept;
- person: Person;
- obsDatetime: string;
- accessionNumber: any;
- obsGroup: any;
- valueCodedName: any;
- groupMembers: any;
- comment: any;
- location: Location2;
- order: Order;
- encounter: Encounter;
- voided: boolean;
- value: any;
- valueModifier: any;
- formFieldPath: string;
- formFieldNamespace: string;
- links: Link[];
- resourceVersion: string;
-}
-
-export interface Concept {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Person {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Location2 {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Encounter {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Order {
- uuid: string;
- orderNumber: string;
- accessionNumber: any;
- patient: Patient;
- concept: Concept;
- action: string;
- careSetting: CareSetting;
- previousOrder: any;
- dateActivated: string;
- scheduledDate: any;
- dateStopped: any;
- autoExpireDate: any;
- encounter: Encounter;
- orderer: Orderer;
- orderReason: any;
- orderReasonNonCoded: any;
- orderType: OrderType;
- urgency: string;
- instructions: any;
- commentToFulfiller: any;
- display: string;
- specimenSource: any;
- laterality: any;
- clinicalHistory: any;
- frequency: any;
- numberOfRepeats: any;
- links: Link[];
- type: string;
- resourceVersion: string;
-}
-
-export interface CareSetting {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Encounter {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Orderer {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface OrderType {
- uuid: string;
- display: string;
- name: string;
- javaClassName: string;
- retired: boolean;
- description: string;
- conceptClasses: any[];
- parent: any;
- links: Link[];
- resourceVersion: string;
-}
-
-export interface AuditInfo {
- creator: Creator;
- dateCreated: string;
- changedBy: any;
- dateChanged: any;
-}
-
-export interface Creator {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Visit {
- uuid: string;
- display: string;
- patient: Patient;
- visitType: VisitType;
- indication: any;
- location: Location;
- startDatetime: string;
- stopDatetime: any;
- encounters: Encounter[];
- attributes: any[];
- voided: boolean;
- links: Link[];
- resourceVersion: string;
-}
-
-export interface VisitType {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export interface Encounter {
- uuid: string;
- display: string;
- links: Link[];
-}
-
-export function useGetEncounterById(encounterUuid: string) {
- const apiUrl = `${restBaseUrl}/encounter/${encounterUuid}?v=full`;
- const { data, error, isLoading } = useSWR<{ data: EncounterResponse }, Error>(
- apiUrl,
- openmrsFetch
- );
-
- return {
- encounter: data?.data,
- isLoading,
- isError: error,
- };
-}
diff --git a/src/patient-chart/laboratory-item/view-laboratory-item.scss b/src/patient-chart/laboratory-item/view-laboratory-item.scss
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/patient-chart/laboratory-order-referals/laboratory-order-referals.component.tsx b/src/patient-chart/laboratory-order-referals/laboratory-order-referals.component.tsx
index 5ff7189d..9f248092 100644
--- a/src/patient-chart/laboratory-order-referals/laboratory-order-referals.component.tsx
+++ b/src/patient-chart/laboratory-order-referals/laboratory-order-referals.component.tsx
@@ -52,10 +52,10 @@ import {
import TestsResults from "../results-summary/test-results-table.component";
import { useReactToPrint } from "react-to-print";
import PrintResultsSummary from "../results-summary/print-results-summary.component";
-import { EncounterResponse } from "../laboratory-item/view-laboratory-item.resource";
import { useGetPatientByUuid } from "../../utils/functions";
import {
ResourceRepresentation,
+ Result,
getOrderColor,
} from "../patient-laboratory-order-results.resource";
import { useLaboratoryOrderResultsPages } from "../patient-laboratory-order-results-table.resource";
@@ -75,7 +75,7 @@ interface EditReferralActionProps {
}
interface PrintProps {
- encounter: EncounterResponse;
+ encounter: Result;
}
const LaboratoryOrderReferalResults: React.FC<
@@ -482,11 +482,6 @@ const LaboratoryOrderReferalResults: React.FC<
"No test orders to display"
)}
-
- {t("checkFilters", "Check the filters above")}
-
- {t("or", "or")}
-
diff --git a/src/patient-chart/laboratory-past-test/laboratory-past-test-order-results.component.tsx b/src/patient-chart/laboratory-past-test/laboratory-past-test-order-results.component.tsx
index 1dccfa99..c47d2bab 100644
--- a/src/patient-chart/laboratory-past-test/laboratory-past-test-order-results.component.tsx
+++ b/src/patient-chart/laboratory-past-test/laboratory-past-test-order-results.component.tsx
@@ -54,10 +54,10 @@ import {
import TestsResults from "../results-summary/test-results-table.component";
import { useReactToPrint } from "react-to-print";
import PrintResultsSummary from "../results-summary/print-results-summary.component";
-import { EncounterResponse } from "../laboratory-item/view-laboratory-item.resource";
import { useGetPatientByUuid } from "../../utils/functions";
import {
ResourceRepresentation,
+ Result,
getOrderColor,
} from "../patient-laboratory-order-results.resource";
import { useLaboratoryOrderResultsPages } from "../patient-laboratory-order-results-table.resource";
@@ -68,7 +68,7 @@ interface LaboratoryPastTestOrderResultsProps {
}
interface PrintProps {
- encounter: EncounterResponse;
+ encounter: Result;
}
const LaboratoryPastTestOrderResults: React.FC<
@@ -421,11 +421,6 @@ const LaboratoryPastTestOrderResults: React.FC<
"No test orders to display"
)}
-
- {t("checkFilters", "Check the filters above")}
-
- {t("or", "or")}
-
diff --git a/src/patient-chart/laboratory-tabs/laboratory-order-tabs.component.tsx b/src/patient-chart/laboratory-tabs/laboratory-order-tabs.component.tsx
index d8e1b9c6..f6ad8525 100644
--- a/src/patient-chart/laboratory-tabs/laboratory-order-tabs.component.tsx
+++ b/src/patient-chart/laboratory-tabs/laboratory-order-tabs.component.tsx
@@ -29,8 +29,10 @@ const LaboratoryResultsTabs: React.FC = ({
aria-label="laboratory results tabs"
contained
>
- {t("pending", "Routine Tests")}
- {t("referals", "Referrals")}
+
+ {t("pending", "Routine Tests")}
+
+ {t("referals", "Referrals")}
diff --git a/src/patient-chart/patient-laboratory-order-results.resource.ts b/src/patient-chart/patient-laboratory-order-results.resource.ts
index d76bdf8b..77f9c61e 100644
--- a/src/patient-chart/patient-laboratory-order-results.resource.ts
+++ b/src/patient-chart/patient-laboratory-order-results.resource.ts
@@ -478,3 +478,17 @@ export function usePatientLaboratoryOrders(filter: LaboratoryOrderFilter) {
isError: error,
};
}
+
+export function useGetEncounterById(encounterUuid: string) {
+ const apiUrl = `${restBaseUrl}/encounter/${encounterUuid}?v=full`;
+ const { data, error, isLoading } = useSWR<{ data: Result }, Error>(
+ apiUrl,
+ openmrsFetch
+ );
+
+ return {
+ encounter: data?.data,
+ isLoading,
+ isError: error,
+ };
+}
diff --git a/src/patient-chart/results-summary/print-results-summary.component.tsx b/src/patient-chart/results-summary/print-results-summary.component.tsx
index 6c9f6d43..cc0a39e7 100644
--- a/src/patient-chart/results-summary/print-results-summary.component.tsx
+++ b/src/patient-chart/results-summary/print-results-summary.component.tsx
@@ -1,14 +1,14 @@
import React, { useEffect, useMemo, useRef, useState } from "react";
import styles from "./print-results-summary.scss";
-import { EncounterResponse } from "../laboratory-item/view-laboratory-item.resource";
import { formatDate, parseDate } from "@openmrs/esm-framework";
import logoImg from "../../../assets/logo/moh_logo_without_word.png";
import { Identifier, PatientResource } from "../../utils/functions";
import { useTranslation } from "react-i18next";
import PrintResultsTable from "./print-results-table.component";
+import { Result } from "../patient-laboratory-order-results.resource";
interface PrintResultsSummaryProps {
- encounterResponse: EncounterResponse;
+ encounterResponse: Result;
patient: PatientResource;
}
@@ -16,8 +16,6 @@ const PrintResultsSummary: React.FC = ({
encounterResponse,
patient,
}) => {
- const { t } = useTranslation();
-
const filteredItems = encounterResponse.obs.filter(
(ob) => ob?.order?.type === "testorder"
);
diff --git a/src/patient-chart/results-summary/results-dialog/edit-results-dialog.component.tsx b/src/patient-chart/results-summary/results-dialog/edit-results-dialog.component.tsx
deleted file mode 100644
index 54a3ee6f..00000000
--- a/src/patient-chart/results-summary/results-dialog/edit-results-dialog.component.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import {
- Button,
- Form,
- ModalBody,
- ModalFooter,
- ModalHeader,
-} from "@carbon/react";
-import React from "react";
-import { useTranslation } from "react-i18next";
-import { EncounterResponse } from "../../laboratory-item/view-laboratory-item.resource";
-
-interface EditResultsDialogProps {
- encounterResponse: EncounterResponse;
- closeModal: () => void;
-}
-
-const EditResultsDialog: React.FC = ({
- encounterResponse,
- closeModal,
-}) => {
- const { t } = useTranslation();
-
- return (
- <>
-
- >
- );
-};
-
-export default EditResultsDialog;
diff --git a/src/patient-chart/results-summary/results-summary.component.tsx b/src/patient-chart/results-summary/results-summary.component.tsx
deleted file mode 100644
index 9245da1f..00000000
--- a/src/patient-chart/results-summary/results-summary.component.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import React, { useCallback, useEffect, useRef, useState } from "react";
-import {
- Button,
- DataTableSkeleton,
- Form,
- ModalBody,
- ModalFooter,
-} from "@carbon/react";
-import { Printer, MailAll, Edit } from "@carbon/react/icons";
-import styles from "./results-summary.scss";
-import TestsResults from "./test-results-table.component";
-import { useReactToPrint } from "react-to-print";
-import { EncounterResponse } from "../laboratory-item/view-laboratory-item.resource";
-import PrintResultsSummary from "./print-results-summary.component";
-import { formatDate, parseDate, showModal } from "@openmrs/esm-framework";
-import { useTranslation } from "react-i18next";
-import { Order } from "../patient-laboratory-order-results.resource";
-
-interface ResultsSummaryProps {
- encounter: EncounterResponse;
-}
-
-const ResultsSummary: React.FC = ({ encounter }) => {
- const { t } = useTranslation();
- const obsData = encounter.obs.filter((ob) => ob?.order?.type === "testorder");
-
- if (encounter) {
- return (
-
- );
- }
-};
-
-export default ResultsSummary;
diff --git a/src/patient-chart/results-summary/results/results.component.tsx b/src/patient-chart/results-summary/results/results.component.tsx
deleted file mode 100644
index 4197730a..00000000
--- a/src/patient-chart/results-summary/results/results.component.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import { useGetLabEncounterTests } from "./results.resource";
-import { DataTableSkeleton } from "@carbon/react";
-import { ErrorState } from "@openmrs/esm-framework";
-
-interface ResultsProps {
- encounterUuid: string;
-}
-
-const Results: React.FC = ({ encounterUuid }) => {
- const { labResults, isLoading, isError } =
- useGetLabEncounterTests(encounterUuid);
-
- if (isLoading) {
- return ;
- }
-
- if (isError) {
- return ;
- }
-
- return {JSON.stringify(labResults)};
-};
-
-export default Results;
diff --git a/src/patient-chart/results-summary/results/results.resource.ts b/src/patient-chart/results-summary/results/results.resource.ts
deleted file mode 100644
index 0766a3f1..00000000
--- a/src/patient-chart/results-summary/results/results.resource.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import {
- FetchResponse,
- openmrsFetch,
- restBaseUrl,
- useConfig,
-} from "@openmrs/esm-framework";
-import useSWR from "swr";
-
-export interface LabTestResultResponse {
- results: Result[];
-}
-
-export interface Result {
- order: string;
- result: Result2[];
- links: Link[];
-}
-
-export interface Result2 {
- investigation: string;
- set: string;
- test: string;
- value: string;
- hiNormal: any;
- lowNormal: any;
- lowAbsolute: any;
- hiCritical: any;
- lowCritical: any;
- unit: any;
- level: string;
- concept: string;
- encounterId: any;
- testId: any;
- hiAbsolute: any;
-}
-
-export interface Link {
- rel: string;
- uri: string;
- resourceAlias: string;
-}
-
-export function useGetLabEncounterTests(encounterUuid: string) {
- const apiUrl = `${restBaseUrl}/encountertestresults?encounterUuid=${encounterUuid}`;
-
- const { data, error, isLoading } = useSWR<
- { data: LabTestResultResponse },
- Error
- >(apiUrl, openmrsFetch, { refreshInterval: 3000 });
- return {
- labResults: data?.data ? data?.data.results : [],
- isLoading,
- isError: error,
- };
-}
diff --git a/src/patient-chart/results-summary/results/results.scss b/src/patient-chart/results-summary/results/results.scss
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/patient-chart/results-summary/send-email-dialog.component.tsx b/src/patient-chart/results-summary/send-email-dialog.component.tsx
index 6fc14e6b..866440dd 100644
--- a/src/patient-chart/results-summary/send-email-dialog.component.tsx
+++ b/src/patient-chart/results-summary/send-email-dialog.component.tsx
@@ -24,63 +24,10 @@ const SendEmailDialog: React.FC = ({
const { t } = useTranslation();
const [email, setEmail] = useState();
- const [file, setFile] = useState();
const { patient, isLoading } = usePatient(patientUuid);
- // setEmail()
-
- // generate pdf
-
- const sendEmail = async () => {
- // initialize nodemailer
- // var transporter = nodemailer.createTransport({
- // service: "gmail",
- // secure: true,
- // tls: {
- // rejectUnauthorized: false,
- // },
- // auth: {
- // user: "services.ugandaemr@gmail.com",
- // pass: "Admin1234_",
- // },
- // });
- // // point to the template folder
- // const handlebarOptions = {
- // viewEngine: {
- // extname: ".hbs",
- // layoutsDir: "views/",
- // defaultLayout: "template",
- // partialsDir: "views/partials/",
- // },
- // viewPath: "views/",
- // extName: ".hbs",
- // };
- // transporter.use("compile", hbs(handlebarOptions));
- // const mailOptions = {
- // from: "services.ugandaemr@gmail.com",
- // to: email,
- // subject: `Tests results`,
- // attachments: [{ filename: "testResults.pdf", path: file }],
- // };
- // transporter.sendMail(mailOptions, (error, info) => {
- // if (error) {
- // showNotification({
- // title: `Error in sending results`,
- // kind: "error",
- // critical: true,
- // description: error?.message,
- // });
- // } else {
- // showToast({
- // critical: true,
- // title: `Sent Test Results`,
- // kind: "success",
- // description: `Test results sent Successfully`,
- // });
- // }
- // });
- };
+ const sendEmail = async () => {};
return (
<>
diff --git a/src/patient-chart/results-summary/test-children-results.component.tsx b/src/patient-chart/results-summary/test-children-results.component.tsx
index 682dde72..b5b73102 100644
--- a/src/patient-chart/results-summary/test-children-results.component.tsx
+++ b/src/patient-chart/results-summary/test-children-results.component.tsx
@@ -71,10 +71,6 @@ const TestResultsChildren: React.FC = ({
}));
}, [members]);
- if (members === undefined) {
- return No Data;
- }
-
const ReferenceRange: React.FC = ({ conceptUuid }) => {
const {
concept: concept,
@@ -207,11 +203,7 @@ const TestResultsChildren: React.FC = ({
"No test orders to display"
)}
-
- {t("checkFilters", "Check the filters above")}
-
- {t("or", "or")}
) : null}
diff --git a/src/patient-chart/results-summary/test-print-results-table.component.tsx b/src/patient-chart/results-summary/test-print-results-table.component.tsx
index a7dd599e..5db5e7be 100644
--- a/src/patient-chart/results-summary/test-print-results-table.component.tsx
+++ b/src/patient-chart/results-summary/test-print-results-table.component.tsx
@@ -1,8 +1,7 @@
-import React, { useMemo, useState } from "react";
+import React, { useMemo } from "react";
import { useTranslation } from "react-i18next";
import {
DataTable,
- DataTableSkeleton,
Table,
TableBody,
TableCell,
@@ -16,11 +15,8 @@ import {
TableExpandedRow,
} from "@carbon/react";
import styles from "./results-summary.scss";
-import RescendTestResultActionMenu from "./test-results-rescend-action-menu.component";
-import { Order } from "../patient-laboratory-order-results.resource";
-import DeleteTestResultActionMenu from "./test-results-delete-action-menu.component";
-import { Ob } from "../laboratory-item/view-laboratory-item.resource";
import TestResultsChildren from "./test-children-results.component";
+import { Ob } from "../patient-laboratory-order-results.resource";
interface TestOrdersProps {
obs: Ob[];
@@ -126,23 +122,6 @@ const TestsPrintResults: React.FC = ({ obs }) => {
) : null}
- {/* {
- if (pageSize !== currentPageSize) {
- setPageSize(pageSize);
- }
- if (page !== currentPage) {
- goTo(page);
- }
- }}
- /> */}
)}
diff --git a/src/patient-chart/results-summary/test-results-delete-action-menu.component.tsx b/src/patient-chart/results-summary/test-results-delete-action-menu.component.tsx
deleted file mode 100644
index 0353014f..00000000
--- a/src/patient-chart/results-summary/test-results-delete-action-menu.component.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { showModal, useSession } from "@openmrs/esm-framework";
-import React, { useCallback } from "react";
-import { useTranslation } from "react-i18next";
-import { Button, Tooltip } from "@carbon/react";
-import { TrashCan } from "@carbon/react/icons";
-
-interface RescendTestResultActionMenuProps {
- closeModal: () => void;
-}
-
-const DeleteTestResultActionMenu: React.FC<
- RescendTestResultActionMenuProps
-> = () => {
- const { t } = useTranslation();
-
- return (
-
-
-
- );
-};
-
-export default DeleteTestResultActionMenu;
diff --git a/src/patient-chart/results-summary/test-results-rescend-action-menu.component.tsx b/src/patient-chart/results-summary/test-results-rescend-action-menu.component.tsx
deleted file mode 100644
index c04cf3fb..00000000
--- a/src/patient-chart/results-summary/test-results-rescend-action-menu.component.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from "react";
-import { useTranslation } from "react-i18next";
-import { Button, Tooltip } from "@carbon/react";
-import { ArrowRight } from "@carbon/react/icons";
-
-interface RescendTestResultActionMenuProps {
- closeModal: () => void;
-}
-
-const RescendTestResultActionMenu: React.FC<
- RescendTestResultActionMenuProps
-> = () => {
- const { t } = useTranslation();
-
- return (
-
-
-
- );
-};
-
-export default RescendTestResultActionMenu;
diff --git a/src/patient-chart/results-summary/test-results-table.component.tsx b/src/patient-chart/results-summary/test-results-table.component.tsx
index b9589f9d..33dfb271 100644
--- a/src/patient-chart/results-summary/test-results-table.component.tsx
+++ b/src/patient-chart/results-summary/test-results-table.component.tsx
@@ -15,10 +15,9 @@ import {
TableExpandedRow,
} from "@carbon/react";
import styles from "./results-summary.scss";
-import DeleteTestResultActionMenu from "./test-results-delete-action-menu.component";
-import { Ob } from "../laboratory-item/view-laboratory-item.resource";
import TestResultsChildren from "./test-children-results.component";
import { formatDate, parseDate } from "@openmrs/esm-framework";
+import { Ob } from "../patient-laboratory-order-results.resource";
interface TestOrdersProps {
obs: Ob[];
diff --git a/src/patient-chart/results-summary/tests-children-detail.component.tsx b/src/patient-chart/results-summary/tests-children-detail.component.tsx
deleted file mode 100644
index e3e06a47..00000000
--- a/src/patient-chart/results-summary/tests-children-detail.component.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from "react";
-import { useTranslation } from "react-i18next";
-import { useGetConceptById } from "./results-summary.resource";
-import { DataTableSkeleton } from "@carbon/react";
-
-interface TestsChildrenDetailProps {
- conceptUuid: string;
-}
-
-const TestsChildrenDetail: React.FC = ({
- conceptUuid,
-}) => {
- const { t } = useTranslation();
-
- const {
- concept: concept,
- isLoading,
- isError,
- } = useGetConceptById(conceptUuid);
-
- if (isLoading || isError) {
- return ;
- }
-
- return (
- <>
-
- {concept?.display}
- Unit : {concept?.units}
-
-
-
-
-
Ranges
-
-
- High : {concept.hiNormal}
-
-
- Low : {concept?.lowNormal}
-
-
-
-
- >
- );
-};
-export default TestsChildrenDetail;
diff --git a/src/patient-chart/results-summary/views/email.handlebars b/src/patient-chart/results-summary/views/email.handlebars
deleted file mode 100644
index 05fa97ac..00000000
--- a/src/patient-chart/results-summary/views/email.handlebars
+++ /dev/null
@@ -1,13 +0,0 @@
-// email.handlebars
-
-
-
-
-
- Results Email
-
-
- Hello {{name}}!
- We're glad to send your results. Find attachement below
-
-
\ No newline at end of file
diff --git a/src/queue-list/laboratory-queue.component.tsx b/src/queue-list/laboratory-queue.component.tsx
deleted file mode 100644
index 0d6c59c3..00000000
--- a/src/queue-list/laboratory-queue.component.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import React, { useEffect, useState } from "react";
-import { Tab, Tabs, TabList, TabPanels, Search } from "@carbon/react";
-import { useTranslation } from "react-i18next";
-import styles from "./laboratory-queue.scss";
-import LaboratoryPatientList from "./laboratory-patient-list.component";
-
-enum TabTypes {
- STARRED,
- SYSTEM,
- USER,
- ALL,
-}
-
-const LaboratoryQueueList: React.FC = () => {
- const { t } = useTranslation();
- const [selectedTab, setSelectedTab] = useState(TabTypes.STARRED);
- const [searchTermUserInput, setSearchTermUserInput] = useState("");
- const [searchTerm, setSearchTerm] = useState("");
- const [location, setLocation] = useState("");
-
- const tabs = [
- {
- key: "testedOrders",
- header: t("testedOrders", "Tests ordered"),
- },
- {
- key: "worklist",
- header: t("worklist", "Worklist"),
- },
- {
- key: "referredTests",
- header: t("referredTests", "Referred tests"),
- },
- {
- key: "completedTests",
- header: t("completedTests", "Completed tests"),
- },
- {
- key: "reviewList",
- header: t("reviewList", "Review List"),
- },
- {
- key: "approveList",
- header: t("approveList", "Approval List"),
- },
- ];
-
- useEffect(() => {
- const debounceFn = setTimeout(() => {
- setSearchTerm(searchTermUserInput);
- }, 500);
-
- return () => clearTimeout(debounceFn);
- }, [searchTermUserInput]);
-
- return (
-
-
-
-
- {tabs.map((tab, index) => {
- return (
-
- {t(tab.header)}
-
- );
- })}
-
-
- {
- e.preventDefault();
- setSearchTermUserInput(e.target.value);
- }}
- size="md"
- className={styles.patientSearch}
- />
-
- {/*
- {tabs.map((tab, index) => {
- return (
-
- );
- })}
- */}
-
-
-
- );
-};
-
-export default LaboratoryQueueList;
diff --git a/src/review-list/dialog/review-item.component.tsx b/src/review-list/dialog/review-item.component.tsx
index 3c442617..0ae8f908 100644
--- a/src/review-list/dialog/review-item.component.tsx
+++ b/src/review-list/dialog/review-item.component.tsx
@@ -9,9 +9,11 @@ import {
Checkbox,
} from "@carbon/react";
import { useTranslation } from "react-i18next";
-import { useGetEncounterById } from "../../patient-chart/laboratory-item/view-laboratory-item.resource";
-import styles from "../review-list.scss";
-import { GroupMember } from "../../patient-chart/patient-laboratory-order-results.resource";
+import styles from "../dialog/review-item.scss";
+import {
+ GroupMember,
+ useGetEncounterById,
+} from "../../patient-chart/patient-laboratory-order-results.resource";
import { useGetConceptById } from "../../patient-chart/results-summary/results-summary.resource";
import { ApproverOrder } from "./review-item.resource";
import { showNotification, showSnackbar } from "@openmrs/esm-framework";
@@ -38,16 +40,14 @@ const ReviewItem: React.FC = ({
const { encounter, isLoading } = useGetEncounterById(encounterUuid);
const testsOrder = useMemo(() => {
- return encounter?.orders.filter(
- (item) => item?.orderType.display === "Test Order"
- );
- }, [encounter?.orders]);
+ return encounter?.obs.filter((item) => item?.order?.type === "testorder");
+ }, [encounter?.obs]);
const filteredGroupedResults = useMemo(() => {
let groupedResults = [];
testsOrder?.forEach((element) => {
- groupedResults[element.display] = element;
+ groupedResults[element?.concept?.display] = element;
});
return groupedResults;
@@ -56,19 +56,35 @@ const ReviewItem: React.FC = ({
const [checkedItems, setCheckedItems] = useState({});
const handleCheckboxChange = (test, groupMembers, uuid) => {
- setCheckedItems((prevCheckedItems) => ({
- ...prevCheckedItems,
- [test]: {
- groupMembers,
- uuid,
- },
- }));
+ setCheckedItems((previouslyCheckedItems) => {
+ if (previouslyCheckedItems[test]) {
+ const newCheckedItems = { ...previouslyCheckedItems };
+ delete newCheckedItems[test];
+ return newCheckedItems;
+ } else {
+ return {
+ ...previouslyCheckedItems,
+ [test]: { groupMembers, uuid },
+ };
+ }
+ });
};
// handle approve
const approveOrder = async (e) => {
e.preventDefault();
-
+ if (Object.keys(checkedItems).length === 0) {
+ showNotification({
+ title: t("noSelection", "No Selection: "),
+ kind: "error",
+ critical: true,
+ description: t(
+ "pleaseSelectAnOrder",
+ "Please select at least one order to approve."
+ ),
+ });
+ return;
+ }
let uuids = [];
Object.keys(checkedItems).map((item, index) => {
diff --git a/src/review-list/review-list.component.tsx b/src/review-list/review-list.component.tsx
index e5fb5d2c..5078796e 100644
--- a/src/review-list/review-list.component.tsx
+++ b/src/review-list/review-list.component.tsx
@@ -26,16 +26,12 @@ import {
Tile,
DatePicker,
DatePickerInput,
- Select,
- SelectItem,
Button,
Tag,
} from "@carbon/react";
import styles from "./review-list.scss";
import { Add } from "@carbon/react/icons";
-import { Ob } from "../patient-chart/patient-laboratory-order-results.resource";
-import { Encounter } from "../types";
import { getStatusColor } from "../utils/functions";
interface ReviewlistProps {
@@ -73,15 +69,10 @@ const ReviewList: React.FC = ({ fulfillerStatus }) => {
const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
- const { workListEntries, isLoading } = useGetOrdersWorklist(
- activatedOnOrAfterDate,
- fulfillerStatus
- );
+ const { workListEntries, isLoading } = useGetOrdersWorklist(fulfillerStatus);
const pageSizes = [10, 20, 30, 40, 50];
- const [page, setPage] = useState(1);
const [currentPageSize, setPageSize] = useState(10);
- const [nextOffSet, setNextOffSet] = useState(0);
const {
goTo,
@@ -109,45 +100,33 @@ const ReviewList: React.FC = ({ fulfillerStatus }) => {
];
const tableRows = useMemo(() => {
- return paginatedWorkListEntries?.map((entry, index) => ({
- ...entry,
- id: entry.uuid,
- date: {
- content: (
- <>
- {formatDate(parseDate(entry.dateActivated))}
- >
- ),
- },
- patient: {
- content: (
- <>
- {entry.patient.display.split("-")[1]}
- >
+ return paginatedWorkListEntries
+ ?.filter(
+ (item) =>
+ (item.action === "DISCONTINUE" || item.action === "REVISE") &&
+ item.fulfillerStatus === "IN_PROGRESS"
+ )
+ .map((entry) => ({
+ ...entry,
+ id: entry?.uuid,
+ date: formatDate(parseDate(entry?.dateActivated)),
+ patient: entry?.patient?.display.split("-")[1],
+ orderNumber: entry?.orderNumber,
+ accessionNumber: entry?.accessionNumber,
+ test: entry?.concept?.display,
+ action: entry?.action,
+ status: (
+
+ {entry?.fulfillerStatus}
+
),
- },
- 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} },
- }));
+ orderer: entry?.orderer?.display,
+ orderType: entry?.orderType?.display,
+ urgency: entry?.urgency,
+ }));
}, [paginatedWorkListEntries]);
if (isLoading) {
@@ -171,22 +150,9 @@ const ReviewList: React.FC = ({ fulfillerStatus }) => {
}}
>
-
-
- {
- setActivatedOnOrAfterDate(event.target.value);
- }}
- type="date"
- value={activatedOnOrAfterDate}
- />
-
-
= ({ fulfillerStatus }) => {
diff --git a/src/routes.json b/src/routes.json
index 92e2535e..d86f2f9f 100644
--- a/src/routes.json
+++ b/src/routes.json
@@ -4,12 +4,14 @@
"fhir2": ">=1.2",
"webservices.rest": "^2.24.0"
},
-
- "pages": [{
- "component": "root",
- "route": "laboratory"
- }],
- "extensions": [{
+ "pages": [
+ {
+ "component": "root",
+ "route": "laboratory"
+ }
+ ],
+ "extensions": [
+ {
"name": "laboratory-dashboard",
"slot": "laboratory-dashboard-slot",
"component": "root"
@@ -102,42 +104,42 @@
"title": "Approved"
}
},
- {
- "name": "tests-ordered-tile-component",
- "slot": "lab-tiles-slot",
- "component": "testOrderedTileComponent",
- "meta": {
- "name": "testsOrderedTileSlot",
- "title": "Ordered tests"
- }
- },
- {
- "name": "completed-tile-component",
- "slot": "lab-tiles-slot",
- "component": "completedTileComponent",
- "meta": {
- "name": "completedTileSlot",
- "title": "Completed"
- }
- },
- {
- "name": "worklist-tile-component",
- "slot": "lab-tiles-slot",
- "component": "worklistTileComponent",
- "meta": {
- "name": "worklisTileSlot",
- "title": "Worklist"
- }
- },
- {
- "name": "referred-tile-component",
- "slot": "lab-tiles-slot",
- "component": "referredTileComponent",
- "meta": {
- "name": "referredTileSlot",
- "title": "Referred tests"
- }
- },
+ {
+ "name": "tests-ordered-tile-component",
+ "slot": "lab-tiles-slot",
+ "component": "testOrderedTileComponent",
+ "meta": {
+ "name": "testsOrderedTileSlot",
+ "title": "Ordered tests"
+ }
+ },
+ {
+ "name": "completed-tile-component",
+ "slot": "lab-tiles-slot",
+ "component": "completedTileComponent",
+ "meta": {
+ "name": "completedTileSlot",
+ "title": "Completed"
+ }
+ },
+ {
+ "name": "worklist-tile-component",
+ "slot": "lab-tiles-slot",
+ "component": "worklistTileComponent",
+ "meta": {
+ "name": "worklisTileSlot",
+ "title": "Worklist"
+ }
+ },
+ {
+ "name": "referred-tile-component",
+ "slot": "lab-tiles-slot",
+ "component": "referredTileComponent",
+ "meta": {
+ "name": "referredTileSlot",
+ "title": "Referred tests"
+ }
+ },
{
"name": "pick-lab-request-button",
"component": "pickLabRequestButton",
@@ -149,5 +151,4 @@
"slot": "order-actions-slot"
}
]
-}
-
+}
\ No newline at end of file
diff --git a/src/summary-tiles/laboratory-summary.resource.tsx b/src/summary-tiles/laboratory-summary.resource.tsx
index aff7ef59..eb6fa351 100644
--- a/src/summary-tiles/laboratory-summary.resource.tsx
+++ b/src/summary-tiles/laboratory-summary.resource.tsx
@@ -1,12 +1,14 @@
-import useSWR from "swr";
+import useSWR, { mutate } from "swr";
import useSWRImmutable from "swr/immutable";
import {
FetchResponse,
openmrsFetch,
restBaseUrl,
+ useConfig,
} from "@openmrs/esm-framework";
import { Result } from "../work-list/work-list.resource";
+import { useCallback } from "react";
export function useMetrics() {
const metrics = {
@@ -41,8 +43,27 @@ export function useServices() {
// worklist
export function useLabTestsStats(fulfillerStatus: string) {
- const apiUrl = `${restBaseUrl}/order?orderTypes=52a447d3-a64a-11e3-9aeb-50e549534c5e&isStopped=false&fulfillerStatus=${fulfillerStatus}&v=full
- `;
+ const { laboratoryOrderTypeUuid } = useConfig();
+
+ const orderTypeQuery =
+ laboratoryOrderTypeUuid !== ""
+ ? `orderType=${laboratoryOrderTypeUuid}&`
+ : "";
+
+ const apiUrl = `${restBaseUrl}/order?${orderTypeQuery}fulfillerStatus=${fulfillerStatus}&v=full`;
+
+ const mutateOrders = useCallback(
+ () =>
+ mutate(
+ (key) =>
+ typeof key === "string" &&
+ key.startsWith(
+ `/ws/rest/v1/order?orderType=${laboratoryOrderTypeUuid}`
+ )
+ ),
+ [laboratoryOrderTypeUuid]
+ );
+
const { data, error, isLoading } = useSWR<
{ data: { results: Array } },
Error
@@ -51,5 +72,6 @@ export function useLabTestsStats(fulfillerStatus: string) {
count: data?.data ? data.data.results.length : 0,
isLoading,
isError: error,
+ mutate: mutateOrders,
};
}
diff --git a/src/queue-list/lab-dialogs/add-to-worklist-dialog.component.tsx b/src/tests-ordered/lab-dialogs/add-to-worklist-dialog.component.tsx
similarity index 96%
rename from src/queue-list/lab-dialogs/add-to-worklist-dialog.component.tsx
rename to src/tests-ordered/lab-dialogs/add-to-worklist-dialog.component.tsx
index 5c05aac3..66b27d1a 100644
--- a/src/queue-list/lab-dialogs/add-to-worklist-dialog.component.tsx
+++ b/src/tests-ordered/lab-dialogs/add-to-worklist-dialog.component.tsx
@@ -1,42 +1,30 @@
-import React, { useCallback, useEffect, useState } from "react";
-import { MappedQueueEntry } from "../../types";
+import React, { useEffect, useState } from "react";
import {
Button,
- ContentSwitcher,
Form,
ModalBody,
ModalFooter,
ModalHeader,
Select,
SelectItem,
- Switch,
- TextArea,
- Grid,
Checkbox,
TextInput,
- IconButton,
} from "@carbon/react";
import { useTranslation } from "react-i18next";
-import { MappedPatientQueueEntry } from "../laboratory-patient-list.resource";
import styles from "./add-to-worklist-dialog.scss";
import {
- navigate,
showNotification,
showSnackbar,
useConfig,
- useLocations,
- useSession,
} from "@openmrs/esm-framework";
import { Renew } from "@carbon/react/icons";
import {
GenerateSpecimenId,
- GetOrderByUuid,
UpdateOrder,
- useQueueRoomLocations,
useReferralLocations,
useSpecimenTypes,
} from "./add-to-worklist-dialog.resource";
-import { Encounter, Order } from "../../types/patient-queues";
+import { Order } from "../../types/patient-queues";
interface AddToWorklistDialogProps {
queueId;
diff --git a/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts b/src/tests-ordered/lab-dialogs/add-to-worklist-dialog.resource.ts
similarity index 100%
rename from src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts
rename to src/tests-ordered/lab-dialogs/add-to-worklist-dialog.resource.ts
diff --git a/src/queue-list/lab-dialogs/add-to-worklist-dialog.scss b/src/tests-ordered/lab-dialogs/add-to-worklist-dialog.scss
similarity index 100%
rename from src/queue-list/lab-dialogs/add-to-worklist-dialog.scss
rename to src/tests-ordered/lab-dialogs/add-to-worklist-dialog.scss
diff --git a/src/queue-list/lab-tests/lab-tests.component.tsx b/src/tests-ordered/lab-tests/lab-tests.component.tsx
similarity index 93%
rename from src/queue-list/lab-tests/lab-tests.component.tsx
rename to src/tests-ordered/lab-tests/lab-tests.component.tsx
index 073fa6db..24b5020b 100644
--- a/src/queue-list/lab-tests/lab-tests.component.tsx
+++ b/src/tests-ordered/lab-tests/lab-tests.component.tsx
@@ -3,25 +3,13 @@ import { useTranslation } from "react-i18next";
import {
DataTable,
- DataTableHeader,
- DataTableSkeleton,
- Pagination,
Table,
TableBody,
TableCell,
TableContainer,
- TableExpandHeader,
- TableExpandRow,
TableHead,
TableHeader,
TableRow,
- TabPanel,
- TableToolbar,
- TableToolbarContent,
- TableToolbarSearch,
- Layer,
- Tag,
- TableExpandedRow,
} from "@carbon/react";
import { ErrorState } from "@openmrs/esm-framework";
import { Encounter } from "../../types/patient-queues";
diff --git a/src/queue-list/lab-tests/lab-tests.resource.ts b/src/tests-ordered/lab-tests/lab-tests.resource.ts
similarity index 68%
rename from src/queue-list/lab-tests/lab-tests.resource.ts
rename to src/tests-ordered/lab-tests/lab-tests.resource.ts
index 4756e1de..e441c307 100644
--- a/src/queue-list/lab-tests/lab-tests.resource.ts
+++ b/src/tests-ordered/lab-tests/lab-tests.resource.ts
@@ -5,11 +5,11 @@ import {
useConfig,
} from "@openmrs/esm-framework";
import useSWR from "swr";
-import { EncounterResponse } from "../../patient-chart/laboratory-item/view-laboratory-item.resource";
+import { Result } from "../../patient-chart/patient-laboratory-order-results.resource";
export function useGetLabOrders(encounterUuid: string) {
const apiUrl = `${restBaseUrl}/encounter/${encounterUuid}?v=full`;
- const { data, error, isLoading } = useSWR<{ data: EncounterResponse }, Error>(
+ const { data, error, isLoading } = useSWR<{ data: Result }, Error>(
apiUrl,
openmrsFetch
);
diff --git a/src/queue-list/lab-tests/lab-tests.scss b/src/tests-ordered/lab-tests/lab-tests.scss
similarity index 100%
rename from src/queue-list/lab-tests/lab-tests.scss
rename to src/tests-ordered/lab-tests/lab-tests.scss
diff --git a/src/queue-list/laboratory-queue.scss b/src/tests-ordered/laboratory-queue.scss
similarity index 100%
rename from src/queue-list/laboratory-queue.scss
rename to src/tests-ordered/laboratory-queue.scss
diff --git a/src/queue-list/laboratory-tabs.component.tsx b/src/tests-ordered/laboratory-tabs.component.tsx
similarity index 82%
rename from src/queue-list/laboratory-tabs.component.tsx
rename to src/tests-ordered/laboratory-tabs.component.tsx
index d1bd6d23..fe0db930 100644
--- a/src/queue-list/laboratory-tabs.component.tsx
+++ b/src/tests-ordered/laboratory-tabs.component.tsx
@@ -1,20 +1,13 @@
-import React, { useEffect, useMemo, useState } from "react";
+import React, { useState } from "react";
import {
type AssignedExtension,
Extension,
- ExtensionSlot,
useConnectedExtensions,
- attach,
- detachAll,
} from "@openmrs/esm-framework";
import { Tab, Tabs, TabList, TabPanels, TabPanel, Search } from "@carbon/react";
import { useTranslation } from "react-i18next";
import styles from "./laboratory-queue.scss";
-import LaboratoryPatientList from "./laboratory-patient-list.component";
-import { EmptyState } from "@openmrs/esm-patient-common-lib";
-import WorkList from "../work-list/work-list.component";
-import ReviewList from "../review-list/review-list.component";
-import CompletedList from "../completed-list/completed-list.component";
+import TestsOrderedList from "./tests-ordered-list.component";
import { ComponentContext } from "@openmrs/esm-framework/src/internal";
enum TabTypes {
@@ -26,7 +19,7 @@ enum TabTypes {
const labPanelSlot = "lab-panels-slot";
-const LaboratoryQueueTabs: React.FC = () => {
+const LaboratoryOrdersTabs: React.FC = () => {
const { t } = useTranslation();
const [selectedTab, setSelectedTab] = useState(0);
const tabExtensions = useConnectedExtensions(
@@ -46,7 +39,9 @@ const LaboratoryQueueTabs: React.FC = () => {
aria-label="Laboratory tabs"
contained
>
- {t("testedOrders", "Tests ordered")}
+
+ {t("testedOrders", "Tests ordered")}
+
{tabExtensions
.filter((extension) => Object.keys(extension.meta).length > 0)
.map((extension, index) => {
@@ -58,6 +53,7 @@ const LaboratoryQueueTabs: React.FC = () => {
key={index}
className={styles.tab}
id={`${title || index}-tab`}
+ style={{ width: "150px" }}
>
{t(title, {
ns: extension.moduleName,
@@ -72,7 +68,7 @@ const LaboratoryQueueTabs: React.FC = () => {
-
+
{tabExtensions
.filter((extension) => Object.keys(extension.meta).length > 0)
@@ -102,4 +98,4 @@ const LaboratoryQueueTabs: React.FC = () => {
);
};
-export default LaboratoryQueueTabs;
+export default LaboratoryOrdersTabs;
diff --git a/src/queue-list/pick-lab-request-menu.component.tsx b/src/tests-ordered/pick-lab-request-menu.component.tsx
similarity index 100%
rename from src/queue-list/pick-lab-request-menu.component.tsx
rename to src/tests-ordered/pick-lab-request-menu.component.tsx
diff --git a/src/queue-list/laboratory-patient-list.component.tsx b/src/tests-ordered/tests-ordered-list.component.tsx
similarity index 67%
rename from src/queue-list/laboratory-patient-list.component.tsx
rename to src/tests-ordered/tests-ordered-list.component.tsx
index a01f0fce..c53d59cd 100644
--- a/src/queue-list/laboratory-patient-list.component.tsx
+++ b/src/tests-ordered/tests-ordered-list.component.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect, useMemo, useState } from "react";
+import React, { useMemo, useState } from "react";
import {
DataTable,
DataTableSkeleton,
@@ -11,25 +11,18 @@ import {
TableHeader,
TableRow,
Dropdown,
- TabPanel,
TableToolbar,
TableToolbarContent,
- TableToolbarSearch,
Layer,
- Tag,
Tile,
- Button,
- DatePicker,
- DatePickerInput,
+ TableToolbarSearch,
} from "@carbon/react";
import { TrashCan, OverflowMenuVertical } from "@carbon/react/icons";
import { useTranslation } from "react-i18next";
import {
ExtensionSlot,
- age,
formatDate,
- formatDatetime,
parseDate,
usePagination,
} from "@openmrs/esm-framework";
@@ -44,7 +37,7 @@ interface RejectOrderProps {
order: Result;
}
-const LaboratoryPatientList: React.FC = () => {
+const TestsOrderedList: React.FC = () => {
const { t } = useTranslation();
const OrderStatuses = [
@@ -57,8 +50,6 @@ const LaboratoryPatientList: React.FC = () => {
"DECLINED",
];
- const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
-
const [filter, setFilter] = useState<
| "All"
| "EXCEPTION"
@@ -69,10 +60,7 @@ const LaboratoryPatientList: React.FC = () => {
| "DECLINED"
>("All");
- const { workListEntries, isLoading } = useGetOrdersWorklist(
- activatedOnOrAfterDate,
- ""
- );
+ const { workListEntries, isLoading } = useGetOrdersWorklist("");
const filteredStatus = useMemo(() => {
if (!filter || filter == "All") {
@@ -120,68 +108,52 @@ const LaboratoryPatientList: React.FC = () => {
const tableRows = useMemo(() => {
return paginatedWorklistQueueEntries
- ?.filter((item) => item.action === "NEW")
+ ?.filter(
+ (item) =>
+ (item?.fulfillerStatus === null || item?.fulfillerStatus === "") &&
+ item?.action === "NEW"
+ )
.map((entry, index) => ({
...entry,
- id: entry.uuid,
- date: {
- content: (
- <>
-
- {formatDate(parseDate(entry.dateActivated))}
-
- >
- ),
- },
- patient: {
- content: (
- <>
- {entry.patient.display.split("-")[1]}
- >
- ),
- },
- 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} },
- urgency: { content: {entry.urgency} },
- actions: {
- content: (
- <>
-
-
- >
- }
- >
-
+ {formatDate(parseDate(entry?.dateActivated))}
+
+ ),
+ patient: entry?.patient?.display.split("-")[1],
+ orderNumber: entry?.orderNumber,
+ accessionNumber: entry?.accessionNumber,
+ test: entry?.concept?.display,
+ action: entry?.action,
+ status: (
+
+ {entry?.fulfillerStatus}
+
+ ),
+ orderer: entry?.orderer?.display,
+ urgency: entry?.urgency,
+ actions: (
+
+
-
- >
- ),
- },
+ >
+ }
+ >
+
+
+ ),
}));
}, [paginatedWorklistQueueEntries]);
@@ -209,9 +181,6 @@ const LaboratoryPatientList: React.FC = () => {
@@ -228,20 +197,13 @@ const LaboratoryPatientList: React.FC = () => {
onChange={handleOrderStatusChange}
/>
-
-
- {
- setActivatedOnOrAfterDate(event.target.value);
- }}
- type="date"
- value={activatedOnOrAfterDate}
- />
-
+
@@ -309,4 +271,4 @@ const LaboratoryPatientList: React.FC = () => {
}
};
-export default LaboratoryPatientList;
+export default TestsOrderedList;
diff --git a/src/queue-list/laboratory-patient-list.resource.ts b/src/tests-ordered/tests-ordered-list.resource.ts
similarity index 100%
rename from src/queue-list/laboratory-patient-list.resource.ts
rename to src/tests-ordered/tests-ordered-list.resource.ts
diff --git a/src/utils/orders-table/orders-data-table.component.tsx b/src/utils/orders-table/orders-data-table.component.tsx
new file mode 100644
index 00000000..2636368e
--- /dev/null
+++ b/src/utils/orders-table/orders-data-table.component.tsx
@@ -0,0 +1,139 @@
+import React, { useState, useMemo } from "react";
+import {
+ DataTable,
+ Pagination,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TableHeader,
+ TableRow,
+ Tile,
+ TableToolbar,
+ TableToolbarContent,
+ Layer,
+ TableToolbarSearch,
+ Dropdown,
+ DatePicker,
+ DatePickerInput,
+} from "@carbon/react";
+import styles from "./orders-data-table.scss";
+import { useTranslation } from "react-i18next";
+
+interface OrdersDataTableProps {
+ tabTitle: string;
+ currentPage: number;
+ currentPageSize: number;
+ pageSizes: number[];
+ totalItems: number;
+ setPageSize: (page: number) => void;
+ goTo: (page: number) => void;
+ orders: Array>;
+ rows: Array>;
+ columns: Array>;
+}
+
+const OrdersDataTable: React.FC = ({
+ tabTitle,
+ currentPage,
+ currentPageSize,
+ pageSizes,
+ totalItems,
+ setPageSize,
+ goTo,
+ rows,
+ columns,
+}) => {
+ const { t } = useTranslation();
+
+ const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
+
+ return (
+
+ {({ rows, headers, getHeaderProps, getTableProps, getRowProps }) => (
+
+
+
+
+
+ {
+ setActivatedOnOrAfterDate(event?.target?.value);
+ }}
+ type="date"
+ value={activatedOnOrAfterDate}
+ />
+
+
+
+
+
+
+
+
+
+
+ {headers.map((header) => (
+
+ {header.header?.content ?? header.header}
+
+ ))}
+
+
+
+ {rows.map((row) => (
+
+
+ {row.cells.map((cell) => (
+
+ {cell.value?.content ?? cell.value}
+
+ ))}
+
+
+ ))}
+
+
+ {rows.length === 0 ? (
+
+
+
+
+ {t("noOrdersList", `No ${tabTitle} orders to display`)}
+
+
+
+
+ ) : null}
+ {
+ if (pageSize !== currentPageSize) {
+ setPageSize(pageSize);
+ }
+ if (page !== currentPage) {
+ goTo(page);
+ }
+ }}
+ />
+
+ )}
+
+ );
+};
+
+export default OrdersDataTable;
diff --git a/src/utils/orders-table/orders-data-table.scss b/src/utils/orders-table/orders-data-table.scss
new file mode 100644
index 00000000..afbcae60
--- /dev/null
+++ b/src/utils/orders-table/orders-data-table.scss
@@ -0,0 +1,50 @@
+@use '@carbon/styles/scss/spacing';
+@use '@carbon/styles/scss/type';
+@import "~@openmrs/esm-styleguide/src/vars";
+@import '../../root.scss';
+
+.tableContainer {
+ background-color: $ui-01;
+ margin: 0 spacing.$spacing-05;
+ padding: 0;
+
+ a {
+ text-decoration: none;
+ }
+
+ th {
+ color: $text-02;
+ }
+
+ :global(.cds--data-table) {
+ background-color: $ui-03;
+ }
+
+ .toolbarContent {
+ height: spacing.$spacing-07;
+ margin-bottom: spacing.$spacing-02;
+ }
+}
+
+.tileContainer {
+ background-color: $ui-02;
+ border-top: 1px solid $ui-03;
+ padding: 5rem 0;
+}
+
+.tile {
+ margin: auto;
+ width: fit-content;
+}
+
+.tileContent {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.content {
+ @include type.type-style('heading-compact-02');
+ color: $text-02;
+ margin-bottom: 0.5rem;
+}
\ No newline at end of file
diff --git a/src/work-list/work-list.component.tsx b/src/work-list/work-list.component.tsx
index d5a75383..0bd7213f 100644
--- a/src/work-list/work-list.component.tsx
+++ b/src/work-list/work-list.component.tsx
@@ -1,24 +1,15 @@
-import React, {
- useState,
- useMemo,
- AnchorHTMLAttributes,
- useCallback,
-} from "react";
+import React, { useState, useMemo, useCallback } from "react";
import { useTranslation } from "react-i18next";
-import { EmptyState, ErrorState } from "@openmrs/esm-patient-common-lib";
import { Microscope, TrashCan } from "@carbon/react/icons";
import {
DataTable,
- DataTableHeader,
DataTableSkeleton,
Pagination,
Table,
TableBody,
TableCell,
TableContainer,
- TableExpandHeader,
- TableExpandRow,
TableHead,
TableHeader,
TableRow,
@@ -28,13 +19,10 @@ import {
TableToolbarSearch,
Layer,
Tag,
- TableExpandedRow,
Button,
Tile,
DatePicker,
DatePickerInput,
- Select,
- SelectItem,
} from "@carbon/react";
import { Result, useGetOrdersWorklist } from "./work-list.resource";
import styles from "./work-list.scss";
@@ -65,14 +53,9 @@ interface RejectOrderProps {
const WorkList: React.FC = ({ fulfillerStatus }) => {
const { t } = useTranslation();
- const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
+ const { workListEntries, isLoading } = useGetOrdersWorklist(fulfillerStatus);
- const { workListEntries, isLoading } = useGetOrdersWorklist(
- activatedOnOrAfterDate,
- fulfillerStatus
- );
-
- const pageSizes = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50];
+ const pageSizes = [10, 20, 30, 40, 50];
const [currentPageSize, setPageSize] = useState(10);
const {
@@ -140,49 +123,35 @@ const WorkList: React.FC = ({ fulfillerStatus }) => {
?.filter((item) => item.fulfillerStatus === "IN_PROGRESS")
.map((entry, index) => ({
...entry,
- id: entry.uuid,
- date: {
- content: (
- <>
- {formatDate(parseDate(entry.dateActivated))}
- >
- ),
- },
- patient: {
- content: (
-
- {entry.patient.display.split("-")[1]}
-
- ),
- },
- 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} },
+ id: entry?.uuid,
+ date: formatDate(parseDate(entry?.dateActivated)),
+ patient: (
+
+ {entry?.patient?.display.split("-")[1]}
+
+ ),
+ orderNumber: entry?.orderNumber,
+ accessionNumber: entry?.accessionNumber,
+ test: entry?.concept?.display,
+ action: entry?.action,
+ status: (
+
+ {entry?.fulfillerStatus}
+
+ ),
+ orderer: entry?.orderer?.display,
+ orderType: entry?.orderType?.display,
+ urgency: entry?.urgency,
actions: {
content: (
<>
@@ -211,28 +180,12 @@ const WorkList: React.FC = ({ fulfillerStatus }) => {
-
-
- {
- setActivatedOnOrAfterDate(event.target.value);
- }}
- type="date"
- value={activatedOnOrAfterDate}
- />
-
-
+ mutate(
+ (key) =>
+ typeof key === "string" &&
+ key.startsWith(
+ `/ws/rest/v1/order?orderType=${laboratoryOrderTypeUuid}`
+ )
+ ),
+ [laboratoryOrderTypeUuid]
+ );
const { data, error, isLoading } = useSWR<
{ data: { results: Array } },
Error
- >(apiUrl, openmrsFetch);
+ >(apiUrl, openmrsFetch, { refreshInterval: 3000 });
return {
workListEntries: data?.data ? data.data.results : [],
isLoading,
isError: error,
+ mutate: mutateOrders,
};
}