2023-09-29 16:01:27 +02:00
|
|
|
// __SDEFILE__ - This file is a dependency for the stand-alone environment
|
2023-08-27 16:24:18 +02:00
|
|
|
import { useState } from 'react'
|
2023-08-30 16:57:46 +02:00
|
|
|
|
2023-08-27 16:24:18 +02:00
|
|
|
/*
|
|
|
|
* DaisyUI's accordion seems rather unreliable.
|
|
|
|
* So instead, we handle this in React state
|
|
|
|
*/
|
2023-08-30 16:57:46 +02:00
|
|
|
const getProps = (active, i) => ({
|
|
|
|
className: `p-2 px-4 rounded-lg bg-transparent shadow
|
|
|
|
w-full mt-2 py-4 h-auto content-start text-left bg-opacity-20
|
|
|
|
${active === i ? 'hover:bg-transparent' : 'hover:bg-secondary hover:bg-opacity-10'}`,
|
|
|
|
})
|
2023-08-27 16:24:18 +02:00
|
|
|
|
2023-08-30 16:57:46 +02:00
|
|
|
const getSubProps = (active, i) => ({
|
|
|
|
className: ` p-2 px-4 rounded bg-transparent w-full mt-2 py-4 h-auto
|
|
|
|
content-start bg-secondary text-left bg-opacity-20
|
|
|
|
${
|
|
|
|
active === i
|
|
|
|
? 'bg-opacity-100 hover:bg-transparent shadow'
|
|
|
|
: 'hover:bg-opacity-10 hover:bg-secondary '
|
|
|
|
}`,
|
|
|
|
})
|
2023-08-27 16:24:18 +02:00
|
|
|
|
2023-08-30 16:57:46 +02:00
|
|
|
const BaseAccordion = ({
|
2023-08-27 16:24:18 +02:00
|
|
|
items, // Items in the accordion
|
2023-08-30 16:57:46 +02:00
|
|
|
propsGetter = getProps, // Method to get the relevant props
|
2023-08-27 16:24:18 +02:00
|
|
|
}) => {
|
|
|
|
const [active, setActive] = useState()
|
|
|
|
|
|
|
|
return (
|
|
|
|
<nav>
|
2023-09-09 15:31:53 +02:00
|
|
|
{items
|
|
|
|
.filter((item) => item[0])
|
|
|
|
.map((item, i) =>
|
|
|
|
active === i ? (
|
|
|
|
<div key={i} {...propsGetter(active, i)}>
|
|
|
|
<button onClick={setActive} className="w-full">
|
|
|
|
{item[0]}
|
|
|
|
</button>
|
|
|
|
{item[1]}
|
|
|
|
</div>
|
|
|
|
) : (
|
|
|
|
<button key={i} {...getProps(active, i)} onClick={() => setActive(i)}>
|
2023-08-30 16:57:46 +02:00
|
|
|
{item[0]}
|
|
|
|
</button>
|
2023-09-09 15:31:53 +02:00
|
|
|
)
|
|
|
|
)}
|
2023-08-27 16:24:18 +02:00
|
|
|
</nav>
|
|
|
|
)
|
|
|
|
}
|
2023-08-30 16:57:46 +02:00
|
|
|
|
|
|
|
export const SubAccordion = (props) => <BaseAccordion {...props} propsGetter={getProps} />
|
|
|
|
export const Accordion = (props) => <BaseAccordion {...props} propsGetter={getSubProps} />
|