Skip to content

Commit

Permalink
Merge branch 'develop' into medication-request-figma
Browse files Browse the repository at this point in the history
  • Loading branch information
amjithtitus09 authored Jan 9, 2025
2 parents 9cf14d6 + f0589e6 commit ad111dd
Show file tree
Hide file tree
Showing 10 changed files with 180 additions and 206 deletions.
27 changes: 24 additions & 3 deletions public/locale/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
"CONSCIOUSNESS_LEVEL__RESPONDS_TO_PAIN": "Responds to Pain",
"CONSCIOUSNESS_LEVEL__RESPONDS_TO_VOICE": "Responds to Voice",
"CONSCIOUSNESS_LEVEL__UNRESPONSIVE": "Unresponsive",
"Cancel": "Cancel",
"DAYS_OF_WEEK_SHORT__0": "Mon",
"DAYS_OF_WEEK_SHORT__1": "Tue",
"DAYS_OF_WEEK_SHORT__2": "Wed",
Expand Down Expand Up @@ -356,6 +355,7 @@
"age_input_warning_bold": "Recommended only when the patient's date of birth is unknown",
"age_less_than_0": "Age cannot be less than 0",
"age_notice": "Only year of birth will be stored for age.",
"ago": "ago",
"all": "All",
"all_changes_have_been_saved": "All changes have been saved",
"all_details": "All Details",
Expand Down Expand Up @@ -488,6 +488,7 @@
"cancelled": "Cancelled",
"capture": "Capture",
"capture_cover_photo": "Capture Cover Photo",
"card": "Card",
"care": "CARE",
"category": "Category",
"caution": "Caution",
Expand Down Expand Up @@ -660,6 +661,7 @@
"csv_file_in_the_specified_format": "Select a CSV file in the specified format",
"current_address": "Current Address",
"current_password": "Current Password",
"current_role": "Current Role",
"current_status": "Current Status",
"customer_support_email": "Customer Support Email",
"customer_support_name": "Customer Support Name",
Expand All @@ -680,7 +682,6 @@
"date_of_return": "Date of Return",
"date_of_test": "Date of sample collection for Covid testing",
"day": "Day",
"days": "Days",
"death_report": "Death Report",
"delete": "Delete",
"delete_account": "Delete account",
Expand Down Expand Up @@ -769,7 +770,9 @@
"edit_policy_description": "Add or edit patient's insurance details",
"edit_prescriptions": "Edit Prescriptions",
"edit_profile": "Edit Profile",
"edit_role": "Edit Role",
"edit_user_profile": "Edit Profile",
"edit_user_role": "Edit User Role",
"edited_by": "Edited by",
"edited_on": "Edited on",
"education": "Education",
Expand Down Expand Up @@ -1035,7 +1038,6 @@
"home_facility_cleared_success": "Home Facility cleared successfully",
"home_facility_updated_error": "Error while updating Home Facility",
"home_facility_updated_success": "Home Facility updated successfully",
"hours": "hours",
"hubs": "Hub Facilities",
"i_declare": "I hereby declare that:",
"icd11_as_recommended": "As per ICD-11 recommended by WHO",
Expand Down Expand Up @@ -1121,6 +1123,7 @@
"last_administered": "Last administered",
"last_discharge_reason": "Last Discharge Reason",
"last_edited": "Last Edited",
"last_login": "Last Login",
"last_modified": "Last Modified",
"last_modified_by": "Last Modified By",
"last_name": "Last Name",
Expand Down Expand Up @@ -1235,6 +1238,7 @@
"nationality": "Nationality",
"nearby_facilities": "Nearby Facilities",
"never": "never",
"never_logged_in": "Never Logged In",
"new_password": "New Password",
"new_password_confirmation": "Confirm New Password",
"new_password_same_as_old": "New password is same as old password, please enter a different new password.",
Expand Down Expand Up @@ -1270,6 +1274,8 @@
"no_notices_for_you": "No notices for you.",
"no_observations": "No Observations",
"no_ongoing_medications": "No Ongoing Medications",
"no_patient_record_found": "No Patient Records Found",
"no_patient_record_text": "No existing records found with this phone number. Would you like to register a new patient?",
"no_patients": "No patients found",
"no_patients_found": "No Patients Found",
"no_patients_found_phone_number": "No patients found with this phone number. Please create a new patient to proceed with booking appointment.",
Expand Down Expand Up @@ -1369,6 +1375,7 @@
"patient__social-profile": "Social Profile",
"patient__volunteer-contact": "Volunteer Contact",
"patient_address": "Patient Address",
"patient_birth_year_for_identity": "Please enter the patient's year of birth to verify their identity",
"patient_body": "Patient Body",
"patient_category": "Patient Category",
"patient_consultation__admission": "Date of admission",
Expand Down Expand Up @@ -1548,6 +1555,8 @@
"reload": "Reload",
"remove": "Remove",
"remove_user": "Remove User",
"remove_user_organization": "Remove User from Organization",
"remove_user_warn": "Are you sure you want to remove {{firstName}} {{lastName}} from this organization? This action cannot be undone.",
"rename": "Rename",
"replace_home_facility": "Replace Home Facility",
"replace_home_facility_confirm": "Are you sure you want to replace",
Expand Down Expand Up @@ -1635,6 +1644,7 @@
"search_investigation_placeholder": "Search Investigation & Groups",
"search_medication": "Search Medication",
"search_medications": "Search for medications to add",
"search_patient_page_text": "Search for existing patients using their phone number or create a new patient record",
"search_patients": "Search Patients",
"search_resource": "Search Resource",
"search_user": "Search User",
Expand All @@ -1646,7 +1656,9 @@
"select_all": "Select All",
"select_date": "Select date",
"select_department": "Select Department",
"select_diff_role": "Please select a different role",
"select_eligible_policy": "Select an Eligible Insurance Policy",
"select_facility": "Select Facility",
"select_facility_for_discharged_patients_warning": "Facility needs to be selected to view discharged patients.",
"select_for_administration": "Select for Administration",
"select_frequency": "Select frequency",
Expand All @@ -1657,6 +1669,7 @@
"select_investigations": "Select Investigations",
"select_local_body": "Select Local Body",
"select_method": "Select method",
"select_new_role": "Select New Role",
"select_patient": "Select Patient",
"select_policy": "Select an Insurance Policy",
"select_policy_to_add_items": "Select a Policy to Add Items",
Expand Down Expand Up @@ -1847,9 +1860,11 @@
"update_preset_position_to_current": "Update preset's position to camera's current position",
"update_record": "Update Record",
"update_record_for_asset": "Update record for asset",
"update_role": "Update Role",
"update_shift_request": "Update Shift Request",
"update_status": "Update Status",
"update_status_details": "Update Status/Details",
"update_user_role_organization": "Update the role for this user in the organization",
"update_volunteer": "Reassign Volunteer",
"updated": "Updated",
"updated_on": "Updated On",
Expand Down Expand Up @@ -1879,6 +1894,8 @@
"user_not_available_for_appointments": "This user is not available for appointments",
"user_qualifications": "Qualifications",
"user_qualifications_note": "Enter appropriate qualifications for this user",
"user_removed_success": "User removed from organization successfully",
"user_role_update_success": "User role updated successfully",
"user_type": "User Type",
"username": "Username",
"username_already_exists": "This username already exists",
Expand All @@ -1890,6 +1907,7 @@
"vaccinated": "Vaccinated",
"vaccine_name": "Vaccine name",
"valid_otp_found": "Valid OTP found, Navigating to Appointments",
"valid_year_of_birth": "Please enter a valid year of birth (YYYY)",
"vehicle_preference": "Vehicle preference",
"vendor_name": "Vendor Name",
"ventilator_interface": "Respiratory Support Type",
Expand All @@ -1899,13 +1917,15 @@
"ventilator_oxygen_modality": "Oxygen Modality",
"ventilator_oxygen_modality_oxygen_rate": "Oxygen Flow Rate",
"ventilator_spo2": "SpO₂",
"verify": "Verify",
"verify_and_link": "Verify and Link",
"verify_otp": "Verify OTP",
"verify_otp_error": "Failed to verify OTP. Please try again later.",
"verify_otp_success": "OTP has been verified successfully.",
"verify_otp_success_login": "OTP has been verified successfully. Logging in.",
"verify_patient": "Verify Patient",
"verify_patient_identifier": "Please verify the patient identifier",
"verify_patient_identity": "Verify Patient Identity",
"verify_using": "Verify Using",
"video_call": "Video Call",
"video_conference_link": "Video Conference Link",
Expand All @@ -1916,6 +1936,7 @@
"view_cns": "View CNS",
"view_consultation": "View Latest Encounter",
"view_consultation_and_log_updates": "View Consultation / Log Updates",
"view_dashboard": "View Dashboard",
"view_details": "View Details",
"view_facility": "View Facility",
"view_files": "View Files",
Expand Down
28 changes: 7 additions & 21 deletions src/components/Common/FilePreviewDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
useState,
} from "react";
import { useTranslation } from "react-i18next";
import useKeyboardShortcut from "use-keyboard-shortcut";

