Skip to content

Commit 91712ff

Browse files
committed
BN-75 | Make Accordian by default expanded for lat 2 visits
1 parent d9586dd commit 91712ff

File tree

1 file changed

+73
-31
lines changed

1 file changed

+73
-31
lines changed

src/displayControls/diagnoses/DiagnosesControl.tsx

Lines changed: 73 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useState, useEffect } from 'react';
22
import { Accordion, AccordionItem } from '@carbon/react';
33
import { useTranslation } from 'react-i18next';
44
import * as styles from './styles/Diagnoses.module.scss';
@@ -12,6 +12,38 @@ import { DiagnosesByDate } from '@/types/diagnosis';
1212
const DiagnosesControl: React.FC = () => {
1313
const { t } = useTranslation();
1414
const { diagnosesByDate, isLoading, isError } = useDiagnoses();
15+
const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());
16+
const [isMainAccordionExpanded, setIsMainAccordionExpanded] = useState(true);
17+
18+
// Set the last two visits (first two date groups) to be expanded by default
19+
useEffect(() => {
20+
if (diagnosesByDate.length > 0) {
21+
const lastTwoVisits = new Set<string>();
22+
23+
// Add the first two date groups (most recent visits) to expanded set
24+
for (let i = 0; i < Math.min(2, diagnosesByDate.length); i++) {
25+
lastTwoVisits.add(diagnosesByDate[i].rawDate);
26+
}
27+
28+
setExpandedItems(lastTwoVisits);
29+
}
30+
}, [diagnosesByDate]);
31+
32+
const handleAccordionChange = (rawDate: string) => {
33+
setExpandedItems(prev => {
34+
const newSet = new Set(prev);
35+
if (newSet.has(rawDate)) {
36+
newSet.delete(rawDate);
37+
} else {
38+
newSet.add(rawDate);
39+
}
40+
return newSet;
41+
});
42+
};
43+
44+
const handleMainAccordionChange = () => {
45+
setIsMainAccordionExpanded(prev => !prev);
46+
};
1547

1648
if (isLoading && diagnosesByDate.length === 0) {
1749
return <div>{t('DIAGNOSES_LOADING')}</div>;
@@ -21,39 +53,49 @@ const DiagnosesControl: React.FC = () => {
2153
return <div>{t('DIAGNOSES_ERROR_LOADING')}</div>;
2254
}
2355

24-
if (!isLoading && diagnosesByDate.length === 0) {
25-
return <div className={styles.noData}>{t('DIAGNOSES_NO_DIAGNOSES')}</div>;
26-
}
27-
2856
return (
2957
<section className={styles.diagnosesWrapper} data-testid="diagnoses-control">
3058
<Accordion>
31-
<AccordionItem title={t('DIAGNOSES_FORM_TITLE')} className={styles.accordionItem}>
32-
{/* Table Header */}
33-
<div className={styles.tableHeader}>
34-
<div className={styles.diagnosesColumn}>Diagnoses</div>
35-
<div className={styles.recordedByColumn}>Recorded by</div>
36-
</div>
37-
38-
{/* Date Groups */}
39-
<Accordion align="start" size="lg">
40-
{diagnosesByDate.map((dateGroup: DiagnosesByDate) => (
41-
<AccordionItem
42-
key={dateGroup.rawDate}
43-
className={styles.accordionItem}
44-
title={dateGroup.date}
45-
>
46-
<div>
47-
{dateGroup.diagnoses.map((diagnosis, diagnosisIndex) => (
48-
<DiagnosisItem
49-
key={diagnosis.id || diagnosisIndex}
50-
diagnosis={diagnosis}
51-
/>
52-
))}
53-
</div>
54-
</AccordionItem>
55-
))}
56-
</Accordion>
59+
<AccordionItem
60+
title={t('DIAGNOSES_FORM_TITLE')}
61+
className={styles.accordionItem}
62+
open={isMainAccordionExpanded}
63+
onHeadingClick={handleMainAccordionChange}
64+
>
65+
{!isLoading && diagnosesByDate.length === 0 ? (
66+
// Show no data message inside the accordion when there are no diagnoses
67+
<div className={styles.noData}>{t('DIAGNOSES_NO_DIAGNOSES')}</div>
68+
) : (
69+
<>
70+
{/* Table Header */}
71+
<div className={styles.tableHeader}>
72+
<div className={styles.diagnosesColumn}>Diagnoses</div>
73+
<div className={styles.recordedByColumn}>Recorded by</div>
74+
</div>
75+
76+
{/* Date Groups */}
77+
<Accordion align="start" size="lg">
78+
{diagnosesByDate.map((dateGroup: DiagnosesByDate) => (
79+
<AccordionItem
80+
key={dateGroup.rawDate}
81+
className={styles.accordionItem}
82+
title={dateGroup.date}
83+
open={expandedItems.has(dateGroup.rawDate)}
84+
onHeadingClick={() => handleAccordionChange(dateGroup.rawDate)}
85+
>
86+
<div>
87+
{dateGroup.diagnoses.map((diagnosis, diagnosisIndex) => (
88+
<DiagnosisItem
89+
key={diagnosis.id || diagnosisIndex}
90+
diagnosis={diagnosis}
91+
/>
92+
))}
93+
</div>
94+
</AccordionItem>
95+
))}
96+
</Accordion>
97+
</>
98+
)}
5799
</AccordionItem>
58100
</Accordion>
59101
</section>

0 commit comments

Comments
 (0)