import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Select, SelectItem } from '@carbon/react'; import { useStandardRegimen } from '../hooks/useStandardRegimen'; import styles from './standard-regimen.scss'; import { useNonStandardRegimen } from '../hooks/useNonStandardRegimen'; import { Regimen } from '../types'; import { usePatient } from '@openmrs/esm-framework'; import { calculateAge, filterRegimenData } from './utils'; interface NonStandardRegimenProps { category: string; setNonStandardRegimens: (value: any) => void; setStandardRegimenLine: (value: string) => void; selectedRegimenType: string; visitDate: Date; errors: { [key: string]: string }; } const NonStandardRegimen: React.FC = ({ category, selectedRegimenType, setNonStandardRegimens, setStandardRegimenLine, visitDate, errors, }) => { const { t } = useTranslation(); const { standardRegimen } = useStandardRegimen(); const { nonStandardRegimen, isLoading, error } = useNonStandardRegimen(); const [selectedRegimenLine, setSelectedRegimenLine] = useState(''); const matchingCategory = standardRegimen.find((item) => item.categoryCode === 'ARV'); // Non standard regimen will be exclusively for ARVs const [selectedRegimens, setSelectedRegimens] = useState(Array(5).fill('')); const [nonStandardRegimenObjects, setStandardRegimenObjects] = useState([]); const { patient } = usePatient(); const patientAge = calculateAge(patient?.birthDate, visitDate); const filteredRegimenLineByAge = filterRegimenData(matchingCategory?.category, patientAge); const handleRegimenLineChange = (e) => { setSelectedRegimenLine(e.target.value); setStandardRegimenLine(e.target.value); }; const handleRegimenChange = (index, value) => { const newSelectedRegimens = [...selectedRegimens]; newSelectedRegimens[index] = value; setSelectedRegimens(newSelectedRegimens); }; useEffect(() => { const generateRegimenObjects = () => { return selectedRegimens .map((uuid) => { const regimen = nonStandardRegimen.find((r) => r.uuid === uuid); if (regimen) { return { value: regimen.uuid, concept: Regimen.nonStandardRegimenConcept, }; } return null; }) .filter((obj) => obj); }; setStandardRegimenObjects(generateRegimenObjects()); }, [selectedRegimens, nonStandardRegimen]); useEffect(() => { if (selectedRegimenLine) { setNonStandardRegimens(nonStandardRegimenObjects); } }, [selectedRegimenLine, nonStandardRegimenObjects, setNonStandardRegimens]); return (
<> {selectedRegimenType === 'nonStandardUuid' ? ( ) : null} {selectedRegimenLine && (
{errors?.nonStandardRegimens &&
{errors.nonStandardRegimens}
} {selectedRegimens?.map((selectedRegimen, index) => { const availableRegimens = nonStandardRegimen.filter( (regimen) => !selectedRegimens.includes(regimen.uuid) || regimen.uuid === selectedRegimen, ); return ( ); })}
)}
); }; export default NonStandardRegimen;