Skip to content

Commit

Permalink
Fix Approval of Resulted Tests (#64)
Browse files Browse the repository at this point in the history
* Fix lab tile count

* Fix approval of results

* Adjust font size for test result
  • Loading branch information
akileng56 committed Mar 20, 2024
1 parent a164cb4 commit f8b8fbd
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 92 deletions.
2 changes: 1 addition & 1 deletion src/lab-tiles/completed-tile.component.tsx
Expand Up @@ -11,7 +11,7 @@ const ReferredTileComponent = () => {
return (
<SummaryTile
label={t("completed", "Completed")}
value={data.length}
value={data?.length}
headerLabel={t("results", "Results")}
/>
);
Expand Down
65 changes: 11 additions & 54 deletions src/review-list/dialog/review-item.component.tsx
@@ -1,12 +1,11 @@
import React, { useMemo, useState } from "react";
import React, { useMemo } from "react";
import {
Button,
Form,
ModalBody,
ModalFooter,
ModalHeader,
InlineLoading,
Checkbox,
} from "@carbon/react";
import { useTranslation } from "react-i18next";
import styles from "../dialog/review-item.scss";
Expand All @@ -17,9 +16,11 @@ import {
import { useGetConceptById } from "../../patient-chart/results-summary/results-summary.resource";
import { ApproverOrder } from "./review-item.resource";
import { showNotification, showSnackbar } from "@openmrs/esm-framework";
import { Result } from "../../work-list/work-list.resource";

interface ReviewItemDialogProps {
encounterUuid: string;
orderItem: Result;
closeModal: () => void;
}

Expand All @@ -33,15 +34,18 @@ interface ValueUnitsProps {

const ReviewItem: React.FC<ReviewItemDialogProps> = ({
encounterUuid,
orderItem,
closeModal,
}) => {
const { t } = useTranslation();

const { encounter, isLoading } = useGetEncounterById(encounterUuid);

const testsOrder = useMemo(() => {
return encounter?.obs?.filter((item) => item?.order?.type === "testorder");
}, [encounter?.obs]);
return encounter?.obs?.filter(
(item) => item?.order?.display === orderItem?.display
);
}, [encounter?.obs, orderItem?.display]);

const filteredGroupedResults = useMemo(() => {
let groupedResults = [];
Expand All @@ -53,49 +57,11 @@ const ReviewItem: React.FC<ReviewItemDialogProps> = ({
return groupedResults;
}, [testsOrder]);

const [checkedItems, setCheckedItems] = useState({});

const handleCheckboxChange = (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) => {
uuids.push(filteredGroupedResults[item].uuid);
});

const payload = {
orders: uuids.join(","),
};

ApproverOrder(payload).then(
ApproverOrder({ orders: `${orderItem?.uuid}` }).then(
() => {
showSnackbar({
isLowContrast: true,
Expand Down Expand Up @@ -195,23 +161,14 @@ const ReviewItem: React.FC<ReviewItemDialogProps> = ({
<table>
<tbody>
{Object.keys(filteredGroupedResults).length > 0
? Object.keys(filteredGroupedResults).map((test, index) => {
? Object.keys(filteredGroupedResults).map((test) => {
const { uuid, groupMembers } =
filteredGroupedResults[test];
const isGrouped = uuid && groupMembers?.length > 0;

return (
<tr key={test} style={{ margin: "10px" }}>
<Checkbox
key={index}
className={styles.checkbox}
onChange={() =>
handleCheckboxChange(test, groupMembers, uuid)
}
labelText={test}
id={`test-${test}`}
checked={checkedItems[test] || false}
/>
{test}

<table style={{ margin: "10px" }}>
<thead>
Expand Down
12 changes: 6 additions & 6 deletions src/review-list/dialog/review-item.scss
Expand Up @@ -3,13 +3,13 @@
@import "~@openmrs/esm-styleguide/src/vars";

.checkbox {
margin: "10px";
font-size: "15px";
font-weight: "bold";
margin: 10px;
font-size: 15px;
font-weight: bold;
}

.valueWidget {
margin-left: "10px"
margin-left: 10px
}

.section {
Expand All @@ -23,12 +23,12 @@
th {
border: 1px solid #000;
text-align: left;
font-size: 8px;
font-size: 12px;
padding: 8px;
width: 80px;
}

th {
background-color: #f2f2f2;
}
}
}
12 changes: 6 additions & 6 deletions src/review-list/review-list.component.tsx
@@ -1,8 +1,7 @@
import React, { useCallback, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { useGetOrdersWorklist } from "../work-list/work-list.resource";
import { Result, useGetOrdersWorklist } from "../work-list/work-list.resource";
import {
ErrorState,
formatDate,
parseDate,
showModal,
Expand All @@ -24,10 +23,7 @@ import {
TableToolbarSearch,
Layer,
Tile,
DatePicker,
DatePickerInput,
Button,
Tag,
} from "@carbon/react";

import styles from "./review-list.scss";
Expand All @@ -39,18 +35,21 @@ interface ReviewlistProps {
}
interface ApproveResultMenuProps {
encounterUuid: string;
orderItem: Result;
}

const ApproveTestMenu: React.FC<ApproveResultMenuProps> = ({
encounterUuid,
orderItem,
}) => {
const { t } = useTranslation();
const launchReviewItemModal = useCallback(() => {
const dispose = showModal("review-item-dialog", {
encounterUuid,
orderItem,
closeModal: () => dispose(),
});
}, [encounterUuid]);
}, [encounterUuid, orderItem]);

return (
<Button
Expand Down Expand Up @@ -183,6 +182,7 @@ const ReviewList: React.FC<ReviewlistProps> = ({ fulfillerStatus }) => {
))}
<TableCell className="cds--table-column-menu">
<ApproveTestMenu
orderItem={paginatedReviewOrderEntries[index]}
encounterUuid={
paginatedReviewOrderEntries[index]?.encounter
?.uuid
Expand Down
18 changes: 9 additions & 9 deletions src/routes.json
Expand Up @@ -122,6 +122,15 @@
"title": "Referred Tests"
}
},
{
"name": "worklist-tile-component",
"slot": "lab-tiles-slot",
"component": "worklistTileComponent",
"meta": {
"name": "worklisTileSlot",
"title": "Worklist"
}
},
{
"name": "completed-tile-component",
"slot": "lab-tiles-slot",
Expand All @@ -131,15 +140,6 @@
"title": "Completed"
}
},
{
"name": "worklist-tile-component",
"slot": "lab-tiles-slot",
"component": "worklistTileComponent",
"meta": {
"name": "worklisTileSlot",
"title": "Worklist"
}
},
{
"name": "rejected-tile-component",
"slot": "lab-tiles-slot",
Expand Down
19 changes: 3 additions & 16 deletions src/summary-tiles/laboratory-summary.resource.tsx
Expand Up @@ -8,7 +8,6 @@ import {
} from "@openmrs/esm-framework";

import { Result } from "../work-list/work-list.resource";
import { useCallback } from "react";

export function useMetrics() {
const metrics = {
Expand Down Expand Up @@ -47,22 +46,10 @@ export function useLabTestsStats(fulfillerStatus: string) {

const orderTypeQuery =
laboratoryOrderTypeUuid !== ""
? `orderType=${laboratoryOrderTypeUuid}&`
? `orderTypes=${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 apiUrl = `${restBaseUrl}/order?${orderTypeQuery}&fulfillerStatus=${fulfillerStatus}&v=full`;

const { data, error, isLoading } = useSWR<
{ data: { results: Array<Result> } },
Expand All @@ -72,6 +59,6 @@ export function useLabTestsStats(fulfillerStatus: string) {
data: data?.data ? data?.data?.results : [],
isLoading,
isError: error,
mutate: mutateOrders,
mutate,
};
}

0 comments on commit f8b8fbd

Please sign in to comment.