diff --git a/src/components/pages/meetup/meetup-modal/index.tsx b/src/components/pages/meetup/meetup-modal/index.tsx index ddaa2c66..7cf1d2cd 100644 --- a/src/components/pages/meetup/meetup-modal/index.tsx +++ b/src/components/pages/meetup/meetup-modal/index.tsx @@ -25,8 +25,8 @@ export const MeetupModal = ({ type }: Props) => { return ( - {title} - {description} + {title} + {description}
+
+ ))} + + )} + + + ); +}; + +export default ImageField; diff --git a/src/components/pages/profile/profile-edit-fields/mbti-field/index.tsx b/src/components/pages/profile/profile-edit-fields/mbti-field/index.tsx new file mode 100644 index 00000000..fbbc6f14 --- /dev/null +++ b/src/components/pages/profile/profile-edit-fields/mbti-field/index.tsx @@ -0,0 +1,26 @@ +import { AnyFieldApi } from '@tanstack/react-form'; + +import { Input, Label } from '@/components/ui'; + +interface Props { + field: AnyFieldApi; +} + +export const MBTIField = ({ field }: Props) => { + return ( +
+ + + field.handleChange(e.target.value)} + /> +
+ ); +}; diff --git a/src/components/pages/profile/profile-edit-fields/message-field/index.tsx b/src/components/pages/profile/profile-edit-fields/message-field/index.tsx new file mode 100644 index 00000000..683045de --- /dev/null +++ b/src/components/pages/profile/profile-edit-fields/message-field/index.tsx @@ -0,0 +1,26 @@ +import { AnyFieldApi } from '@tanstack/react-form'; + +import { Input, Label } from '@/components/ui'; + +interface Props { + field: AnyFieldApi; +} + +export const MessageField = ({ field }: Props) => { + return ( +
+ + + field.handleChange(e.target.value)} + /> +
+ ); +}; diff --git a/src/components/pages/profile/profile-edit-fields/nickname-field/index.tsx b/src/components/pages/profile/profile-edit-fields/nickname-field/index.tsx new file mode 100644 index 00000000..c1b8d326 --- /dev/null +++ b/src/components/pages/profile/profile-edit-fields/nickname-field/index.tsx @@ -0,0 +1,26 @@ +import { AnyFieldApi } from '@tanstack/react-form'; + +import { Input, Label } from '@/components/ui'; + +interface Props { + field: AnyFieldApi; +} + +export const NickNameField = ({ field }: Props) => { + return ( +
+ + + field.handleChange(e.target.value)} + /> +
+ ); +}; diff --git a/src/components/pages/profile/profile-edit-modal/index.tsx b/src/components/pages/profile/profile-edit-modal/index.tsx new file mode 100644 index 00000000..c55aa8c2 --- /dev/null +++ b/src/components/pages/profile/profile-edit-modal/index.tsx @@ -0,0 +1,70 @@ +'use client'; +import { useForm } from '@tanstack/react-form'; + +import { + Button, + ImageRecord, + ModalContent, + ModalDescription, + ModalTitle, + useModal, +} from '@/components/ui'; +import { User } from '@/types/service/user'; + +import ImageField from '../profile-edit-fields/image-field'; +import { MBTIField } from '../profile-edit-fields/mbti-field'; +import { MessageField } from '../profile-edit-fields/message-field'; +import { NickNameField } from '../profile-edit-fields/nickname-field'; + +interface Props { + user: User; +} + +export const ProfileEditModal = ({ user }: Props) => { + const { profileImage: image, nickName, profileMessage, mbti } = user; + + const { close } = useModal(); + + const form = useForm({ + defaultValues: { + profileImage: { + [image]: null, + } as ImageRecord, + nickName, + profileMessage, + mbti, + }, + onSubmit: async ({ value }) => { + console.log(value); + close(); + }, + }); + + return ( + + 프로필 수정 + + 이 모달은 자신의 프로필을 수정할 수 있는 모달입니다. + +
{ + e.preventDefault(); + e.stopPropagation(); + form.handleSubmit(); + }} + > + } name='profileImage' /> + } name='nickName' /> + } name='profileMessage' /> + } name='mbti' /> +
+ + +
+ +
+ ); +}; diff --git a/src/components/pages/profile/profile-info/index.tsx b/src/components/pages/profile/profile-info/index.tsx index 1596779a..71ee7f6c 100644 --- a/src/components/pages/profile/profile-info/index.tsx +++ b/src/components/pages/profile/profile-info/index.tsx @@ -1,8 +1,10 @@ -import { Button } from '@/components/ui'; +'use client'; +import { Button, useModal } from '@/components/ui'; import { User } from '@/types/service/user'; import { ProfileCard } from '../profile-card'; import { ProfileDescription } from '../profile-description'; +import { ProfileEditModal } from '../profile-edit-modal'; import { ProfileFollowsBadge } from '../profile-follows-badge'; interface Props { @@ -10,11 +12,17 @@ interface Props { } export const ProfileInfo = ({ user }: Props) => { + const { open } = useModal(); + + const handleButtonClick = () => { + open(); + }; + return (
- +
); diff --git a/src/components/ui/modal/index.tsx b/src/components/ui/modal/index.tsx index 8fee0d58..c1258cf7 100644 --- a/src/components/ui/modal/index.tsx +++ b/src/components/ui/modal/index.tsx @@ -169,13 +169,15 @@ export const ModalContent = ({ children }: ModalContentProps) => { >
{ e.stopPropagation(); }} > - {children} - +
+ {children} + +
, document.body, @@ -212,7 +214,7 @@ export const ModalCloseButton = () => { const { close } = useModal(); return (