diff --git a/eslint.config.mjs b/eslint.config.mjs index 15b6a9ea..51601448 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -172,6 +172,11 @@ const eslintConfig = defineConfig([ }, }, ], + + /* + 랜더 프롭스 허용 + */ + 'react/no-children-prop': 'off', }, }, /** diff --git a/src/app/post-meetup/page.tsx b/src/app/post-meetup/page.tsx index fa5d72e8..abf9df20 100644 --- a/src/app/post-meetup/page.tsx +++ b/src/app/post-meetup/page.tsx @@ -1,5 +1,7 @@ 'use client'; +import { useForm } from '@tanstack/react-form'; + import { MeetupAddressField, MeetupCapField, @@ -7,21 +9,46 @@ import { MeetupDetailField, MeetupSubmitButton, MeetupTagsField, + MeetupThumbnailsField, MeetupTitleField, } from '@/components/pages/post-meetup'; const PostMeetupPage = () => { + const form = useForm({ + defaultValues: { + title: '', + address: '', + date: '', + cap: 0, + thumbnails: {}, + detail: '', + tags: [] as string[], + }, + onSubmit: ({ value }) => { + console.log(value); + }, + }); + return (
-
- - - - - - -
- +
{ + e.preventDefault(); + form.handleSubmit(); + }} + > +
+ } name='title' /> + } name='address' /> + } name='date' /> + } name='cap' /> + } name='cap' /> + } name='detail' /> + } name='tags' /> +
+ + +
); }; diff --git a/src/components/pages/post-meetup/fields/address-field/index.tsx b/src/components/pages/post-meetup/fields/address-field/index.tsx index f00b1279..c3944587 100644 --- a/src/components/pages/post-meetup/fields/address-field/index.tsx +++ b/src/components/pages/post-meetup/fields/address-field/index.tsx @@ -1,9 +1,15 @@ 'use client'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Icon } from '@/components/icon'; import { Input, Label } from '@/components/ui'; -export const MeetupAddressField = () => { +interface Props { + field: AnyFieldApi; +} + +export const MeetupAddressField = ({ field }: Props) => { return (
); diff --git a/src/components/pages/post-meetup/fields/cap-field/index.tsx b/src/components/pages/post-meetup/fields/cap-field/index.tsx index 28111a65..d52c4e0d 100644 --- a/src/components/pages/post-meetup/fields/cap-field/index.tsx +++ b/src/components/pages/post-meetup/fields/cap-field/index.tsx @@ -1,9 +1,15 @@ 'use client'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Icon } from '@/components/icon'; import { Input, Label } from '@/components/ui'; -export const MeetupCapField = () => { +interface Props { + field: AnyFieldApi; +} + +export const MeetupCapField = ({ field }: Props) => { return (
); diff --git a/src/components/pages/post-meetup/fields/date-field/index.tsx b/src/components/pages/post-meetup/fields/date-field/index.tsx index 92fba16a..0377e1dc 100644 --- a/src/components/pages/post-meetup/fields/date-field/index.tsx +++ b/src/components/pages/post-meetup/fields/date-field/index.tsx @@ -1,9 +1,15 @@ 'use client'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Icon } from '@/components/icon'; import { Input, Label } from '@/components/ui'; -export const MeetupDateField = () => { +interface Props { + field: AnyFieldApi; +} + +export const MeetupDateField = ({ field }: Props) => { return (
); diff --git a/src/components/pages/post-meetup/fields/detail-feild/index.tsx b/src/components/pages/post-meetup/fields/detail-feild/index.tsx index 07a16aa4..a7885726 100644 --- a/src/components/pages/post-meetup/fields/detail-feild/index.tsx +++ b/src/components/pages/post-meetup/fields/detail-feild/index.tsx @@ -1,8 +1,14 @@ 'use client'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Label } from '@/components/ui'; -export const MeetupDetailField = () => { +interface Props { + field: AnyFieldApi; +} + +export const MeetupDetailField = ({ field }: Props) => { return (
diff --git a/src/components/pages/post-meetup/fields/tags-field/index.tsx b/src/components/pages/post-meetup/fields/tags-field/index.tsx index 5a226e77..db2911b7 100644 --- a/src/components/pages/post-meetup/fields/tags-field/index.tsx +++ b/src/components/pages/post-meetup/fields/tags-field/index.tsx @@ -1,9 +1,15 @@ 'use client'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Icon } from '@/components/icon'; import { Input, Label } from '@/components/ui'; -export const MeetupTagsField = () => { +interface Props { + field: AnyFieldApi; +} + +export const MeetupTagsField = ({ field }: Props) => { return (
@@ -19,13 +25,14 @@ export const MeetupTagsField = () => { /> } placeholder='입력 후 Enter' - required type='text' + value={field.state.value} + onChange={(e) => field.handleChange(e.target.value)} />
diff --git a/src/components/pages/post-meetup/fields/thumbnails-field/index.tsx b/src/components/pages/post-meetup/fields/thumbnails-field/index.tsx index 7ec80ac5..3eb32b8a 100644 --- a/src/components/pages/post-meetup/fields/thumbnails-field/index.tsx +++ b/src/components/pages/post-meetup/fields/thumbnails-field/index.tsx @@ -1,23 +1,31 @@ +'use client'; + import Image from 'next/image'; +import { AnyFieldApi } from '@tanstack/react-form'; + import { Icon } from '@/components/icon'; import { ImageInput, ImageInputProps } from '@/components/ui'; import { cn } from '@/lib/utils'; type ImageUploadPropsWithoutChildren = Omit; -const ThumbnailField = ({ value, onChange, initialImages }: ImageUploadPropsWithoutChildren) => { +interface Props extends ImageUploadPropsWithoutChildren { + field: AnyFieldApi; +} + +export const MeetupThumbnailsField = ({ field, initialImages }: Props) => { return ( {(images, onRemoveImageClick, onFileSelectClick) => ( -
+
+
); };