Spaces:
Build error
Build error
import { useState } from 'react' | |
import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/24/outline' | |
import classNames from '@/utils/classnames' | |
export type IItem = { | |
key: string | |
name: string | |
} | |
type ICollapse = { | |
title: string | undefined | |
items: IItem[] | |
renderItem: (item: IItem) => React.ReactNode | |
onSelect?: (item: IItem) => void | |
wrapperClassName?: string | |
} | |
const Collapse = ({ | |
title, | |
items, | |
renderItem, | |
onSelect, | |
wrapperClassName, | |
}: ICollapse) => { | |
const [open, setOpen] = useState(false) | |
const toggle = () => setOpen(!open) | |
return ( | |
<div className={classNames('border border-gray-200 bg-gray-50 rounded-lg', wrapperClassName)}> | |
<div className='flex items-center justify-between leading-[18px] px-3 py-2 text-xs font-medium text-gray-800 cursor-pointer' onClick={toggle}> | |
{title} | |
{ | |
open | |
? <ChevronDownIcon className='w-3 h-3 text-gray-400' /> | |
: <ChevronRightIcon className='w-3 h-3 text-gray-400' /> | |
} | |
</div> | |
{ | |
open && ( | |
<div className='py-2 border-t border-t-gray-100'> | |
{ | |
items.map(item => ( | |
<div key={item.key} onClick={() => onSelect && onSelect(item)}> | |
{renderItem(item)} | |
</div> | |
)) | |
} | |
</div> | |
) | |
} | |
</div> | |
) | |
} | |
export default Collapse | |