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 (
-
-
+
);
};
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) => (
-