Tones/hooks/useCallFeed/useCallFeed.jsx

123 lines
3.7 KiB
React
Raw Normal View History

import React, { useState, useEffect } from 'react';
import { useDepartments } from '../useDepartments';
2025-04-19 06:36:25 +00:00
import { C, Cardiology, Cpr, FourByFour } from "healthicons-react-native/dist/outline";
import { useNotifications, useWebSocketContext } from '@/hooks';
const callIconMap = {
"CHEST PAIN|HEART PROBLEMS": Cardiology,
"CARDIAC ARREST|DEATH": Cpr,
"MOTOR VEHICLE COLLISION (MVC)": FourByFour,
}
// Squares
// Cariology - Heart
// BurnUnit - Fire
// AccidentAndEmergency - Misc.
// Rheumatology - Bone/Crash
// Sonography - Baby
// PainManagement - CPR/Cardiac Arrest
// Respiratory - Diff Breathing
// Others
// HeartOrgan - Heart
// Burn - Burns
// FHIR - Structure Fire
// Sonogram - Baby
// SUV - Crash
// Joints - Bone
// Pain - CPR/Cardiac Arrest
// Skull - CPR/Cardiac Arrest
// CPR - CPR/Cardiac Arrest
// Pneumonia - Diff Breathing
// CoughingAlt - Diff Breathing
// Diabetes - Diabetic Emergency
// BloodDrop - Bleeding Emergencies
// Bacteria - Sick
// RuralClinic - Medical Facility Response
2025-04-19 06:36:25 +00:00
const formatCallTimePast = (callValue) => {
const initDate = new Date(callValue);
const currentTime = new Date();
const timeDifference = currentTime - initDate;
const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
if (days && days !== 0) {
return `${days} day${days === 1 ? '' : 's'} ago`;
} else if (hours && hours !== 0) {
return `${hours} hour${hours === 1 ? '' : 's'} ago`;
} else if (minutes && minutes !== 0) {
return `${minutes} minute${minutes === 1 ? '' : 's'} ago`;
} else if (seconds && seconds !== 0) {
return `${seconds} second${seconds === 1 ? '' : 's'} ago`;
}
return `Unknown Time Past`;
}
const formatCallDateTime = (callValue) => {
const initDate = new Date(callValue);
if (initDate) {
const formattedDate = `${initDate.toLocaleDateString('en-US', {
month: 'short',
day: 'numeric',
year: 'numeric',
})}`;
const hours = initDate.getHours().toString().padStart(2, '0');
const minutes = initDate.getMinutes().toString().padStart(2, '0');
const formattedTime = `${hours}:${minutes}`;
2025-04-19 06:36:25 +00:00
return `${formattedDate} - ${formattedTime}`;
}
return 'Date Unavailable';
2025-04-19 06:36:25 +00:00
}
export const useCallFeed = () => {
const departments = useDepartments();
2025-04-19 06:36:25 +00:00
const { lastMessage } = useWebSocketContext();
const [allCalls, setAllCalls] = useState([]);
const { CallThemes } = departments?.accountDetails;
const {
CriticalCallList,
HighCallList,
MediumCallList,
LowCallList,
} = CallThemes;
2025-04-19 06:36:25 +00:00
useEffect(() => {
if (lastMessage) {
const parsedMessage = JSON?.parse(lastMessage);
if (parsedMessage?.data) {
setAllCalls([...allCalls, parsedMessage]);
2025-04-19 06:36:25 +00:00
}
}
2025-04-19 06:36:25 +00:00
}, [lastMessage]);
const callColorSelector = (callAcuity, cardiacArrestCall, status) => {
if (status === 'CLOSED') {
return '#0000CD';
} else if (CriticalCallList.includes(cardiacArrestCall)) {
return '#8B0000';
} else if (HighCallList.includes(callAcuity)) {
return "#FF0000";
} else if (MediumCallList.includes(callAcuity)) {
return "#FF8C00";
} else if (LowCallList.includes(callAcuity)) {
return "#228B22";
}
return 'grey';
};
return {
departments,
callIconMap,
2025-04-19 06:36:25 +00:00
callDetails: allCalls,
callColorSelector,
2025-04-19 06:36:25 +00:00
formatCallTimePast,
formatCallDateTime
}
}