{"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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"}