Skip to content

Commit

Permalink
Fix: update accordion component to use min-height for smoother transi…
Browse files Browse the repository at this point in the history
…tions
  • Loading branch information
aelassas committed Feb 13, 2025
1 parent 89484ea commit b885ca1
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 15 deletions.
5 changes: 3 additions & 2 deletions backend/src/assets/css/accordion.css
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@ div.accordion-container span.accordion-active::after {

div.accordion-container div.panel {
max-height: 0;
min-height: 0;
overflow: hidden;
transition: max-height 0.23s ease-out;
transition: min-height 0.23s ease-out;
}

div.accordion-container div.panel-collapse {
overflow: hidden;
transition: max-height 0.23s ease-out;
transition: min-height 0.23s ease-out;
}
16 changes: 10 additions & 6 deletions backend/src/components/Accordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,25 @@ const Accordion = ({
offsetHeight = 0,
children
}: AccordionProps) => {
const accordionRef = useRef<HTMLSpanElement>(null)
const accordionRef = useRef<HTMLLabelElement>(null)

const handleAccordionClick = (e: React.MouseEvent<HTMLElement>) => {
e.currentTarget.classList.toggle('accordion-active')
const panel = e.currentTarget.nextElementSibling as HTMLDivElement
const _collapse = panel.classList.contains('panel-collapse')

if (panel.style.maxHeight || _collapse) {
if (panel.style.minHeight || _collapse) {
if (_collapse) {
panel.classList.remove('panel-collapse')
panel.classList.add('panel')
panel.style.minHeight = ''
panel.style.maxHeight = '0'
}

panel.style.maxHeight = ''
} else {
panel.style.maxHeight = `${panel.scrollHeight}px`
panel.style.minHeight = `${panel.scrollHeight}px`
panel.style.maxHeight = ''
panel.classList.remove('panel')
panel.classList.add('panel-collapse')
}
}

Expand All @@ -45,7 +48,8 @@ const Accordion = ({
useEffect(() => {
if (collapse && accordionRef.current) {
const panel = accordionRef.current.nextElementSibling as HTMLDivElement
panel.style.maxHeight = `${panel.scrollHeight + offsetHeight}px`
panel.style.minHeight = `${panel.scrollHeight + offsetHeight}px`
panel.style.maxHeight = ''
}
}, [offsetHeight]) // eslint-disable-line react-hooks/exhaustive-deps

Expand Down
5 changes: 3 additions & 2 deletions frontend/src/assets/css/accordion.css
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@ div.accordion-container span.accordion-active::after {

div.accordion-container div.panel {
max-height: 0;
min-height: 0;
overflow: hidden;
transition: max-height 0.23s ease-out;
transition: min-height 0.23s ease-out;
}

div.accordion-container div.panel-collapse {
overflow: hidden;
transition: max-height 0.23s ease-out;
transition: min-height 0.23s ease-out;
}
14 changes: 9 additions & 5 deletions frontend/src/components/Accordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@ const Accordion = ({
const panel = e.currentTarget.nextElementSibling as HTMLDivElement
const _collapse = panel.classList.contains('panel-collapse')

if (panel.style.maxHeight || _collapse) {
if (panel.style.minHeight || _collapse) {
if (_collapse) {
panel.classList.remove('panel-collapse')
panel.classList.add('panel')
panel.style.minHeight = ''
panel.style.maxHeight = '0'
}

panel.style.maxHeight = ''
} else {
panel.style.maxHeight = `${panel.scrollHeight}px`
panel.style.minHeight = `${panel.scrollHeight}px`
panel.style.maxHeight = ''
panel.classList.remove('panel')
panel.classList.add('panel-collapse')
}
}

Expand All @@ -45,7 +48,8 @@ const Accordion = ({
useEffect(() => {
if (collapse && accordionRef.current) {
const panel = accordionRef.current.nextElementSibling as HTMLDivElement
panel.style.maxHeight = `${panel.scrollHeight + offsetHeight}px`
panel.style.minHeight = `${panel.scrollHeight + offsetHeight}px`
panel.style.maxHeight = ''
}
}, [offsetHeight]) // eslint-disable-line react-hooks/exhaustive-deps

Expand Down

0 comments on commit b885ca1

Please sign in to comment.