Spaces:
Running
Running
| import { ChevronDownIcon } from "@heroicons/react/solid"; | |
| import classNames from "classnames"; | |
| import { useState } from "react"; | |
| import { useIntl } from "react-intl"; | |
| export const Collapse = ({ | |
| children, | |
| title, | |
| className, | |
| open: defaultOpen = false, | |
| onOpenClassName, | |
| parentClassName, | |
| }: { | |
| children: React.ReactNode; | |
| title: string | React.ReactNode; | |
| className?: string; | |
| open?: boolean; | |
| onOpenClassName?: string; | |
| parentClassName?: string; | |
| }) => { | |
| const [open, setOpen] = useState(defaultOpen); | |
| const intl = useIntl(); | |
| return ( | |
| <div className={`${parentClassName} w-full`}> | |
| <div | |
| className={`${className} flex items-center justify-between cursor-pointer transition-all duration-200 ${ | |
| open && onOpenClassName | |
| }`} | |
| onClick={() => setOpen(!open)} | |
| > | |
| {typeof title === "string" ? intl.formatMessage({ id: title }) : title} | |
| <div> | |
| <ChevronDownIcon | |
| className={classNames( | |
| "w-5 text-white opacity-50 transition-all duration-200", | |
| { | |
| "rotate-180": open, | |
| } | |
| )} | |
| /> | |
| </div> | |
| </div> | |
| {open && children} | |
| </div> | |
| ); | |
| }; | |