-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #271 from gloddy-dev/feature/270-profile-personalityi
[Feature] 회원 정보 수정 - 성격 api 구현
- Loading branch information
Showing
13 changed files
with
181 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
src/app/(main)/profile/setting/edit/components/ProfileEdit.client.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
'use client'; | ||
import EditProvider from './EditProvider.client'; | ||
import Step1 from './step1/Step1.client'; | ||
import Step2 from './step2/Step2.client'; | ||
import { useGetProfile } from '@/apis/profile'; | ||
import { useState } from 'react'; | ||
|
||
export default function ProfileEdit() { | ||
const [step, setStep] = useState(1); | ||
const { data: defaultProfileData } = useGetProfile(); | ||
|
||
return ( | ||
<EditProvider defaultValues={defaultProfileData}> | ||
{step === 1 && <Step1 onNext={() => setStep(2)} />} | ||
{step === 2 && <Step2 onPrev={() => setStep(1)} />} | ||
</EditProvider> | ||
); | ||
} |
17 changes: 17 additions & 0 deletions
17
src/app/(main)/profile/setting/edit/components/step1/Step1.client.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import Step1Header from './Step1Header'; | ||
import Step1InputForm from './Step1InputForm.client'; | ||
import { Spacing } from '@/components/common/Spacing'; | ||
|
||
interface Step1Props { | ||
onNext: () => void; | ||
} | ||
|
||
export default function Step1({ onNext }: Step1Props) { | ||
return ( | ||
<> | ||
<Step1Header /> | ||
<Spacing size={20} /> | ||
<Step1InputForm onNext={onNext} /> | ||
</> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
src/app/(main)/profile/setting/edit/components/step2/Step2.client.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import Step2Header from './Step2Header'; | ||
import Step2InputForm from './Step2InputForm.client'; | ||
import { Spacing } from '@/components/common/Spacing'; | ||
|
||
interface Step2Props { | ||
onPrev: () => void; | ||
} | ||
|
||
export default function Step2({ onPrev }: Step2Props) { | ||
return ( | ||
<> | ||
<Step2Header onClose={onPrev} /> | ||
<div className="px-20 pb-16 pt-32 text-h3 text-sign-cto"> | ||
사용자님의 성격을 | ||
<br /> | ||
선택해주세요! | ||
</div> | ||
<p className="px-20 text-subtitle-2 text-sign-tertiary">3개 이상 선택해주세요.</p> | ||
<Spacing size={16} /> | ||
<Step2InputForm onClose={onPrev} /> | ||
</> | ||
); | ||
} |
21 changes: 21 additions & 0 deletions
21
src/app/(main)/profile/setting/edit/components/step2/Step2Header.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { IconButton } from '@/components/Button'; | ||
import { Header } from '@/components/Header'; | ||
import Image from 'next/image'; | ||
|
||
interface Step2HeaderProps { | ||
onClose: () => void; | ||
} | ||
|
||
export default function Step2Header({ onClose }: Step2HeaderProps) { | ||
return ( | ||
<Header> | ||
<Header.Left className="px-4"> | ||
<IconButton size="large" onClick={onClose}> | ||
<Image src="/icons/24/close.svg" width={24} height={24} alt="back" /> | ||
</IconButton> | ||
|
||
<p className="text-subtitle-1">성격 선택</p> | ||
</Header.Left> | ||
</Header> | ||
); | ||
} |
53 changes: 53 additions & 0 deletions
53
src/app/(main)/profile/setting/edit/components/step2/Step2InputForm.client.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
'use client'; | ||
|
||
import { useEditContext } from '../EditProvider.client'; | ||
import { Button, ButtonGroup } from '@/components/Button'; | ||
import { Tag } from '@/components/Tag'; | ||
import { personalityList } from '@/constants/personalityList'; | ||
import { PersonalityType } from '@/types'; | ||
import { useCallback } from 'react'; | ||
|
||
interface InputFormProps { | ||
onClose: () => void; | ||
} | ||
|
||
export default function Step2InputForm({ onClose }: InputFormProps) { | ||
const { watch, setValue } = useEditContext(); | ||
|
||
const handleSelectedClick = useCallback( | ||
(personality: PersonalityType['keywordInEnglish']) => { | ||
const list = watch('personalities'); | ||
if (list.includes(personality)) { | ||
setValue( | ||
'personalities', | ||
list.filter((it: string) => it !== personality) | ||
); | ||
return; | ||
} | ||
setValue('personalities', [...list, personality]); | ||
}, | ||
[setValue, watch] | ||
); | ||
|
||
return ( | ||
<form className="px-20"> | ||
<section className="flex flex-wrap gap-12"> | ||
{personalityList.map((tag) => ( | ||
<Tag | ||
key={tag.id} | ||
id={tag.keywordInEnglish} | ||
isSelected={watch('personalities').includes(tag.keywordInEnglish)} | ||
onSelected={handleSelectedClick} | ||
> | ||
{tag.keyword} | ||
</Tag> | ||
))} | ||
</section> | ||
<ButtonGroup> | ||
<Button disabled={watch('personalities').length < 3} type="button" onClick={onClose}> | ||
완료 | ||
</Button> | ||
</ButtonGroup> | ||
</form> | ||
); | ||
} |
Oops, something went wrong.