From 71f354a6146551da6e32efdbb8975d5d696d8349 Mon Sep 17 00:00:00 2001 From: backward99 Date: Wed, 1 Nov 2023 23:39:38 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20CreateEventTemplate=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateEventTemplate.tsx | 223 +++++++++++++ .../templates/CreateEventTemplate/index.ts | 3 + src/pages/EventPage/CreateEventPage.tsx | 306 +----------------- 3 files changed, 228 insertions(+), 304 deletions(-) create mode 100644 src/components/templates/CreateEventTemplate/CreateEventTemplate.tsx create mode 100644 src/components/templates/CreateEventTemplate/index.ts diff --git a/src/components/templates/CreateEventTemplate/CreateEventTemplate.tsx b/src/components/templates/CreateEventTemplate/CreateEventTemplate.tsx new file mode 100644 index 00000000..57c83dea --- /dev/null +++ b/src/components/templates/CreateEventTemplate/CreateEventTemplate.tsx @@ -0,0 +1,223 @@ +import { VStack, Input, Divider, FormErrorMessage, HStack, Flex, Text } from '@chakra-ui/react'; +import { useForm } from 'react-hook-form'; +import { UseFormRegister, FieldValues, FieldErrors } from 'react-hook-form'; +import { FormTextarea } from './../../molecules/FormTextarea'; +import { BorderBox } from '~/components/atoms/BorderBox'; +import { Button } from '~/components/atoms/Button'; +import { FormLabel } from '~/components/atoms/FormLabel'; +import { FormControl } from '~/components/molecules/FormControl'; +import { FormDateInput } from '~/components/molecules/FormDateInput'; +import FormTextInput from '~/components/molecules/FormTextInput/FormTextInput'; +import { LabelCheckboxGroup } from '~/components/molecules/LabelCheckboxGroup'; + +//Todo: TermInputProps 부분은 컴포넌트가 추가되면 제거 +type TermInputProps = { + startDateName: string; + endDateName: string; + isEndDateDisabled?: boolean; + isRequired?: boolean; + register: UseFormRegister; + errors: FieldErrors; + type?: 'date' | 'datetime-local'; +}; + +const TermInput = ({ + startDateName, + endDateName, + isEndDateDisabled = false, + isRequired = false, + register, + errors, + type, +}: TermInputProps) => { + return ( + + + + + {errors.startDateName && errors.startDateName.message?.toString()} + + + + + + + + {errors.endDateName && errors.endDateName.message?.toString()} + + + + + ); +}; + +const CreateEventTemplate = () => { + const { + control, + handleSubmit, + register, + formState: { errors, isSubmitting }, + } = useForm(); + + const onSubmit = (values: { [key: string]: string }) => { + return new Promise(() => { + setTimeout(() => { + alert(JSON.stringify(values, null, 2)); + }, 3000); + }); + }; + + return ( + <> + + 첨삭 이벤트 생성 + +
+ + + + + 이벤트 제목 + + + + + + + 인원 수 + + + + + + 직무 + + + + + 신청 기간 + + + + 첨삭 종료일 + + + + + 내용 + + + + + + + + + +
+ + ); +}; + +export default CreateEventTemplate; diff --git a/src/components/templates/CreateEventTemplate/index.ts b/src/components/templates/CreateEventTemplate/index.ts new file mode 100644 index 00000000..47c14c74 --- /dev/null +++ b/src/components/templates/CreateEventTemplate/index.ts @@ -0,0 +1,3 @@ +import CreateEventTemplate from './CreateEventTemplate'; + +export { CreateEventTemplate }; diff --git a/src/pages/EventPage/CreateEventPage.tsx b/src/pages/EventPage/CreateEventPage.tsx index 827eed4c..faacb6b2 100644 --- a/src/pages/EventPage/CreateEventPage.tsx +++ b/src/pages/EventPage/CreateEventPage.tsx @@ -1,309 +1,7 @@ -import { - Divider, - Flex, - FormErrorMessage, - HStack, - Input, - Text, - Textarea, - VStack, -} from '@chakra-ui/react'; -import { useForm } from 'react-hook-form'; -import { BorderBox } from '~/components/atoms/BorderBox'; -import { Button } from '~/components/atoms/Button'; -import FormLabel from '~/components/atoms/FormLabel/FormLabel'; -import { FormControl } from '~/components/molecules/FormControl'; -import FormDateInput from '~/components/molecules/FormDateInpur/FormDateInput'; -import { LabelCheckboxGroup } from '~/components/molecules/LabelCheckboxGroup'; -import { FormInputSchema } from '~/types/formInput'; +import { CreateEventTemplate } from '~/components/templates/CreateEventTemplate'; const CreateEventPage = () => { - const { - control, - handleSubmit, - register, - formState: { errors, isSubmitting }, - } = useForm(); - - const onSubmit = (values: { [key: string]: string }) => { - return new Promise(() => { - setTimeout(() => { - alert(JSON.stringify(values, null, 2)); - }, 3000); - }); - }; - - const FORM_TEXT_INPUT_SCHEMA: FormInputSchema = { - eventTitle: { - errorTypes: { - required: true, - }, - label: '이벤트 제목', - placeholder: '이벤트 제목을 입력해주세요.', - }, - headCount: { - label: '인원 수', - placeholder: '신청 받을 인원 수(2~10)를 입력해주세요.', - errorTypes: { - required: true, - max: { message: '10명 이하로 입력해 주세요.', value: 10 }, - min: { message: '2명 이상 입력해 주세요.', value: 2 }, - }, - }, - }; - - const FORM_EVENT_DATE_INPUT_SCHEMA: FormInputSchema = { - openEventDate: { - type: 'datetime-local', - label: '신청 기간', - placeholder: '', - errorTypes: { - required: true, - }, - }, - closeEventDate: { - type: 'datetime-local', - label: '', - placeholder: '', - errorTypes: { - required: true, - }, - }, - }; - - const FORM_RESUME_DATE_INPUT_SCHEMA: FormInputSchema = { - endEventDate: { - type: 'date', - label: '첨삭 종료일', - placeholder: '', - errorTypes: { - required: true, - }, - }, - }; - - const FORM_TEXT_AREA_INPUT_SCHEMA: FormInputSchema = { - eventContent: { - errorTypes: { - required: true, - }, - label: '내용', - placeholder: '이벤트에 대한 상세 내용을 입력해주세요.', - }, - }; - - return ( - <> - - 첨삭 이벤트 생성 - -
- - {Object.keys(FORM_TEXT_INPUT_SCHEMA).map((key) => ( - - - - {FORM_TEXT_INPUT_SCHEMA[key].label} - - - - {errors[key]?.message && ( - {errors[key]?.message as string} - )} - - - - ))} - - - - 직무 - - - - - - - - - {FORM_EVENT_DATE_INPUT_SCHEMA['openEventDate'].label && ( - - {FORM_EVENT_DATE_INPUT_SCHEMA['openEventDate'].label} - - )} - - - - - - - - - - - - - - - {FORM_RESUME_DATE_INPUT_SCHEMA['endEventDate'].label && ( - - {FORM_RESUME_DATE_INPUT_SCHEMA['endEventDate'].label} - - )} - - - - - - - - - {FORM_TEXT_AREA_INPUT_SCHEMA['eventContent'].label} - -