import CareIcon, { IconName } from "@/CAREUI/icons/CareIcon";

Expand Down Expand Up @@ -152,20 +153,11 @@ const FilePreviewDialog = (props: FilePreviewProps) => {
: `rotate-${normalizedRotation}`;
}

useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if (!show) return;
if (e.key === "ArrowLeft" && index > 0) {
handleNext(index - 1);
}
if (e.key === "ArrowRight" && index < (uploadedFiles?.length || 0) - 1) {
handleNext(index + 1);
}
};

window.addEventListener("keydown", handleKeyDown);
return () => window.removeEventListener("keydown", handleKeyDown);
}, [show, index, uploadedFiles]);
useKeyboardShortcut(["ArrowLeft"], () => index > 0 && handleNext(index - 1));
useKeyboardShortcut(
["ArrowRight"],
() => index < (uploadedFiles?.length || 0) - 1 && handleNext(index + 1),
);

return (
<DialogModal
Expand Down Expand Up @@ -199,7 +191,7 @@ const FilePreviewDialog = (props: FilePreviewProps) => {
uploadedFiles[index] &&
uploadedFiles[index].created_date && (
<p className="mt-1 text-sm text-gray-600">
Created on{" "}
{t("created_on")}{" "}
{new Date(
uploadedFiles[index].created_date!,
).toLocaleString("en-US", {
Expand Down Expand Up @@ -235,9 +227,6 @@ const FilePreviewDialog = (props: FilePreviewProps) => {
onClick={() => handleNext(index - 1)}
disabled={index <= 0}
aria-label="Previous file"
onKeyDown={(e) =>
e.key === "ArrowLeft" && handleNext(index - 1)
}
>
<CareIcon icon="l-arrow-left" className="h-4 w-4" />
</Button>
Expand Down Expand Up @@ -288,9 +277,6 @@ const FilePreviewDialog = (props: FilePreviewProps) => {
onClick={() => handleNext(index + 1)}
disabled={index >= uploadedFiles.length - 1}
aria-label="Next file"
onKeyDown={(e) =>
e.key === "ArrowRight" && handleNext(index + 1)
}
>
<CareIcon icon="l-arrow-right" className="h-4 w-4" />
</Button>
Expand Down
49 changes: 20 additions & 29 deletions src/components/Patient/PatientIndex.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { useMutation } from "@tanstack/react-query";
import { navigate } from "raviger";
import { useCallback, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import useKeyboardShortcut from "use-keyboard-shortcut";

import { cn } from "@/lib/utils";

Expand Down Expand Up @@ -51,6 +53,7 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
results: [],
count: 0,
});
const { t } = useTranslation();

const handleCreatePatient = useCallback(() => {
const queryParams = phoneNumber ? { phone_number: phoneNumber } : {};
Expand All @@ -60,6 +63,8 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
});
}, [facilityId, phoneNumber]);

useKeyboardShortcut(["shift", "p"], handleCreatePatient);

function AddPatientButton({ outline }: { outline?: boolean }) {
return (
<Button
Expand All @@ -68,7 +73,7 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
onClick={handleCreatePatient}
>
<CareIcon icon="l-plus" className="h-4 w-4" />
Add New Patient
{t("add_new_patient")}
<kbd
className={cn(
"hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium opacity-100 sm:flex",
Expand All @@ -87,7 +92,7 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
{
key: "phone_number",
type: "phone" as const,
placeholder: "Search by phone number",
placeholder: t("search_by_phone_number"),
value: phoneNumber,
shortcutKey: "p",
},
Expand Down Expand Up @@ -122,7 +127,7 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {

const handleVerify = () => {
if (!selectedPatient || !yearOfBirth || yearOfBirth.length !== 4) {
toast.error("Please enter a valid year of birth (YYYY)");
toast.error(t("valid_year_of_birth"));
return;
}

Expand All @@ -141,18 +146,6 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
}
}, [phoneNumber, listPatients]);

useEffect(() => {
function handleKeyPress(event: KeyboardEvent) {
if (event.shiftKey && (event.key === "p" || event.key === "P")) {
event.preventDefault();
handleCreatePatient();
}
}

window.addEventListener("keydown", handleKeyPress);
return () => window.removeEventListener("keydown", handleKeyPress);
}, [handleCreatePatient]);

return (
<div>
<div className="container max-w-5xl mx-auto py-6">
Expand All @@ -162,11 +155,10 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
<div className="space-y-6 mt-6">
<div className="text-center space-y-2">
<h1 className="text-3xl font-bold tracking-tight">
Search Patients
{t("search_patients")}
</h1>
<p className="text-muted-foreground">
Search for existing patients using their phone number or create a
new patient record
{t("search_patient_page_text")}
</p>
</div>

Expand All @@ -190,11 +182,10 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
<div>
<div className="flex flex-col items-center justify-center py-10 text-center">
<h3 className="text-lg font-semibold">
No Patient Records Found
{t("no_patient_record_found")}
</h3>
<p className="text-sm text-muted-foreground mb-6">
No existing records found with this phone number.
Would you like to register a new patient?
{t("no_patient_record_text")}
</p>
<AddPatientButton outline />
</div>
Expand All @@ -205,10 +196,10 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
<TableHeader>
<TableRow>
<TableHead className="w-[300px]">
Patient Name
{t("patient_name")}
</TableHead>
<TableHead>Phone Number</TableHead>
<TableHead>Gender</TableHead>
<TableHead>{t("phone_number")}</TableHead>
<TableHead>{t("gender")}</TableHead>
</TableRow>
</TableHeader>
<TableBody>
Expand Down Expand Up @@ -246,15 +237,15 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
<Dialog open={verificationOpen} onOpenChange={setVerificationOpen}>
<DialogContent>
<DialogHeader>
<DialogTitle>Verify Patient Identity</DialogTitle>
<DialogTitle>{t("verify_patient_identity")}</DialogTitle>
<DialogDescription>
Please enter the patient's year of birth to verify their identity
{t("patient_birth_year_for_identity")}
</DialogDescription>
</DialogHeader>
<div className="py-4">
<Input
type="text"
placeholder="Year of Birth (YYYY)"
placeholder={`${t("year_of_birth")} (YYYY)`}
value={yearOfBirth}
onChange={(e) => {
const value = e.target.value;
Expand All @@ -269,9 +260,9 @@ export default function PatientIndex({ facilityId }: { facilityId: string }) {
variant="outline"
onClick={() => setVerificationOpen(false)}
>
Cancel
{t("cancel")}
</Button>
<Button onClick={handleVerify}>Verify</Button>
<Button onClick={handleVerify}>{t("verify")}</Button>
</DialogFooter>
</DialogContent>
</Dialog>
Expand Down
Loading

0 comments on commit ad111dd

Please sign in to comment.