From 5d5608486896fb8875af6eec5d9b4e51638f6b76 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Tue, 17 Dec 2024 02:34:10 +0900 Subject: [PATCH] =?UTF-8?q?Feat(mypage):=20custom=20hook=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/user-info/UserInfoSection.tsx | 97 ++++++------------- 1 file changed, 32 insertions(+), 65 deletions(-) diff --git a/src/app/(main)/mypage/_components/user-info/UserInfoSection.tsx b/src/app/(main)/mypage/_components/user-info/UserInfoSection.tsx index 66e88a14..6bf69426 100644 --- a/src/app/(main)/mypage/_components/user-info/UserInfoSection.tsx +++ b/src/app/(main)/mypage/_components/user-info/UserInfoSection.tsx @@ -1,11 +1,9 @@ -'use client' - -import { useState } from 'react' - import { GitHubLogoIcon, InstagramLogoIcon } from '@radix-ui/react-icons' import { Button, Input } from '@/components/ui' +import { useEditProfileIntro, useSocialInfo } from '../../_hooks' + interface UserInfoSectionProps { githubInfo: string instagramInfo: string @@ -17,61 +15,29 @@ const UserInfoSection = ({ instagramInfo: initialInstagramInfo, profileIntro: initialProfileIntro, }: UserInfoSectionProps) => { - const [profileIntro, setProfileIntro] = useState(initialProfileIntro) - const [isEditing, setIsEditing] = useState(false) - const [tempProfileIntro, setTempProfileIntro] = useState(initialProfileIntro) - - const [githubInfo, setGithubInfo] = useState(initialGithubInfo) - const [instagramInfo, setInstagramInfo] = useState(initialInstagramInfo) - const [isEditingSocial, setIsEditingSocial] = useState(false) - const [tempGithubInfo, setTempGithubInfo] = useState(initialGithubInfo) - const [tempInstagramInfo, setTempInstagramInfo] = - useState(initialInstagramInfo) - - const onEditProfileIntro = (e: React.MouseEvent) => { - e.preventDefault() + const { + value: profileIntro, + isEditing: isEditingIntro, + tempValue: tempProfileIntro, + setTempValue: setTempProfileIntro, + editProfileIntro, + keyDownEditProfileIntro, + } = useEditProfileIntro({ initialValue: initialProfileIntro }) - if (isEditing) { - setProfileIntro(tempProfileIntro) - setIsEditing(false) - } else { - setTempProfileIntro(profileIntro) - setIsEditing(true) - } - } - - const onEditProfileIntroKeyDown = ( - e: React.KeyboardEvent, - ) => { - if (e.key === 'Enter') { - setProfileIntro(tempProfileIntro) - setIsEditing(false) - } - } - - const onEditSocialInfo = (e: React.MouseEvent) => { - e.preventDefault() - - if (isEditingSocial) { - setGithubInfo(tempGithubInfo) - setInstagramInfo(tempInstagramInfo) - setIsEditingSocial(false) - } else { - setTempGithubInfo(githubInfo) - setTempInstagramInfo(instagramInfo) - setIsEditingSocial(true) - } - } - - const onEditSocialInfoKeyDown = ( - e: React.KeyboardEvent, - ) => { - if (e.key === 'Enter') { - setGithubInfo(tempGithubInfo) - setInstagramInfo(tempInstagramInfo) - setIsEditingSocial(false) - } - } + const { + githubInfo, + instagramInfo, + isEditing: isEditingSocial, + tempGithubInfo, + tempInstagramInfo, + setTempGithubInfo, + setTempInstagramInfo, + editSocialInfo, + keyDownEditSocialInfo, + } = useSocialInfo({ + initialGithubInfo, + initialInstagramInfo, + }) return (
@@ -81,13 +47,13 @@ const UserInfoSection = ({ 한 줄 소개
- {isEditing ? ( + {isEditingIntro ? (
setTempProfileIntro(e.target.value)} - onKeyDown={onEditProfileIntroKeyDown} + onKeyDown={keyDownEditProfileIntro} autoFocus />
@@ -101,9 +67,9 @@ const UserInfoSection = ({
@@ -125,7 +91,7 @@ const UserInfoSection = ({ className="w-full md:w-auto" value={tempGithubInfo} onChange={(e) => setTempGithubInfo(e.target.value)} - onKeyDown={onEditSocialInfoKeyDown} + onKeyDown={keyDownEditSocialInfo} autoFocus /> ) : ( @@ -141,7 +107,8 @@ const UserInfoSection = ({ className="w-full md:w-auto" value={tempInstagramInfo} onChange={(e) => setTempInstagramInfo(e.target.value)} - onKeyDown={onEditSocialInfoKeyDown} + onKeyDown={keyDownEditSocialInfo} + autoFocus /> ) : ( {instagramInfo} @@ -155,7 +122,7 @@ const UserInfoSection = ({