diff --git a/src/App.jsx b/src/App.jsx index 71dc335..c84f5fc 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -82,6 +82,8 @@ function App() { } /> } /> + } /> + {/* Center */} } /> } /> } /> - } /> } /> diff --git a/src/components/Auth/SignUp/helper/EmailAuth.jsx b/src/components/Auth/SignUp/helper/EmailAuth.jsx index 00276d6..3ad8eca 100644 --- a/src/components/Auth/SignUp/helper/EmailAuth.jsx +++ b/src/components/Auth/SignUp/helper/EmailAuth.jsx @@ -8,7 +8,7 @@ import SignUpButton from '@/components/Auth/SignUp/helper/SignUpButton'; export default function EmailAuth() { const emailCodeRef = useRef(null); - const { signUpForm, setEmailAuthField } = useSignUpStore(); + const { signUpForm, setEmailAuthField, isEmailFirstCheck } = useSignUpStore(); const { sendEmail, verifyEmail, sendEmailStatus, verifyEmailStatus } = useEmailAuthMutation(); const { email, emailCode, isVerified, mailSeq, password, passwordConfirm } = signUpForm.emailAuth; @@ -28,7 +28,7 @@ export default function EmailAuth() { return (
- +
+ + {!isEmailFirstCheck && !email && ( +

+ 이메일을 입력해주세요 +

+ )}
- + setEmailAuthField('password', e.target.value)} className='rounded-lg h-[4.0625rem] text-base font-normal text-[var(--button-black)] border border-[var(--outline)] placeholder:text-[var(--placeholder-gray)] w-[100%]' /> + {!isEmailFirstCheck && !password && ( +

+ 비밀번호를 입력해주세요 +

+ )}
- + setEmailAuthField('passwordCheck', true)} className='rounded-lg h-[4.0625rem] text-base font-normal text-[var(--button-black)] border border-[var(--outline)] placeholder:text-[var(--placeholder-gray)] w-[100%]' /> + + {!isEmailFirstCheck && !passwordConfirm && ( +

+ 비밀번호를 확인해주세요 +

+ )}
diff --git a/src/components/Auth/SignUp/helper/HelperInfo.jsx b/src/components/Auth/SignUp/helper/HelperInfo.jsx index 2ddd706..abc07c6 100644 --- a/src/components/Auth/SignUp/helper/HelperInfo.jsx +++ b/src/components/Auth/SignUp/helper/HelperInfo.jsx @@ -16,6 +16,12 @@ export default function HelperInfo() { setHelperInfoField('profilePic', value); }; + const handleBirthday = (e) => { + let str = e.target.value.replace(/\D/g, ''); + if (str.length > 8) str = str.slice(0, 8); + setHelperInfoField('birthday', str); + }; + return (

@@ -25,13 +31,12 @@ export default function HelperInfo() {

- {console.log(isFirstCheck)} setHelperInfoField('name', e.target.value)} - className={`rounded-lg h-[4.0625rem] text-base font-normal text-[var(--button-black)] border placeholder:text-[var(--placeholder-gray)] w-[100%] ${ + className={`rounded-lg h-[4.0625rem] text-base font-normal text-[var(--button-black)] border placeholder:text-[var(--placeholder-gray)] w-[100%] ${ !isFirstCheck && !name ? 'border-[var(--required-red)]' : 'border-[var(--outline)]' }`} /> @@ -72,7 +77,7 @@ export default function HelperInfo() { 여성 - {!isFirstCheck && !gender && ( + {!isFirstCheck && gender === null && (

성별을 입력해주세요

@@ -85,7 +90,8 @@ export default function HelperInfo() { inputMode='numeric' maxLength={8} value={birthday} - onChange={(e) => setHelperInfoField('birthday', e.target.value)} + // onChange={(e) => setHelperInfoField('birthday', e.target.value)} + onChange={handleBirthday} className={`rounded-lg h-[4.0625rem] text-base font-normal text-[var(--button-black)] border placeholder:text-[var(--placeholder-gray)] w-[100%] ${ !isFirstCheck && !birthday ? 'border-[var(--required-red)]' : 'border-[var(--outline)]' }`} @@ -128,7 +134,7 @@ export default function HelperInfo() { 아니오 - {!isFirstCheck && !carOwnYn && ( + {!isFirstCheck && carOwnYn === null && (

차량소유여부를 입력해주세요

@@ -144,7 +150,7 @@ export default function HelperInfo() { 아니오 - {!isFirstCheck && !eduYn && ( + {!isFirstCheck && eduYn === null && (

치매교육 이수 여부를 입력해주세요

diff --git a/src/components/Auth/SignUp/helper/SignUpButton.jsx b/src/components/Auth/SignUp/helper/SignUpButton.jsx index c381671..8a00631 100644 --- a/src/components/Auth/SignUp/helper/SignUpButton.jsx +++ b/src/components/Auth/SignUp/helper/SignUpButton.jsx @@ -20,10 +20,15 @@ export default function SignUpButton() { const signUpForm = useSignUpStore((state) => state.signUpForm); const submitSignUp = useSignUpStore((state) => state.submitHelper); - const { setIsFirstCheck } = useSignUpStore(); + const setIsFirstCheck = useSignUpStore((state) => state.setIsFirstCheck); + const setIsEmailFirstCheck = useSignUpStore((state) => state.setIsEmailFirstCheck); + // const { setIsFirstCheck, setIsEmailFirstCheck } = useSignUpStore(); const handleNext = async () => { - setIsFirstCheck(false); + if (currentStep === 0) { + setIsEmailFirstCheck(false); + } else if (currentStep === 1) setIsFirstCheck(false); + if (currentStep === 2) { // 만약 선택된 자격증이 있다면, 그 항목 하위의 모든 필드가 입력되었는지 체크 const incomplete = Object.entries(signUpForm.licenseInfo).find(([key, certData]) => { diff --git a/src/components/Auth/SignUp/helper/SignUpComplete.jsx b/src/components/Auth/SignUp/helper/SignUpComplete.jsx index 4ba1da8..bd3ba24 100644 --- a/src/components/Auth/SignUp/helper/SignUpComplete.jsx +++ b/src/components/Auth/SignUp/helper/SignUpComplete.jsx @@ -9,8 +9,8 @@ export default function SignUpComplete() { navigate('/signin'); }; - const handleInfo = () => { - navigate('/helper/account'); + const handleHome = () => { + navigate('/'); }; return ( @@ -33,8 +33,8 @@ export default function SignUpComplete() { -
diff --git a/src/components/helper/Matching/CompleteDetail.jsx b/src/components/helper/Matching/CompleteDetail.jsx index d901dbd..1776080 100644 --- a/src/components/helper/Matching/CompleteDetail.jsx +++ b/src/components/helper/Matching/CompleteDetail.jsx @@ -33,6 +33,8 @@ export default function CompleteDetail({ patientLogSeq, returnPath }) { ); useEffect(() => { + window.scrollTo(0, 0); + setHeaderProps({ type: 'back', title: '어르신 상세정보', @@ -111,7 +113,10 @@ export default function CompleteDetail({ patientLogSeq, returnPath }) { - + state.getHelperSeq); useEffect(() => { + window.scrollTo(0, 0); setHeaderProps({ type: 'back', title: '어르신 상세정보', @@ -163,7 +164,10 @@ export default function RequestDetail({ patientLogSeq, returnPath }) {
- + diff --git a/src/pages/helper/AccountEdit/AccountEdit.jsx b/src/pages/helper/AccountEdit/AccountEdit.jsx index 1033023..9d0f14d 100644 --- a/src/pages/helper/AccountEdit/AccountEdit.jsx +++ b/src/pages/helper/AccountEdit/AccountEdit.jsx @@ -36,7 +36,7 @@ export default function AccountEdit() { const { helper } = useHelperAccountStore(); useEffect(() => { - setHeaderProps({ type: 'back', title: '나의 계정' }); + setHeaderProps({ type: 'back', title: '나의 계정', onBack: () => navigate('/helper/account') }); return () => { clearHeaderProps(); }; @@ -48,18 +48,6 @@ export default function AccountEdit() { const handleSave = async () => { try { - // 모든 Store의 현재 상태로 새 프로필 생성 - const newProfile = { - // ...editedProfile, - // pay: { - // amount: selectedPay, - // type: payType, - // }, - // careTypes: selectedTypes, - // locations: selectedDistricts, - // schedules: schedules, - }; - await request('put', '/helper/complete-profile', { introduce: helper.introduce, careExperience: helper.careExperience, diff --git a/src/pages/helper/AccountEdit/CareerSection.jsx b/src/pages/helper/AccountEdit/CareerSection.jsx index aff0e11..22c5947 100644 --- a/src/pages/helper/AccountEdit/CareerSection.jsx +++ b/src/pages/helper/AccountEdit/CareerSection.jsx @@ -17,10 +17,18 @@ const CareExperienceSelector = () => { className='flex items-center gap-8' value={helper.careExperience} // Zustand에서 직접 가져옴 > - + 신입 - + 경력 diff --git a/src/pages/helper/HelperAddress.jsx b/src/pages/helper/HelperAddress.jsx index ddd8a03..6e97f21 100644 --- a/src/pages/helper/HelperAddress.jsx +++ b/src/pages/helper/HelperAddress.jsx @@ -6,7 +6,7 @@ export default function HelperAddress() { return ( { diff --git a/src/store/auth/helper/useSignUpStore.js b/src/store/auth/helper/useSignUpStore.js index b222133..8e8ac91 100644 --- a/src/store/auth/helper/useSignUpStore.js +++ b/src/store/auth/helper/useSignUpStore.js @@ -1,6 +1,7 @@ import { create } from 'zustand'; import { omit } from '@/utils/omit'; import { signUpHelper, uploadHelperImg } from '@/services/signUpService'; +import { devtools } from 'zustand/middleware'; // 선택 해제 시 key 삭제 function removeLicenseField(licenseInfo, key) { @@ -61,6 +62,7 @@ const createHelperDataSlice = (set) => ({ kakaoUser: null, }, isFirstCheck: true, + isEmailFirstCheck: true, setEmailAuth: (data) => set((state) => ({ @@ -138,6 +140,8 @@ const createHelperDataSlice = (set) => ({ })), setIsFirstCheck: (newBool) => set({ isFirstCheck: newBool }), + setIsEmailFirstCheck: (newBool) => set({ isEmailFirstCheck: newBool }), + reset: () => set({ signUpForm: { @@ -258,9 +262,11 @@ const createHelperSubmissionSlice = (set, get) => ({ }, }); -export const useSignUpStore = create((set, get) => ({ - ...createHelperDataSlice(set), - ...createHelperSubmissionSlice(set, get), -})); +export const useSignUpStore = create( + devtools((set, get) => ({ + ...createHelperDataSlice(set), + ...createHelperSubmissionSlice(set, get), + })), +); export default useSignUpStore; diff --git a/src/store/helper/useHelperAccoutStore.js b/src/store/helper/useHelperAccoutStore.js index 1480415..80a085d 100644 --- a/src/store/helper/useHelperAccoutStore.js +++ b/src/store/helper/useHelperAccoutStore.js @@ -1,64 +1,67 @@ import { create } from 'zustand'; import { persist } from 'zustand/middleware'; +import { devtools } from 'zustand/middleware'; -const useHelperAccountStore = create((set) => ({ - helper: { - id: 1, - userEmail: 'emailAddress@gmail.com', - name: 'tempName', - phone: '010-0000-0000', - addressDetail: '서울특별시 강남구', - img: null, - helperWorkLocation: [], - helperWorkTime: [], - careLevel: 0, - inmateState: 0, - workType: 0, - careGender: 0, - serviceMeal: 0, - serviceMobility: 0, - serviceDaily: 0, - certificates: [ - { - certName: '', - certNum: '', - certDateIssue: null, - certSerialNum: null, - }, - ], - carOwnYn: true, - eduYn: false, - wage: null, - wageState: null, - introduce: '', - careExperience: false, - wageNegotiation: null, - }, +const useHelperAccountStore = create( + devtools((set) => ({ + helper: { + id: 1, + userEmail: 'emailAddress@gmail.com', + name: 'tempName', + phone: '010-0000-0000', + addressDetail: '서울특별시 강남구', + img: null, + helperWorkLocation: [], + helperWorkTime: [], + careLevel: 0, + inmateState: 0, + workType: 0, + careGender: 0, + serviceMeal: 0, + serviceMobility: 0, + serviceDaily: 0, + certificates: [ + { + certName: '', + certNum: '', + certDateIssue: null, + certSerialNum: null, + }, + ], + carOwnYn: true, + eduYn: false, + wage: null, + wageState: null, + introduce: '', + careExperience: false, + wageNegotiation: null, + }, - workTypeNames: [], + workTypeNames: [], - setPart: (newPart) => set((state) => ({ helper: { ...state.helper, ...newPart } })), - setHelper: (newInfo) => set(() => ({ helper: newInfo })), + setPart: (newPart) => set((state) => ({ helper: { ...state.helper, ...newPart } })), + setHelper: (newInfo) => set(() => ({ helper: newInfo })), - addWorkTypeNames: (newNames) => - set((state) => ({ workTypeNames: [...state.workTypeNames, newNames] })), - deleteWorkTypeName: (removingItem) => - set((state) => ({ - workTypeNames: state.workTypeNames.filter((item) => item !== removingItem), - })), - setWorkTypeNames: (newArr) => set({ workTypeNames: newArr }), + addWorkTypeNames: (newNames) => + set((state) => ({ workTypeNames: [...state.workTypeNames, newNames] })), + deleteWorkTypeName: (removingItem) => + set((state) => ({ + workTypeNames: state.workTypeNames.filter((item) => item !== removingItem), + })), + setWorkTypeNames: (newArr) => set({ workTypeNames: newArr }), - addCertificate: (newItem) => - set((state) => ({ - helper: { ...state.helper, certificates: [...state.helper.certificates, newItem] }, - })), - deleteCertificate: (deleted) => - set((state) => ({ - helper: { - ...state.helper, - certificates: state.helper.certificates.filter((x) => x.certName !== deleted), - }, - })), -})); + addCertificate: (newItem) => + set((state) => ({ + helper: { ...state.helper, certificates: [...state.helper.certificates, newItem] }, + })), + deleteCertificate: (deleted) => + set((state) => ({ + helper: { + ...state.helper, + certificates: state.helper.certificates.filter((x) => x.certName !== deleted), + }, + })), + })), +); export default useHelperAccountStore;