Skip to content
Snippets Groups Projects
FaqItem.jsx 1.72 KiB
Newer Older
import React, {useEffect, useRef, useState} from 'react';
import Link from '@docusaurus/Link'

export default function FaqItem({
                                    children,
                                    tag = 'li',
                                    title,
                                    active
                                  }) {
  const [accordionOpen, setAccordionOpen] = useState(false);
  const accordion = useRef(null);
  const Component = tag;

  useEffect(() => {
    setAccordionOpen(active)
  }, [accordion])

  return (
    <Component className={'list-none border-t border-gray-300'}>
      <button
        className="flex items-center w-full text-lg font-medium text-left py-5 cursor-pointer"
        onClick={(e) => {
          e.preventDefault();
          setAccordionOpen(!accordionOpen);
        }}
        aria-expanded={accordionOpen}
      >
        <svg className="w-4 h-4 fill-current text-yellow-500 flex-shrink-0 mr-8 -ml-12" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
          <rect y="7" width="16" height="2" rx="1" className={`transform origin-center transition duration-200 ease-out ${accordionOpen && 'rotate-180'}`} />
          <rect y="7" width="16" height="2" rx="1" className={`transform origin-center rotate-90 transition duration-200 ease-out ${accordionOpen && 'rotate-180'}`} />
        </svg>
        <span>{title}</span>
      </button>
      <div
        ref={accordion}
        className="text-gray-600 overflow-hidden transition-all duration-300 ease-in-out"
        style={accordionOpen ? {maxHeight: accordion.current.scrollHeight, opacity: 1} : {maxHeight: 0, opacity: 0}}
      >
        <div className="pb-5 text-gray-800">{children}</div>