Skip to content

Commit

Permalink
Merge branch 'develop' into fix#6607
Browse files Browse the repository at this point in the history
  • Loading branch information
konavivekramakrishna authored Nov 24, 2023
2 parents 72a63e0 + c37b554 commit c48f24f
Show file tree
Hide file tree
Showing 21 changed files with 570 additions and 223 deletions.
3 changes: 2 additions & 1 deletion cypress/pageobject/Patient/PatientConsultation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,13 @@ export class PatientConsultationPage {
}

addDoctorsNotes(notes: string) {
cy.get("#expand_doctor_notes").click();
cy.get("#doctor_notes_textarea").type(notes);
}

postDoctorNotes() {
cy.intercept("POST", "**/api/v1/patient/*/notes").as("postDoctorNotes");
cy.get("#submit").contains("Post Your Note").click();
cy.get("#add_doctor_note_button").click();
cy.wait("@postDoctorNotes").its("response.statusCode").should("eq", 201);
}

Expand Down
20 changes: 20 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"react-dom": "18.2.0",
"react-google-recaptcha": "^3.1.0",
"react-i18next": "^13.0.1",
"react-infinite-scroll-component": "^6.1.0",
"react-markdown": "^8.0.7",
"react-player": "^2.13.0",
"react-qr-reader": "^2.2.1",
Expand Down
12 changes: 3 additions & 9 deletions src/CAREUI/icons/UniconPaths.json
Original file line number Diff line number Diff line change
Expand Up @@ -3107,10 +3107,7 @@
24,
"M19,2H5A3,3,0,0,0,2,5V19a3,3,0,0,0,3,3H19a3,3,0,0,0,3-3V5A3,3,0,0,0,19,2Zm1,17a1,1,0,0,1-1,1H5a1,1,0,0,1-1-1V5A1,1,0,0,1,5,4H19a1,1,0,0,1,1,1Zm-4-8H8a1,1,0,0,0,0,2h8a1,1,0,0,0,0-2Z"
],
"l-minus": [
24,
"M19,11H5a1,1,0,0,0,0,2H19a1,1,0,0,0,0-2Z"
],
"l-minus": [24, "M19,11H5a1,1,0,0,0,0,2H19a1,1,0,0,0,0-2Z"],
"l-missed-call": [
24,
"M6,7.49a1,1,0,0,0,1-1V5.9L9.88,8.78a3,3,0,0,0,4.24,0l4.59-4.59a1,1,0,0,0,0-1.41,1,1,0,0,0-1.42,0L12.71,7.36a1,1,0,0,1-1.42,0L8.41,4.49H9a1,1,0,0,0,0-2H6a1,1,0,0,0-.92.61A1.09,1.09,0,0,0,5,3.49v3A1,1,0,0,0,6,7.49Zm15.94,7.36a16.27,16.27,0,0,0-19.88,0,2.69,2.69,0,0,0-1,2,2.66,2.66,0,0,0,.78,2.07L3.6,20.72A2.68,2.68,0,0,0,7.06,21l.47-.32a8.13,8.13,0,0,1,1-.55,1.85,1.85,0,0,0,1-2.3l-.09-.24a10.49,10.49,0,0,1,5.22,0l-.09.24a1.85,1.85,0,0,0,1,2.3,8.13,8.13,0,0,1,1,.55l.47.32a2.58,2.58,0,0,0,1.54.5,2.72,2.72,0,0,0,1.92-.79l1.81-1.82A2.66,2.66,0,0,0,23,16.83,2.69,2.69,0,0,0,21.94,14.85ZM20.8,17.49,19,19.3a.68.68,0,0,1-.86.1c-.19-.14-.38-.27-.59-.4a11.65,11.65,0,0,0-1.09-.61l.4-1.09a1,1,0,0,0-.6-1.28,12.42,12.42,0,0,0-8.5,0,1,1,0,0,0-.6,1.28l.4,1.1a9.8,9.8,0,0,0-1.1.6l-.58.4A.66.66,0,0,1,5,19.3L3.2,17.49A.67.67,0,0,1,3,17a.76.76,0,0,1,.28-.53,14.29,14.29,0,0,1,17.44,0A.76.76,0,0,1,21,17,.67.67,0,0,1,20.8,17.49Z"
Expand Down Expand Up @@ -4295,10 +4292,7 @@
24,
"M15,13H9a1,1,0,0,0,0,2h2v2a1,1,0,0,0,2,0V15h2a1,1,0,0,0,0-2Zm2-7H7A1,1,0,0,0,7,8h4v2a1,1,0,0,0,2,0V8h4a1,1,0,0,0,0-2Z"
],
"l-text": [
24,
"M17,6H7A1,1,0,0,0,7,8h4v9a1,1,0,0,0,2,0V8h4a1,1,0,0,0,0-2Z"
],
"l-text": [24, "M17,6H7A1,1,0,0,0,7,8h4v9a1,1,0,0,0,2,0V8h4a1,1,0,0,0,0-2Z"],
"l-th-large": [
24,
"M20,3H4A1,1,0,0,0,3,4V20a1,1,0,0,0,1,1H20a1,1,0,0,0,1-1V4A1,1,0,0,0,20,3ZM11,19H5V13h6Zm0-8H5V5h6Zm8,8H13V13h6Zm0-8H13V5h6Z"
Expand Down Expand Up @@ -4841,4 +4835,4 @@
256,
"M204.73 51.85A108.07 108.07 0 0 0 20 128v56a28 28 0 0 0 28 28h16a28 28 0 0 0 28-28v-40a28 28 0 0 0-28-28H44.84A84.05 84.05 0 0 1 128 44h.64a83.7 83.7 0 0 1 82.52 72H192a28 28 0 0 0-28 28v40a28 28 0 0 0 28 28h19.6a20 20 0 0 1-19.6 16h-56a12 12 0 0 0 0 24h56a44.05 44.05 0 0 0 44-44v-80a107.34 107.34 0 0 0-31.27-76.15ZM64 140a4 4 0 0 1 4 4v40a4 4 0 0 1-4 4H48a4 4 0 0 1-4-4v-44Zm124 44v-40a4 4 0 0 1 4-4h20v48h-20a4 4 0 0 1-4-4Z"
]
}
}
22 changes: 22 additions & 0 deletions src/Common/constants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,11 @@ export const NOTIFICATION_EVENTS = [
text: "Shifting Updated",
icon: "fa-solid fa-truck-medical",
},
{
id: "PATIENT_NOTE_ADDED",
text: "Patient Note Added",
icon: "fa-solid fa-message",
},
];

