{"version":3,"file":"FaqSection-Lwx8NkoE.js","sources":["../../../app/javascript/components/molecules/accordions/EditFaqsAccordion.tsx","../../../app/javascript/components/molecules/accordions/FaqsAccordion.tsx","../../../app/javascript/components/organisms/FaqSection/FaqSection.tsx"],"sourcesContent":["import { useState } from 'react'\n\nimport { Disclosure } from '@headlessui/react'\nimport { IoChevronUp } from 'react-icons/io5'\n\ntype EditFaqsAccordionProps = {\n  faqs: schema.Faqs[]\n  onFaqChange: (updatedFaqs: schema.Faqs[]) => void\n}\n\nconst EditFaqsAccordion: React.FC<EditFaqsAccordionProps> = ({\n  faqs,\n  onFaqChange,\n}) => {\n  const [localFaqs, setLocalFaqs] = useState(faqs)\n\n  const handleInputChange = (index: number, key: string, value: any) => {\n    const updatedFaqs = [...localFaqs]\n    updatedFaqs[index] = { ...updatedFaqs[index], [key]: value }\n    setLocalFaqs(updatedFaqs)\n    onFaqChange(updatedFaqs)\n  }\n\n  return (\n    <div className='mx-auto mt-4 w-full divide-y divide-gray-border rounded-2xl border border-gray-border bg-white'>\n      {localFaqs.map((item, index) => (\n        <Disclosure key={index}>\n          {({ open }) => (\n            <>\n              <Disclosure.Button\n                className={`flex w-full items-center justify-between bg-mystic px-4 py-[8px]\n                  ${index === 0 ? (faqs.length === 1 && !open ? 'rounded-2xl' : 'rounded-t-2xl') : index === faqs.length - 1 && !open ? 'rounded-b-2xl' : ''}`}\n              >\n                <input\n                  type='text'\n                  className='w-full break-words rounded-xl border border-black bg-white p-[17px] text-left text-[16px] font-normal text-outer-space'\n                  value={item.question}\n                  onChange={(e) =>\n                    handleInputChange(index, 'question', e.target.value)\n                  }\n                  onKeyDown={(e) => e.stopPropagation()}\n                  maxLength={120}\n                />\n                <div className='mx-4 flex items-center'>\n                  <label className='relative inline-flex cursor-pointer items-center'>\n                    <input\n                      type='checkbox'\n                      className='peer sr-only'\n                      checked={item.is_active}\n                      onChange={(e) =>\n                        handleInputChange(index, 'is_active', e.target.checked)\n                      }\n                    />\n                    <div className=\"peer h-4 w-8 rounded-full bg-gray-400 after:absolute after:left-[-3px] after:top-[-2px] after:size-5 after:rounded-full after:bg-white after:drop-shadow-md after:transition-all after:content-[''] peer-checked:bg-teal peer-checked:after:translate-x-full peer-checked:after:border-white peer-checked:after:drop-shadow-md\" />\n                  </label>\n                </div>\n                <IoChevronUp\n                  className={`${!open && 'rotate-180'} size-5 transition-transform duration-300`}\n                />\n              </Disclosure.Button>\n              <Disclosure.Panel className='px-4 py-[8px]'>\n                <textarea\n                  className='w-full break-words rounded-xl border border-black bg-white p-[17px] text-left text-[16px] font-normal text-outer-space'\n                  value={String(item.answer)}\n                  onChange={(e) =>\n                    handleInputChange(index, 'answer', e.target.value)\n                  }\n                  onKeyDown={(e) => e.stopPropagation()}\n                  rows={2}\n                  maxLength={560}\n                />\n              </Disclosure.Panel>\n            </>\n          )}\n        </Disclosure>\n      ))}\n    </div>\n  )\n}\n\nexport default EditFaqsAccordion\n","import { Disclosure } from '@headlessui/react'\nimport { IoChevronUp } from 'react-icons/io5'\n\ntype FaqsAccordionProps = {\n  faqs: schema.Faqs[]\n}\n\nconst FaqsAccordion: React.FC<FaqsAccordionProps> = ({ faqs }) => {\n  return (\n    <div className='mx-auto mt-4 w-full divide-y divide-gray-border rounded-2xl border border-gray-border bg-white'>\n      {faqs.map((faq, index) => (\n        <Disclosure key={index}>\n          {({ open }) => (\n            <>\n              <Disclosure.Button\n                className={`flex w-full justify-between break-words bg-mystic px-4 py-[22px] text-left text-[16px] font-semibold text-outer-space ${index === 0 ? (faqs.length === 1 && !open ? 'rounded-2xl' : 'rounded-t-2xl') : index === faqs.length - 1 && !open ? 'rounded-b-2xl' : ``}`}\n              >\n                <span>{faq.question}</span>\n                <IoChevronUp\n                  className={`${!open && 'rotate-180'} size-5 transition-transform duration-300`}\n                />\n              </Disclosure.Button>\n              <Disclosure.Panel className='break-words px-4 py-[22px] text-[16px] font-normal text-outer-space'>\n                {String(faq.answer)}\n              </Disclosure.Panel>\n            </>\n          )}\n        </Disclosure>\n      ))}\n    </div>\n  )\n}\n\nexport default FaqsAccordion\n","import { useState } from 'react'\n\nimport { ErrorMessage } from '@hookform/error-message'\nimport { router } from '@inertiajs/react'\nimport editPencilBlackIcon from 'app/assets/images/edit-pencil.svg'\nimport { toast } from 'react-toastify'\n\nimport Button from '@/components/atoms/buttons/Button'\nimport { useToken } from '@/components/atoms/forms/Form'\nimport SuccessMessage from '@/components/atoms/Toast/SuccessMessage'\nimport EmptySection from '@/components/atoms/widgets/EmptySection'\nimport EditFaqsAccordion from '@/components/molecules/accordions/EditFaqsAccordion'\nimport FaqsAccordion from '@/components/molecules/accordions/FaqsAccordion'\nimport { putRequestWithoutFormData } from '@/utils/axiosRequests'\nimport { defaultToastOptions } from '@/utils/commonToast'\nimport { TIMEOUT_INTERVAL } from '@/utils/constants'\n\ntype FaqSectionProps = {\n  faqs: schema.Faqs[]\n  solution: schema.Solution\n  isSolutionOwner: boolean\n  isRmcAdmin: boolean\n}\n\nconst FaqSection: React.FC<FaqSectionProps> = ({\n  faqs,\n  solution,\n  isSolutionOwner,\n  isRmcAdmin\n}) => {\n  const token = useToken()\n\n  const [editFaq, setEditFaq] = useState(false)\n  const [isLoading, setIsLoading] = useState(false)\n  const [updatedFaqs, setUpdatedFaqs] = useState(faqs)\n\n  const allowEdit = isSolutionOwner && (solution.claimed || isRmcAdmin)\n\n  const handleEditClick = () => {\n    setEditFaq(true)\n  }\n\n  const FilteredFaqs = (faqs) => {\n    return faqs.filter((faq) => faq.is_active && String(faq.answer).trim())\n  }\n\n  const handleFaqChange = (newFaqs: schema.Faqs[]) => {\n    setUpdatedFaqs(newFaqs)\n  }\n\n  const showEmptySection =\n    !editFaq && FilteredFaqs(faqs).length === 0 && isSolutionOwner\n\n  const handleSubmit = async () => {\n    const faqs_data = {\n      solution: {\n        faqs_attributes: updatedFaqs,\n      },\n    }\n    const solutionUpdateURL = `/solutions/${solution.slug}`\n    setIsLoading(true)\n\n    try {\n      const response = await putRequestWithoutFormData(\n        solutionUpdateURL,\n        faqs_data,\n        token\n      )\n      if (response.status == 200) {\n        toast(\n          <SuccessMessage\n            message={'Your changes have been saved successfully!'}\n          />,\n          defaultToastOptions('teal-tint-2')\n        )\n        setTimeout(() => router.visit(solutionUpdateURL), TIMEOUT_INTERVAL)\n        setEditFaq(false)\n      } else {\n        toast(\n          <ErrorMessage\n            message={'Something went wrong! Please try again.'}\n            name={''}\n          />,\n          defaultToastOptions('red-200')\n        )\n      }\n    } catch (error) {\n      toast(\n        <ErrorMessage\n          message={'Something went wrong! Please try again.'}\n          name={''}\n        />,\n        defaultToastOptions('red-200')\n      )\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  return (\n    <div className='mt-[2rem] sm:mt-[6rem]'>\n      <div className='flex items-center justify-between'>\n        <div>\n          <h2 className='text-lg font-bold sm:text-xl'>FAQ</h2>\n        </div>\n        {allowEdit && (\n          <div>\n            {!editFaq ? (\n              <div className='rounded-full bg-white p-2'>\n                <img\n                  src={editPencilBlackIcon}\n                  alt='pencil icon'\n                  onClick={handleEditClick}\n                  className='w-[35px] stroke-white'\n                  style={{ cursor: 'pointer' }}\n                  loading='lazy'\n                />\n              </div>\n            ) : (\n              <div className='ml-auto flex gap-2'>\n                <Button\n                  type='submit'\n                  size='md'\n                  variant='teal'\n                  className='flex h-12 w-20 items-center justify-center rounded-[12px] px-4 py-3'\n                  onClick={handleSubmit}\n                  isLoading={isLoading}\n                >\n                  {isLoading ? 'Saving...' : 'Save'}\n                </Button>\n                <Button\n                  type='button'\n                  size='md'\n                  variant='gray'\n                  className='flex h-12 w-20 items-center justify-center rounded-[12px] px-4 py-3'\n                  onClick={() => setEditFaq(false)}\n                  isLoading={isLoading}\n                >\n                  Cancel\n                </Button>\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n      {!editFaq ? (\n        showEmptySection ? (\n          <EmptySection\n            heading='No FAQs Yet'\n            paragraph='Click the pencil icon to answer frequently asked questions on your profile.'\n          />\n        ) : (\n          <FaqsAccordion faqs={FilteredFaqs(faqs)} />\n        )\n      ) : (\n        <EditFaqsAccordion faqs={updatedFaqs} onFaqChange={handleFaqChange} />\n      )}\n    </div>\n  )\n}\n\nexport default FaqSection\n"],"names":["EditFaqsAccordion","faqs","onFaqChange","localFaqs","setLocalFaqs","useState","handleInputChange","index","key","value","updatedFaqs","className","children","map","item","Disclosure","open","_Fragment","_jsxs","Button","length","_jsx","type","question","onChange","e","target","onKeyDown","stopPropagation","maxLength","checked","is_active","IoChevronUp","Panel","String","answer","rows","FaqsAccordion","faq","FaqSection","solution","isSolutionOwner","isRmcAdmin","token","useToken","editFaq","setEditFaq","isLoading","setIsLoading","setUpdatedFaqs","allowEdit","claimed","handleEditClick","FilteredFaqs","filter","trim","handleFaqChange","newFaqs","showEmptySection","size","variant","onClick","faqs_data","faqs_attributes","solutionUpdateURL","slug","putRequestWithoutFormData","status","toast","SuccessMessage","message","defaultToastOptions","setTimeout","router","visit","TIMEOUT_INTERVAL","ErrorMessage","name","src","editPencilBlackIcon","alt","style","cursor","loading","EmptySection","heading","paragraph"],"mappings":"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"}