Your IP : 3.22.27.41


Current Path : /home/ncdcgo/admin.ncdc.go.ug/static/js/
Upload File :
Current File : /home/ncdcgo/admin.ncdc.go.ug/static/js/13.38aff9c4.chunk.js.map

{"version":3,"sources":["features/faqs/api/getFaq.js","features/faqs/api/updateFaq.js","features/faqs/components/UpdateFaq.jsx","features/faqs/routes/Faq.jsx","features/faqs/api/createFaq.js","features/faqs/components/CreateFaq.jsx","features/faqs/api/getFaqs.js","features/faqs/api/deleteFaq.js","features/faqs/components/DeleteFaq.jsx","features/faqs/components/FaqsList.jsx","features/faqs/routes/Faqs.jsx","features/faqs/routes/index.jsx"],"names":["useFaq","faqId","config","useQuery","queryKey","queryFn","axios","get","getFaq","updateFaq","data","patch","propTypes","PropTypes","shape","question","string","isRequired","answer","category","schema","z","min","UpdateFaq","faqQuery","updateFaqMutation","addNotification","useNotificationStore","useMutation","onMutate","updatingFaq","a","queryClient","cancelQueries","previousFaq","getQueryData","setQueryData","id","onError","_","__","context","onSuccess","refetchQueries","type","title","mutationFn","useUpdateFaq","categoriesQuery","label","value","allowedRoles","ROLES","ADMIN","Form","sie","isDone","isSuccess","triggerButton","startIcon","className","size","submitButton","form","isLoading","onSubmit","values","mutateAsync","options","defaultValues","register","formState","watch","setValue","error","errors","registration","editorContent","map","Faq","useParams","Head","button","createFaq","post","CreateFaq","createFaqMutation","newJob","previousFaqs","invalidateQueries","useCreateFaq","getFaqs","deleteFaq","delete","DeleteFaq","deleteFaqMutation","deletedFaq","filter","faq","useDeleteFaq","icon","body","variant","confirmButton","onClick","postId","FaqsList","faqsQuery","useFaqs","columns","field","Cell","_id","entry","to","Faqs","FaqsRoutes","path","element"],"mappings":"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","file":"static/js/13.38aff9c4.chunk.js","sourcesContent":["import { axios } from '@/lib/axios';\nimport { useQuery } from 'react-query';\n\nexport const getFaq = ({ faqId }) => {\n  return axios.get(`/faqs/${faqId}`);\n};\n\nexport const useFaq = ({ faqId, config }) => {\n  return useQuery({\n    ...config,\n    queryKey: ['faq', faqId],\n    queryFn: () => getFaq({ faqId }),\n  });\n};\n","import { axios } from '@/lib/axios';\nimport { queryClient } from '@/lib/react-query';\nimport { useNotificationStore } from '@/stores/notifications';\nimport PropTypes from 'prop-types';\nimport { useMutation } from 'react-query';\n\nexport const updateFaq = ({ data, faqId }) => {\n  return axios.patch(`/faqs/${faqId}`, data);\n};\n\nupdateFaq.propTypes = {\n  data: PropTypes.shape({\n    question: PropTypes.string.isRequired,\n    answer: PropTypes.string.isRequired,\n    category: PropTypes.string.isRequired,\n  }).isRequired,\n  faqId: PropTypes.string.isRequired,\n};\n\nexport const useUpdateFaq = ({ config } = {}) => {\n  const { addNotification } = useNotificationStore();\n\n  return useMutation({\n    onMutate: async (updatingFaq) => {\n      await queryClient.cancelQueries(['faq', updatingFaq?.faqId]);\n\n      const previousFaq = queryClient.getQueryData[('faq', updatingFaq?.faqId)];\n\n      queryClient.setQueryData(['faq', updatingFaq?.faqId], {\n        ...previousFaq,\n        ...updatingFaq.data,\n        id: updatingFaq.faqId,\n      });\n\n      return { previousFaq };\n    },\n    onError: (_, __, context) => {\n      if (context?.previousFaq) {\n        queryClient.setQueryData(['faq', context.previousFaq.id], context.previousFaq);\n      }\n    },\n    onSuccess: (data) => {\n      queryClient.refetchQueries(['faq', data.id]);\n      addNotification({\n        type: 'success',\n        title: 'Faq Updated',\n      });\n    },\n    ...config,\n    mutationFn: updateFaq,\n  });\n};\n","import { Button } from '@/components/Elements';\nimport { Form, FormDrawer, InputField, SelectField, TextAreaField } from '@/components/Form';\nimport { Authorization, ROLES } from '@/lib/authorization';\nimport { PencilIcon } from '@heroicons/react/solid';\nimport PropTypes from 'prop-types';\nimport * as z from 'zod';\n\nimport { useFaq } from '../api/getFaq';\nimport { useUpdateFaq } from '../api/updateFaq';\n\nconst schema = z.object({\n  question: z.string().min(1, 'Required'),\n  answer: z.string().min(1, 'Required'),\n  category: z.string().min(1, 'Required'),\n});\n\nexport const UpdateFaq = ({ faqId }) => {\n  const faqQuery = useFaq({ faqId });\n  const updateFaqMutation = useUpdateFaq();\n\n  const categoriesQuery = [\n    { label: 'Secondary Education', value: 'Secondary Education' },\n    { label: 'Primary Education', value: 'Primary Education' },\n    { label: 'ECCE', value: 'ECCE' },\n    { label: 'BTVET', value: 'BTVET' },\n  ];\n\n  return (\n    <Authorization allowedRoles={[ROLES.ADMIN]}>\n      <FormDrawer\n        sie=\"sm\"\n        isDone={updateFaqMutation.isSuccess}\n        triggerButton={\n          <Button startIcon={<PencilIcon className=\"h-4 w-4\" />} size=\"sm\">\n            Update Job\n          </Button>\n        }\n        title=\"Update Faq\"\n        submitButton={\n          <Button form=\"update-job\" type=\"submit\" size=\"sm\" isLoading={updateFaqMutation.isLoading}>\n            Submit\n          </Button>\n        }\n      >\n        <Form\n          id=\"update-job\"\n          onSubmit={async (values) => {\n            await updateFaqMutation.mutateAsync({ data: values, faqId });\n          }}\n          options={{\n            defaultValues: {\n              question: faqQuery.data?.question,\n              answer: faqQuery.data?.answer,\n              category: faqQuery.data?.category,\n            },\n          }}\n          schema={schema}\n        >\n          {({ register, formState, watch, setValue }) => (\n            <>\n              <InputField\n                label=\"Question\"\n                error={formState.errors['question']}\n                registration={register('question')}\n              />\n              <TextAreaField\n                label=\"Answer\"\n                error={formState.errors['answer']}\n                editorContent={watch('answer')}\n                setValue={setValue}\n                value=\"answer\"\n              />\n              <SelectField\n                label=\"Category\"\n                error={formState.errors['category']}\n                registration={register('category')}\n                options={categoriesQuery?.map((category) => ({\n                  label: category.label,\n                  value: category.value,\n                }))}\n              />\n            </>\n          )}\n        </Form>\n      </FormDrawer>\n    </Authorization>\n  );\n};\n\nUpdateFaq.propTypes = {\n  faqId: PropTypes.string.isRequired,\n};\n","import { Spinner, MDPreview } from '@/components/Elements';\nimport { Head } from '@/components/Head';\nimport { ContentLayout } from '@/components/Layout';\nimport { useParams } from 'react-router-dom';\n\nimport { useFaq } from '../api/getFaq';\nimport { UpdateFaq } from '../components/UpdateFaq';\n\nexport const Faq = () => {\n  const { faqId } = useParams();\n  const faqQuery = useFaq({ faqId });\n\n  if (faqQuery.isLoading) {\n    return (\n      <div className=\"w-full h-48 flex justify-center items-center\">\n        <Spinner size=\"lg\" />\n      </div>\n    );\n  }\n\n  if (!faqQuery.data) return null;\n\n  return (\n    <>\n      <Head title={faqQuery.data.question} />\n      <ContentLayout title={faqQuery.data.question} button={<UpdateFaq faqId={faqId} />}>\n        <span className=\"text-xs font-bold bg-green-400 p-1 rounded text-white\">\n          {faqQuery.data.category}\n        </span>\n        <div className=\"mt-6 flex flex-col space-y-16\">\n          <div>\n            <div className=\"bg-white shadow overflow-hidden sm:rounded-lg\">\n              <div className=\"px-4 py-5 sm:px-6\">\n                <div className=\"mt-1 max-w-2xl text-sm text-gray-500\">\n                  <MDPreview value={faqQuery.data.answer} />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </ContentLayout>\n    </>\n  );\n};\n","import { axios } from '@/lib/axios';\nimport { queryClient } from '@/lib/react-query';\nimport { useNotificationStore } from '@/stores/notifications';\nimport PropTypes from 'prop-types';\nimport { useMutation } from 'react-query';\n\nexport const createFaq = ({ data }) => {\n  return axios.post(`/faqs`, data);\n};\n\ncreateFaq.propTypes = {\n  data: PropTypes.shape({\n    question: PropTypes.string.isRequired,\n    answer: PropTypes.string.isRequired,\n    category: PropTypes.string.isRequired,\n  }).isRequired,\n};\n\nexport const useCreateFaq = ({ config } = {}) => {\n  const { addNotification } = useNotificationStore();\n  return useMutation({\n    onMutate: async (newJob) => {\n      await queryClient.cancelQueries('faqs');\n\n      const previousFaqs = queryClient.getQueryData('faqs');\n\n      queryClient.setQueryData('faqs', [...(previousFaqs || []), newJob.data]);\n\n      return { previousFaqs };\n    },\n    onError: (_, __, context) => {\n      if (context?.previousFaqs) {\n        queryClient.setQueryData('faqs', context.previousFaqs);\n      }\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries('faqs');\n      addNotification({\n        type: 'success',\n        title: 'Faq has been added',\n      });\n    },\n    ...config,\n    mutationFn: createFaq,\n  });\n};\n","import { Button } from '@/components/Elements';\nimport { Form, FormDrawer, InputField, SelectField, TextAreaField } from '@/components/Form';\nimport { Authorization, ROLES } from '@/lib/authorization';\nimport { PlusIcon } from '@heroicons/react/outline';\nimport * as z from 'zod';\n\nimport { useCreateFaq } from '../api/createFaq';\n\nconst schema = z.object({\n  question: z.string().min(1, 'Required'),\n  answer: z.string().min(1, 'Required'),\n  category: z.string().min(1, 'Required'),\n});\n\nexport const CreateFaq = () => {\n  const createFaqMutation = useCreateFaq();\n\n  const categoriesQuery = [\n    { label: 'Secondary Education', value: 'Secondary Education' },\n    { label: 'Primary Education', value: 'Primary Education' },\n    { label: 'ECCE', value: 'ECCE' },\n    { label: 'BTVET', value: 'BTVET' },\n  ];\n\n  return (\n    <Authorization allowedRoles={[ROLES.ADMIN]}>\n      <FormDrawer\n        size=\"sm\"\n        isDone={createFaqMutation.isSuccess}\n        triggerButton={\n          <Button size=\"sm\" startIcon={<PlusIcon className=\"h-4 w-4\" />}>\n            Create Faq\n          </Button>\n        }\n        title=\"Create Faq\"\n        submitButton={\n          <Button form=\"create-faq\" type=\"submit\" size=\"sm\" isLoading={createFaqMutation.isLoading}>\n            Submit\n          </Button>\n        }\n      >\n        <Form\n          id=\"create-faq\"\n          onSubmit={async (values) => {\n            await createFaqMutation.mutateAsync({ data: values });\n          }}\n          schema={schema}\n        >\n          {({ register, formState, watch, setValue }) => (\n            <>\n              <InputField\n                label=\"Question\"\n                error={formState.errors['question']}\n                registration={register('question')}\n              />\n              <TextAreaField\n                label=\"Answer\"\n                error={formState.errors['answer']}\n                editorContent={watch('answer')}\n                setValue={setValue}\n                value=\"answer\"\n              />\n              <SelectField\n                label=\"Category\"\n                error={formState.errors['category']}\n                registration={register('category')}\n                options={categoriesQuery?.map((category) => ({\n                  label: category.label,\n                  value: category.value,\n                }))}\n              />\n            </>\n          )}\n        </Form>\n      </FormDrawer>\n    </Authorization>\n  );\n};\n","import { axios } from '@/lib/axios';\nimport { useQuery } from 'react-query';\n\nexport const getFaqs = () => {\n  return axios.get('/faqs');\n};\n\nexport const useFaqs = ({ config } = {}) => {\n  return useQuery({\n    ...config,\n    queryKey: ['faqs'],\n    queryFn: () => getFaqs(),\n  });\n};\n","import { axios } from '@/lib/axios';\nimport { queryClient } from '@/lib/react-query';\nimport { useNotificationStore } from '@/stores/notifications';\nimport PropTypes from 'prop-types';\nimport { useMutation } from 'react-query';\n\nexport const deleteFaq = ({ faqId }) => {\n  return axios.delete(`/faqs/${faqId}`);\n};\n\ndeleteFaq.propTypes = {\n  faqId: PropTypes.string.isRequired,\n};\n\nexport const useDeleteFaq = ({ config } = {}) => {\n  const { addNotification } = useNotificationStore();\n\n  return useMutation({\n    onMutate: async (deletedFaq) => {\n      await queryClient.cancelQueries('jobs');\n\n      const previousFaqs = queryClient.getQueryData('jobs');\n\n      queryClient.setQueryData(\n        'jobs',\n        previousFaqs?.filter((faq) => faq.id !== deletedFaq.faqId)\n      );\n\n      return { previousFaqs };\n    },\n    onError: (_, __, context) => {\n      if (context?.previousFaqs) {\n        queryClient.setQueryData('jobs', context.previousFaqs);\n      }\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries('faqs');\n      addNotification({\n        type: 'success',\n        title: 'Faq Deleted',\n      });\n    },\n    ...config,\n    mutationFn: deleteFaq,\n  });\n};\n","import { Button, ConfirmationDialog } from '@/components/Elements';\nimport { Authorization, ROLES } from '@/lib/authorization';\nimport { TrashIcon } from '@heroicons/react/outline';\nimport PropTypes from 'prop-types';\n\nimport { useDeleteFaq } from '../api/deleteFaq';\n\nexport const DeleteFaq = ({ id }) => {\n  const deleteFaqMutation = useDeleteFaq();\n\n  return (\n    <Authorization allowedRoles={[ROLES.ADMIN]}>\n      <ConfirmationDialog\n        icon=\"danger\"\n        title=\"Delete Faq\"\n        body=\"Are you sure you want to delete this Faq?\"\n        triggerButton={\n          <Button variant=\"danger\">\n            <TrashIcon className=\"h-4 w-4\" />\n          </Button>\n        }\n        confirmButton={\n          <Button\n            isLoading={deleteFaqMutation.isLoading}\n            type=\"button\"\n            className=\"bg-red-600\"\n            onClick={async () => await deleteFaqMutation.mutateAsync({ postId: id })}\n          >\n            Delete Faq\n          </Button>\n        }\n      />\n    </Authorization>\n  );\n};\n\nDeleteFaq.propTypes = {\n  id: PropTypes.string.isRequired,\n};\n","import { Table, Spinner, Link } from '@/components/Elements';\n\nimport { useFaqs } from '../api/getFaqs';\n\nimport { DeleteFaq } from './DeleteFaq.jsx';\n\nexport const FaqsList = () => {\n  const faqsQuery = useFaqs();\n\n  if (faqsQuery.isLoading) {\n    return (\n      <div className=\"w-full h-48 flex justify-center items-center\">\n        <Spinner size=\"lg\" />\n      </div>\n    );\n  }\n\n  if (!faqsQuery.data) return null;\n\n  return (\n    <Table\n      data={faqsQuery.data}\n      columns={[\n        {\n          title: 'Question',\n          field: 'question',\n        },\n        {\n          title: '',\n          field: 'id',\n          Cell({ entry: { _id } }) {\n            return <Link to={`./${_id}`}>View</Link>;\n          },\n        },\n        {\n          title: '',\n          field: 'id',\n          Cell({ entry: { _id } }) {\n            return <DeleteFaq id={_id} />;\n          },\n        },\n      ]}\n    />\n  );\n};\n","import { ContentLayout } from '@/components/Layout';\n\nimport { CreateFaq } from '../components/CreateFaq';\nimport { FaqsList } from '../components/FaqsList';\n\nexport const Faqs = () => {\n  return (\n    <ContentLayout title=\"Faqs\" button={<CreateFaq />}>\n      <div className=\"mt-4\">\n        <FaqsList />\n      </div>\n    </ContentLayout>\n  );\n};\n","import { Navigate, Route, Routes } from 'react-router-dom';\n\nimport { Faq } from './Faq';\nimport { Faqs } from './Faqs';\n\nexport const FaqsRoutes = () => {\n  return (\n    <Routes>\n      <Route path=\"\" element={<Faqs />} />\n      <Route path=\":faqId\" element={<Faq />} />\n      <Route path=\"*\" element={<Navigate to=\".\" />} />\n    </Routes>\n  );\n};\n"],"sourceRoot":""}