diff --git a/apps/web/components/Form/Buttons.tsx b/apps/web/components/Form/Common/Buttons.tsx similarity index 68% rename from apps/web/components/Form/Buttons.tsx rename to apps/web/components/Form/Common/Buttons.tsx index fbd7c2b..2273d1f 100644 --- a/apps/web/components/Form/Buttons.tsx +++ b/apps/web/components/Form/Common/Buttons.tsx @@ -1,19 +1,16 @@ /* eslint-disable react/jsx-curly-newline */ /* eslint-disable no-negated-condition */ -import { FormContext } from './context/form-context'; +import { FormContext } from '../context/form-context'; import * as apiIus from '@/api/ius/query'; import { useFormStore } from '@/store/ius/form'; import { Button } from '@repo/ui'; import { useRouter } from 'next/navigation'; -import { pick } from 'radash'; import { useCallback } from 'react'; import { useContext } from 'react'; -const ERROR_UPLOAD_DOCUMENT = 'Произошла ошибка при загрузке документов'; - export function Buttons() { const { reset, resetValidation, setValidation, values } = useFormStore(); - const { formFiles, pageUrlParams, setFormState } = useContext(FormContext); + const { pageUrlParams, setFormState } = useContext(FormContext); const router = useRouter(); @@ -37,27 +34,6 @@ export function Buttons() { }); }, [pageUrlParams, router, setFormState, setValidation, values]); - const handleUploadFiles = useCallback(() => { - setFormState({ status: 'pending' }); - resetValidation(); - const uploadFiles = formFiles.map((formFile) => { - const formData = new FormData(); - formData.append('file', formFile.file); - const document = pick(formFile, ['documentTypeId']); - - return apiIus.uploadDocument({ - document, - formData, - pageUrlParams, - }); - }); - - return Promise.allSettled(uploadFiles).catch(() => { - setFormState({ status: 'error', text: ERROR_UPLOAD_DOCUMENT }); - throw new Error(ERROR_UPLOAD_DOCUMENT); - }); - }, [formFiles, pageUrlParams, resetValidation, setFormState]); - const handleRetract = useCallback(() => { setFormState({ status: 'pending' }); resetValidation(); @@ -93,7 +69,7 @@ export function Buttons() { - + ); } diff --git a/apps/web/components/Form/Elements.tsx b/apps/web/components/Form/Common/Elements.tsx similarity index 97% rename from apps/web/components/Form/Elements.tsx rename to apps/web/components/Form/Common/Elements.tsx index 8233132..94f79f0 100644 --- a/apps/web/components/Form/Elements.tsx +++ b/apps/web/components/Form/Common/Elements.tsx @@ -1,4 +1,4 @@ -import type { FormComponentProps } from './types'; +import type { FormComponentProps } from '../types'; import type { MetaObject } from '@/api/ius/types'; import { mapFieldTypeElement } from '@/config/elements'; import { useFormStore } from '@/store/ius/form'; diff --git a/apps/web/components/Form/Common/index.ts b/apps/web/components/Form/Common/index.ts new file mode 100644 index 0000000..7e1a3af --- /dev/null +++ b/apps/web/components/Form/Common/index.ts @@ -0,0 +1,2 @@ +export * from './Buttons'; +export * from './Elements'; diff --git a/apps/web/components/Form/Documents/Buttons.tsx b/apps/web/components/Form/Documents/Buttons.tsx new file mode 100644 index 0000000..2039bc3 --- /dev/null +++ b/apps/web/components/Form/Documents/Buttons.tsx @@ -0,0 +1,44 @@ +/* eslint-disable react/jsx-curly-newline */ +/* eslint-disable no-negated-condition */ +import { FormContext } from '../context/form-context'; +import * as apiIus from '@/api/ius/query'; +import { useFormStore } from '@/store/ius/form'; +import { Button } from '@repo/ui'; +import { pick } from 'radash'; +import { useCallback } from 'react'; +import { useContext } from 'react'; + +const ERROR_UPLOAD_DOCUMENT = 'Произошла ошибка при загрузке документов'; + +export function Buttons() { + const { resetValidation } = useFormStore(); + const { formFiles, pageUrlParams, setFormState } = useContext(FormContext); + + const handleUploadFiles = useCallback(() => { + setFormState({ status: 'pending' }); + resetValidation(); + const uploadFiles = formFiles.map((formFile) => { + const formData = new FormData(); + formData.append('file', formFile.file); + const document = pick(formFile, ['documentTypeId']); + + return apiIus.uploadDocument({ + document, + formData, + pageUrlParams, + }); + }); + + return Promise.allSettled(uploadFiles).catch(() => { + setFormState({ status: 'error', text: ERROR_UPLOAD_DOCUMENT }); + throw new Error(ERROR_UPLOAD_DOCUMENT); + }); + }, [formFiles, pageUrlParams, resetValidation, setFormState]); + + return ( +