Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into translations-facility-users
Browse files Browse the repository at this point in the history
khavinshankar authored Sep 3, 2024
2 parents 70a8530 + 5656d65 commit 99d2cb6
Showing 8 changed files with 589 additions and 333 deletions.
2 changes: 1 addition & 1 deletion cypress/e2e/facility_spec/facility_creation.cy.ts
Original file line number Diff line number Diff line change
@@ -37,7 +37,7 @@ describe("Facility Creation", () => {
const totalOccupancy = "10";
const doctorCapacity = "5";
const totalDoctor = "10";
const facilityName = "cypress facility";
const facilityName = "Cypress Facility";
const facilityName2 = "Dummy Facility 40";
const facilityAddress = "cypress address";
const facilityUpdateAddress = "cypress updated address";
57 changes: 30 additions & 27 deletions src/Components/Facility/FacilityHome.tsx
Original file line number Diff line number Diff line change
@@ -88,7 +88,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
onResponse: ({ res }) => {
if (res?.ok) {
Notification.Success({
msg: "Facility deleted successfully",
msg: t("deleted_successfully", { name: facilityData?.name }),
});
}
navigate("/facility");
@@ -150,11 +150,10 @@ export const FacilityHome = ({ facilityId }: Props) => {
backUrl="/facility"
>
<ConfirmDialog
title={`Delete ${facilityData?.name}`}
title={t("delete_item", { name: facilityData?.name })}
description={
<span>
Are you sure you want to delete{" "}
<strong>{facilityData?.name}</strong>
{t("are_you_sure_want_to_delete", { name: facilityData?.name })}
</span>
}
action="Delete"
@@ -247,7 +246,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
</div>
<div className="mb-4" id="address-details-view">
<h1 className="text-base font-semibold text-[#B9B9B9]">
Address
{t("address")}
</h1>
<p className="text-base font-medium">
{facilityData?.address}
@@ -257,7 +256,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
<div className="flex-col md:flex lg:flex-1">
<div className="mb-4">
<h1 className="text-base font-semibold text-[#B9B9B9]">
Local Body
{t("local_body")}
</h1>
<p className="w-2/3 text-base font-medium md:w-full">
{facilityData?.local_body_object?.name}
@@ -266,7 +265,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
<div className="mb-4 flex flex-col flex-wrap gap-4 md:flex-row">
<div>
<h1 className="text-base font-semibold text-[#B9B9B9]">
Ward
{t("ward")}
</h1>
<p className="text-base font-medium">
{facilityData?.ward_object?.number +
@@ -276,7 +275,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
</div>
<div>
<h1 className="text-base font-semibold text-[#B9B9B9]">
District
{t("district")}
</h1>
<p className="text-base font-medium">
{facilityData?.district_object?.name}
@@ -286,7 +285,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
<div className="flex items-center gap-3">
<div id="phone-number-view">
<h1 className="text-base font-semibold text-[#B9B9B9]">
Phone Number
{t("phone_number")}
</h1>
<ContactLink
tel={String(facilityData?.phone_number)}
@@ -304,7 +303,9 @@ export const FacilityHome = ({ facilityId }: Props) => {
{facilityData?.features?.some((feature) =>
FACILITY_FEATURE_TYPES.some((f) => f.id === feature),
) && (
<h1 className="text-lg font-semibold">Available features</h1>
<h1 className="text-lg font-semibold">
{t("available_features")}
</h1>
)}
<div
className="mt-5 flex flex-wrap gap-2"
@@ -346,22 +347,22 @@ export const FacilityHome = ({ facilityId }: Props) => {
authorizeFor={NonReadOnlyUsers}
icon={<CareIcon icon="l-edit-alt" className="text-lg" />}
>
Update Facility
{t("update_facility")}
</DropdownItem>
<DropdownItem
id="configure-facility"
onClick={() => navigate(`/facility/${facilityId}/configure`)}
authorizeFor={NonReadOnlyUsers}
icon={<CareIcon icon="l-setting" className="text-lg" />}
>
Configure Facility
{t("configure_facility")}
</DropdownItem>
<DropdownItem
id="inventory-management"
onClick={() => navigate(`/facility/${facilityId}/inventory`)}
icon={<CareIcon icon="l-clipboard-alt" className="w-5" />}
>
Inventory Management
{t("inventory_management")}
</DropdownItem>
<DropdownItem
id="location-management"
@@ -371,7 +372,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
<CareIcon icon="l-location-point" className="text-lg" />
}
>
Location Management
{t("location_management")}
</DropdownItem>
<DropdownItem
id="resource-request"
@@ -381,36 +382,36 @@ export const FacilityHome = ({ facilityId }: Props) => {
authorizeFor={NonReadOnlyUsers}
icon={<CareIcon icon="l-gold" className="text-lg" />}
>
Resource Request
{t("resource_request")}
</DropdownItem>
<DropdownItem
id="create-assets"
onClick={() => navigate(`/facility/${facilityId}/assets/new`)}
authorizeFor={NonReadOnlyUsers}
icon={<CareIcon icon="l-plus-circle" className="text-lg" />}
>
Create Asset
{t("create_asset")}
</DropdownItem>
<DropdownItem
id="view-assets"
onClick={() => navigate(`/assets?facility=${facilityId}`)}
icon={<CareIcon icon="l-medkit" className="text-lg" />}
>
View Assets
{t("view_asset")}
</DropdownItem>
<DropdownItem
id="view-users"
onClick={() => navigate(`/facility/${facilityId}/users`)}
icon={<CareIcon icon="l-users-alt" className="text-lg" />}
>
View Users
{t("view_users")}
</DropdownItem>
<DropdownItem
id="view-abdm-records"
onClick={() => navigate(`/facility/${facilityId}/abdm`)}
icon={<CareIcon icon="l-file-network" className="text-lg" />}
>
View ABDM Records
{t("view_abdm_records")}
</DropdownItem>
{hasPermissionToDeleteFacility ? (
<DropdownItem
@@ -420,7 +421,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
className="flex items-center gap-3"
icon={<CareIcon icon="l-trash-alt" className="text-lg" />}
>
Delete Facility
{t("delete_facility")}
</DropdownItem>
) : (
<></>
@@ -437,7 +438,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
onClick={() => navigate(`/facility/${facilityId}/cns`)}
>
<CareIcon icon="l-monitor-heart-rate" className="text-lg" />
<span>Central Nursing Station</span>
<span>{t("central_nursing_station")}</span>
</ButtonV2>
{CameraFeedPermittedUserTypes.includes(authUser.user_type) && (
<LiveMonitoringButton />
@@ -451,7 +452,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
authorizeFor={NonReadOnlyUsers}
>
<CareIcon icon="l-plus" className="text-lg" />
<span className="text-sm">Add Details of a Patient</span>
<span className="text-sm">{t("add_details_of_patient")}</span>
</ButtonV2>
<ButtonV2
id="view-patient-facility-list"
@@ -462,7 +463,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
onClick={() => navigate(`/patients?facility=${facilityId}`)}
>
<CareIcon icon="l-user-injured" className="text-lg" />
<span>View Patients</span>
<span>{t("view_patients")}</span>
</ButtonV2>
</div>
</div>
@@ -472,7 +473,7 @@ export const FacilityHome = ({ facilityId }: Props) => {
<FacilityStaffList facilityId={facilityId} />

<div className="mt-5 rounded bg-white p-3 shadow-sm md:p-6">
<h1 className="mb-6 text-xl font-bold">Oxygen Information</h1>
<h1 className="mb-6 text-xl font-bold">{t("oxygen_information")}</h1>
<div
className="overflow-x-auto overflow-y-hidden"
id="facility-oxygen-info"
@@ -517,6 +518,8 @@ const LiveMonitoringButton = () => {
const facilityId = useSlug("facility");
const [location, setLocation] = useState<string>();

const { t } = useTranslation();

return (
<Popover className="relative">
<PopoverButton className="mt-2 w-full">
@@ -528,7 +531,7 @@ const LiveMonitoringButton = () => {
id="facility-detailspage-livemonitoring"
>
<CareIcon icon="l-video" className="text-lg" />
<span>Live Monitoring</span>
<span>{t("live_monitoring")}</span>
</ButtonV2>
</PopoverButton>

@@ -545,7 +548,7 @@ const LiveMonitoringButton = () => {
<div className="relative flex flex-col gap-4 rounded-b-lg bg-white p-6">
<div>
<FieldLabel htmlFor="location" className="text-sm">
Choose a location
{t("choose_location")}
</FieldLabel>
<div className="flex w-full items-center gap-2">
<LocationSelect
@@ -567,7 +570,7 @@ const LiveMonitoringButton = () => {
className="w-full"
href={`/facility/${facilityId}/live-monitoring?location=${location}`}
>
Open Live Monitoring
{t("open_live_monitoring")}
</ButtonV2>
</div>
</div>
761 changes: 475 additions & 286 deletions src/Components/Facility/TreatmentSummary.tsx

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion src/Locale/en/Common.json
Original file line number Diff line number Diff line change
@@ -176,6 +176,7 @@
"ration_card__NO_CARD": "Non-card holder",
"ration_card__BPL": "BPL",
"ration_card__APL": "APL",
"empty_date_time": "--:-- --; --/--/----",
"caution": "Caution",
"feed_optimal_experience_for_phones": "For optimal viewing experience, consider rotating your device.",
"feed_optimal_experience_for_apple_phones": "For optimal viewing experience, consider rotating your device. Ensure auto-rotate is enabled in your device settings.",
@@ -195,5 +196,9 @@
"archived": "Archived",
"no_changes_made": "No changes made",
"user_deleted_successfuly": "User Deleted Successfuly",
"users": "Users"
"users": "Users",
"are_you_sure_want_to_delete": "Are you sure you want to delete {{name}}?",
"oxygen_information": "Oxygen Information",
"deleted_successfully": "{{name}} deleted successfully",
"delete_item": "Delete {{name}}"
}
59 changes: 57 additions & 2 deletions src/Locale/en/Facility.json
Original file line number Diff line number Diff line change
@@ -55,10 +55,65 @@
"discharged_patients": "Discharged Patients",
"discharged_patients_empty": "No discharged patients present in this facility",
"update_facility_middleware_success": "Facility middleware updated successfully",
"treatment_summary__head_title": "Treatment Summary",
"treatment_summary__print": "Print Treatment Summary",
"treatment_summary__heading": "INTERIM TREATMENT SUMMARY",
"patient_registration__name": "Name",
"patient_registration__address": "Address",
"patient_registration__age": "Age",
"patient_consultation__op": "OP",
"patient_consultation__ip": "IP",
"patient_consultation__dc_admission": "Date of domiciliary care commenced",
"patient_consultation__admission": "Date of admission",
"patient_registration__gender": "Gender",
"patient_registration__contact": "Emergency Contact",
"patient_registration__comorbidities": "Comorbidities",
"patient_registration__comorbidities__disease": "Disease",
"patient_registration__comorbidities__details": "Details",
"patient_consultation__consultation_notes": "General Instructions",
"patient_consultation__special_instruction": "Special Instructions",
"suggested_investigations": "Suggested Investigations",
"investigations__date": "Date",
"investigations__name": "Name",
"investigations__result": "Result",
"investigations__ideal_value": "Ideal Value",
"investigations__range": "Value Range",
"investigations__unit": "Unit",
"patient_consultation__treatment__plan": "Plan",
"patient_consultation__treatment__summary": "Summary",
"patient_consultation__treatment__summary__date": "Date",
"patient_consultation__treatment__summary__spo2": "SpO2",
"patient_consultation__treatment__summary__temperature": "Temperature",
"diagnosis": "Diagnosis",
"diagnosis__principal": "Principal",
"diagnosis__confirmed": "Confirmed",
"diagnosis__provisional": "Provisional",
"diagnosis__unconfirmed": "Unconfirmed",
"diagnosis__differential": "Differential",
"active_prescriptions": "Active Prescriptions",
"prescriptions__medicine": "Medicine",
"prescriptions__route": "Route",
"prescriptions__dosage_frequency": "Dosage & Frequency",
"prescriptions__start_date": "Prescribed On",
"select_facility_for_discharged_patients_warning": "Facility needs to be selected to view discharged patients.",
"duplicate_patient_record_confirmation": "Admit the patient record to your facility by adding the year of birth",
"duplicate_patient_record_rejection": "I confirm that the suspect / patient I want to create is not on the list.",
"duplicate_patient_record_birth_unknown": "Please contact your district care coordinator, the shifting facility or the patient themselves if you are not sure about the patient's year of birth.",
"patient_transfer_birth_match_note": "Note: Year of birth must match the patient to process the transfer request.",
"cover_image_updated_note": "It could take a while to see the updated cover image"
}
"cover_image_updated_note": "It could take a while to see the updated cover image",
"available_features": "Available Features",
"update_facility": "Update Facility",
"configure_facility": "Configure Facility",
"inventory_management": "Inventory Management",
"location_management": "Location Management",
"resource_request": "Resource Request",
"view_asset": "View Assets",
"view_users": "View Users",
"view_abdm_records": "View ABDM Records",
"delete_facility": "Delete Facility",
"central_nursing_station": "Central Nursing Station",
"add_details_of_patient": "Add Details of Patient",
"choose_location": "Choose Location",
"live_monitoring": "Live Monitoring",
"open_live_monitoring": "Open Live Monitoring"
}
7 changes: 4 additions & 3 deletions src/Routers/routes/ConsultationRoutes.tsx
Original file line number Diff line number Diff line change
@@ -5,7 +5,9 @@ import ManagePrescriptions from "../../Components/Medicine/ManagePrescriptions";
import { DailyRoundListDetails } from "../../Components/Patient/DailyRoundListDetails";
import { DailyRounds } from "../../Components/Patient/DailyRounds";
import { ConsultationDetails } from "../../Components/Facility/ConsultationDetails";
import TreatmentSummary from "../../Components/Facility/TreatmentSummary";
import TreatmentSummary, {
ITreatmentSummaryProps,
} from "../../Components/Facility/TreatmentSummary";
import ConsultationDoctorNotes from "../../Components/Facility/ConsultationDoctorNotes";
import PatientConsentRecords from "../../Components/Patient/PatientConsentRecords";
import CriticalCareEditor from "../../Components/LogUpdate/CriticalCareEditor";
@@ -129,12 +131,11 @@ export default {
<ConsultationDetails consultationId={consultationId} tab={"updates"} />
),
"/facility/:facilityId/patient/:patientId/consultation/:consultationId/treatment-summary":
({ facilityId, patientId, consultationId }: any) => (
({ facilityId, patientId, consultationId }: ITreatmentSummaryProps) => (
<TreatmentSummary
facilityId={facilityId}
consultationId={consultationId}
patientId={patientId}
dailyRoundsListData={[]}
/>
),
"/facility/:facilityId/patient/:patientId/consultation/:consultationId/notes":
17 changes: 9 additions & 8 deletions src/Utils/request/handleResponse.ts
Original file line number Diff line number Diff line change
@@ -20,14 +20,15 @@ export default function handleResponse(

// Other Errors between 400-599 (inclusive)
if (res.status >= 400 && res.status < 600) {
// Invalid token
if (!silent && error?.code === "token_not_valid") {
navigate(`/session-expired?redirect=${window.location.href}`);
}

// Handle session expiry
if (error?.detail === "Authentication credentials were not provided.") {
notify?.Error({ msg: "Session expired. Please Login again." });
// Handle invalid token / session expiry
if (
!silent &&
(error?.code === "token_not_valid" ||
error?.detail === "Authentication credentials were not provided.")
) {
if (!location.pathname.startsWith("/session-expired")) {
navigate(`/session-expired?redirect=${window.location.href}`);
}
return;
}

12 changes: 7 additions & 5 deletions src/Utils/useFileUpload.tsx
Original file line number Diff line number Diff line change
@@ -84,11 +84,13 @@ export default function useFileUpload(
const f = e.target.files[0];
const fileName = f.name;
setFile(e.target.files[0]);
setUploadFileName(
uploadFileName ||
fileName.substring(0, fileName.lastIndexOf(".")) ||
fileName,
);

// This is commented out to prompt users to input valid file names. See https://github.com/ohcnetwork/care_fe/issues/7942#issuecomment-2324391329
//setUploadFileName(
// uploadFileName ||
// fileName.substring(0, fileName.lastIndexOf(".")) ||
// fileName,
//);

const ext: string = fileName.split(".")[1];

0 comments on commit 99d2cb6

Please sign in to comment.