64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import { utils } from '@ohif/core';
|
|
|
|
const { formatPN, formatDate } = utils;
|
|
|
|
function usePatientInfo(servicesManager: AppTypes.ServicesManager) {
|
|
const { displaySetService } = servicesManager.services;
|
|
|
|
const [patientInfo, setPatientInfo] = useState({
|
|
PatientName: '',
|
|
PatientID: '',
|
|
PatientSex: '',
|
|
PatientDOB: '',
|
|
});
|
|
const [isMixedPatients, setIsMixedPatients] = useState(false);
|
|
const displaySets = displaySetService.getActiveDisplaySets();
|
|
|
|
const checkMixedPatients = PatientID => {
|
|
const displaySets = displaySetService.getActiveDisplaySets();
|
|
let isMixedPatients = false;
|
|
displaySets.forEach(displaySet => {
|
|
const instance = displaySet?.instances?.[0] || displaySet?.instance;
|
|
if (!instance) {
|
|
return;
|
|
}
|
|
if (instance.PatientID !== PatientID) {
|
|
isMixedPatients = true;
|
|
}
|
|
});
|
|
setIsMixedPatients(isMixedPatients);
|
|
};
|
|
|
|
const updatePatientInfo = () => {
|
|
const displaySet = displaySets[0];
|
|
const instance = displaySet?.instances?.[0] || displaySet?.instance;
|
|
if (!instance) {
|
|
return;
|
|
}
|
|
setPatientInfo({
|
|
PatientID: instance.PatientID || null,
|
|
PatientName: instance.PatientName ? formatPN(instance.PatientName.Alphabetic) : null,
|
|
PatientSex: instance.PatientSex || null,
|
|
PatientDOB: formatDate(instance.PatientBirthDate) || null,
|
|
});
|
|
checkMixedPatients(instance.PatientID || null);
|
|
};
|
|
|
|
useEffect(() => {
|
|
const subscription = displaySetService.subscribe(
|
|
displaySetService.EVENTS.DISPLAY_SETS_ADDED,
|
|
() => updatePatientInfo()
|
|
);
|
|
return () => subscription.unsubscribe();
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
updatePatientInfo();
|
|
}, [displaySets]);
|
|
|
|
return { patientInfo, isMixedPatients };
|
|
}
|
|
|
|
export default usePatientInfo;
|