export const BREATHLESSNESS_LEVEL = [
Expand Down Expand Up @@ -1015,6 +1020,23 @@ export const XLSXAssetImportSchema = {
},
};

export const USER_TYPES_MAP = {
Pharmacist: "Pharmacist",
Volunteer: "Volunteer",
StaffReadOnly: "Staff",
Staff: "Staff",
Doctor: "Doctor",
WardAdmin: "Ward Admin",
LocalBodyAdmin: "Local Body Admin",
DistrictLabAdmin: "District Lab Admin",
DistrictReadOnlyAdmin: "District Admin",
DistrictAdmin: "District Admin",
StateLabAdmin: "State Lab Admin",
StateReadOnlyAdmin: "State Admin",
StateAdmin: "State Admin",
RemoteSpecialist: "Remote Specialist",
};

export const AREACODES: Record<string, string[]> = {
CA: [
"403",
Expand Down
4 changes: 4 additions & 0 deletions src/Components/Assets/AssetsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ const AssetsList = () => {
asset_class: qParams.asset_class || "",
location: qParams.facility ? qParams.location || "" : "",
status: qParams.status || "",
warranty_amc_end_of_validity_before:
qParams.warranty_amc_end_of_validity_before || "",
warranty_amc_end_of_validity_after:
qParams.warranty_amc_end_of_validity_after || "",
};

const { loading } = useQuery(routes.listAssets, {
Expand Down
1 change: 1 addition & 0 deletions src/Components/Common/FilePreviewDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ const FilePreviewDialog = (props: FilePreviewProps) => {
/>
) : (
<iframe
sandbox
title="Source Files"
src={fileUrl}
className="mx-auto h-5/6 w-5/6 border-2 border-black bg-white md:my-6 md:w-4/6"
Expand Down
15 changes: 12 additions & 3 deletions src/Components/Facility/ConsultationDetails/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ import PatientInfoCard from "../../Patient/PatientInfoCard";
import { PatientModel } from "../../Patient/models";
import { formatDateTime, relativeTime } from "../../../Utils/utils";

import { navigate } from "raviger";
import { navigate, useQueryParams } from "raviger";
import { useDispatch } from "react-redux";
import { useQueryParams } from "raviger";
import { useTranslation } from "react-i18next";
import { triggerGoal } from "../../../Integrations/Plausible";
import useAuthUser from "../../../Common/hooks/useAuthUser";
Expand All @@ -42,6 +41,7 @@ import { ConsultationPressureSoreTab } from "./ConsultationPressureSoreTab";
import { ConsultationDialysisTab } from "./ConsultationDialysisTab";
import { ConsultationNeurologicalMonitoringTab } from "./ConsultationNeurologicalMonitoringTab";
import { ConsultationNutritionTab } from "./ConsultationNutritionTab";
import PatientNotesSlideover from "../PatientNotesSlideover";
import LegacyDiagnosesList from "../../Diagnosis/LegacyDiagnosesList";

const Loading = lazy(() => import("../../Common/Loading"));
Expand Down Expand Up @@ -105,6 +105,7 @@ export const ConsultationDetails = (props: any) => {
return "None";
}
};
const [showPatientNotesPopup, setShowPatientNotesPopup] = useState(false);

const authUser = useAuthUser();

Expand Down Expand Up @@ -370,7 +371,7 @@ export const ConsultationDetails = (props: any) => {
</Link>
<Link
id="patient_doctor_notes"
href={`/facility/${patientData.facility}/patient/${patientData.id}/notes`}
onClick={() => setShowPatientNotesPopup(true)}
className="btn btn-primary m-1 w-full hover:text-white"
>
Doctor&apos;s Notes
Expand Down Expand Up @@ -540,6 +541,14 @@ export const ConsultationDetails = (props: any) => {
show={showDoctors}
setShow={setShowDoctors}
/>

{showPatientNotesPopup && (
<PatientNotesSlideover
patientId={patientId}
facilityId={facilityId}
setShowPatientNotesPopup={setShowPatientNotesPopup}
/>
)}
</div>
);
};
1 change: 1 addition & 0 deletions src/Components/Facility/ConsultationForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,7 @@ export const ConsultationForm = (props: any) => {
: undefined,
consultation_notes: state.form.consultation_notes,
is_telemedicine: state.form.is_telemedicine,
icu_admission_date: state.form.icu_admission_date,
action: state.form.action,
review_interval: state.form.review_interval,
assigned_to:
Expand Down
8 changes: 4 additions & 4 deletions src/Components/Facility/Consultations/DailyRoundsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ export const DailyRoundsList = (props: any) => {
}}
>
{(_) => (
<div className="flex w-full flex-col gap-4">
<div className="-mt-2 flex w-full flex-col gap-4">
<div className="flex max-h-[85vh] flex-col gap-4 overflow-y-auto overflow-x-hidden px-3">
<PaginatedList.WhenEmpty className="flex w-full justify-center border-b border-gray-200 bg-white p-5 text-center text-2xl font-bold text-gray-500">
<span className="flex justify-center rounded-lg bg-white p-3 text-gray-700 shadow">
<PaginatedList.WhenEmpty className="flex w-full justify-center rounded-md border-b border-gray-200 bg-white px-5 py-1 text-center text-2xl font-bold text-gray-500">
<span className="flex justify-center rounded-lg bg-white p-3 text-gray-700">
{t("no_consultation_updates")}
</span>
</PaginatedList.WhenEmpty>
Expand All @@ -42,7 +42,7 @@ export const DailyRoundsList = (props: any) => {
))}
</>
</PaginatedList.WhenLoading>
<PaginatedList.Items<DailyRoundsModel> className="my-8 flex grow flex-col gap-3 lg:mx-8">
<PaginatedList.Items<DailyRoundsModel> className="flex grow flex-col gap-3">
{(item, items) => {
if (item.rounds_type === "AUTOMATED") {
return (
Expand Down
79 changes: 42 additions & 37 deletions src/Components/Facility/Consultations/LiveFeed.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { useEffect, useRef, useState } from "react";
import { useEffect, useState, useRef } from "react";
import { useDispatch } from "react-redux";
import routes from "../../../Redux/api";
import request from "../../../Utils/request/request";
import useKeyboardShortcut from "use-keyboard-shortcut";
import {
listAssetBeds,
partialUpdateAssetBed,
deleteAssetBed,
} from "../../../Redux/actions";
import { getCameraPTZ } from "../../../Common/constants";
import {
StreamStatus,
Expand Down Expand Up @@ -109,30 +112,28 @@ const LiveFeed = (props: any) => {
};

const getBedPresets = async (id: any) => {
const { data } = await request(routes.listAssetBeds, {
pathParams: { asset: id },
body: {
const bedAssets = await dispatch(
listAssetBeds({
asset: id,
limit: page.limit,
offset: page.offset,
},
});
setBedPresets(data?.results);
})
);
setBedPresets(bedAssets?.data?.results);
setPage({
...page,
count: data?.count || 0,
count: bedAssets?.data?.count,
});
};

const deletePreset = async (id: any) => {
const { res, data } = await request(routes.deleteAssetBed, {
pathParams: { id },
});
const res = await dispatch(deleteAssetBed(id));
if (res?.status === 204) {
Notification.Success({ msg: "Preset deleted successfully" });
getBedPresets(cameraAsset.id);
} else {
Notification.Error({
msg: "Error while deleting Preset: " + (data?.detail || ""),
msg: "Error while deleting Preset: " + (res?.data?.detail || ""),
});
}
setToDelete(null);
Expand All @@ -143,18 +144,20 @@ const LiveFeed = (props: any) => {
bed_id: bed.id,
preset_name: preset,
};
const { res } = await request(routes.partialUpdateAssetBed, {
pathParams: { id: currentPreset.id },
body: {
asset: currentPreset.asset_object.id,
bed: bed.id,
meta: {
...currentPreset.meta,
...data,
const response = await dispatch(
partialUpdateAssetBed(
{
asset: currentPreset.asset_object.id,
bed: bed.id,
meta: {
...currentPreset.meta,
...data,
},
},
},
});
if (res && res.status === 200) {
currentPreset?.id
)
);
if (response && response.status === 200) {
Notification.Success({ msg: "Preset Updated" });
} else {
Notification.Error({ msg: "Something Went Wrong" });
Expand Down Expand Up @@ -255,19 +258,20 @@ const LiveFeed = (props: any) => {
if (currentPreset?.asset_object?.id && data?.position) {
setLoading(option.loadingLabel);
console.log("Updating Preset");
const { res } = await request(routes.partialUpdateAssetBed, {
pathParams: { id: currentPreset.id },
body: {
asset: currentPreset.asset_object.id,
bed: currentPreset.bed_object.id,
meta: {
...currentPreset.meta,
position: data?.position,
const response = await dispatch(
partialUpdateAssetBed(
{
asset: currentPreset.asset_object.id,
bed: currentPreset.bed_object.id,
meta: {
...currentPreset.meta,
position: data?.position,
},
},
},
});

if (res && res.status === 200) {
currentPreset?.id
)
);
if (response && response.status === 200) {
Notification.Success({ msg: "Preset Updated" });
getBedPresets(cameraAsset?.id);
fetchCameraPresets();
Expand Down Expand Up @@ -624,4 +628,5 @@ const LiveFeed = (props: any) => {
</Page>
);
};

export default LiveFeed;
37 changes: 37 additions & 0 deletions src/Components/Facility/PatientNoteCard.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { relativeDate, formatDateTime, classNames } from "../../Utils/utils";
import { USER_TYPES_MAP } from "../../Common/constants";
import { PatientNotesModel } from "./models";

const PatientNoteCard = ({ note }: { note: PatientNotesModel }) => {
return (
<div
className={classNames(
"mt-4 flex w-full flex-col rounded-lg border border-gray-300 bg-white p-3 text-gray-800",
note.user_type === "RemoteSpecialist" && "border-primary-400"
)}
>
<div className="flex">
<span className="text-sm font-semibold text-gray-700">
{note.created_by_object?.first_name || "Unknown"}{" "}
{note.created_by_object?.last_name}
</span>
{note.user_type && (
<span className="pl-2 text-sm text-gray-700">
{`(${USER_TYPES_MAP[note.user_type]})`}
</span>
)}
</div>
<span className="whitespace-pre-wrap break-words">{note.note}</span>
<div className="mt-3 text-end text-xs text-gray-500">
<div className="tooltip inline">
<span className="tooltip-text tooltip-left">
{formatDateTime(note.created_date)}
</span>
{relativeDate(note.created_date)}
</div>
</div>
</div>
);
};

export default PatientNoteCard;
Loading

0 comments on commit c48f24f

Please sign in to comment.