Conversation
Walkthrough회원가입을 단일 페이지에서 useFunnel 기반 2단계(AGREEMENT → INFORMATION)로 분리했습니다. 약관 동의 컴포넌트(AgreementStep)와 CheckboxRow를 추가하고, 한 줄 소개 입력(스키마·검증·상수 포함) 및 Input의 멀티라인/길이 표시 기능을 도입했습니다. 아이콘 목록과 스타일 유틸리티도 조정되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor U as 사용자
participant SU as SignUp(Page)
participant F as useFunnel
participant A as AgreementStep
participant I as SignupStep
U->>SU: 방문
SU->>F: useFunnel(SIGNUP_STEPS, ROUTES.HOME)
F-->>SU: Funnel, Step, goNext
SU->>A: 렌더(AGREEMENT)
U->>A: 약관 체크(전체/개별)
A-->>SU: next() 호출 (Next 클릭)
SU->>F: goNext()
SU->>I: 렌더(INFORMATION)
U->>I: 닉네임·한 줄 소개·출생 연도 입력
I->>SU: 제출 로직 호출
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Assessment against linked issues
Possibly related PRs
Suggested reviewers
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. 📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 💡 Knowledge Base configuration:
You can enable these sources in your CodeRabbit configuration. 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
|
MATEBALL-STORYBOOK |
| const [terms, setTerms] = useState(false); | ||
| const [privacy, setPrivacy] = useState(false); | ||
|
|
||
| const isAllChecked = terms && privacy; |
There was a problem hiding this comment.
각각 이용약관 동의, 개인정보 수집 동의 값을 저장하는 상태와, 전체 항목이 체크되었는지 검사를 위한 isAllChecked입니다. 둘다 true여야지 활성화 됩니다
| mode: 'onChange', | ||
| resolver: zodResolver(NicknameSchema), | ||
| defaultValues: { nickname: '', gender: undefined, birthYear: '' }, | ||
| defaultValues: { nickname: '', gender: undefined, birthYear: '', information: '' }, |
There was a problem hiding this comment.
한 줄 소개 항목이 추가가 되어서 form 에도 등록해두었습니다. 서버 api는 아직 업데이트가 안돼서 api 수정은 안되어있어용
| {multiline ? ( | ||
| <textarea | ||
| id={id} | ||
| ref={ref as React.Ref<HTMLTextAreaElement>} | ||
| className={cn( | ||
| 'w-full bg-transparent text-gray-black outline-none placeholder:text-gray-500', | ||
| 'resize-none whitespace-pre-wrap break-words', | ||
| 'h-[10.4rem] p-[1.6rem]', | ||
| )} | ||
| onFocus={() => setIsFocused(true)} | ||
| onBlur={(e) => { | ||
| setIsFocused(false); | ||
| onBlur?.(e); | ||
| }} | ||
| {...(props as React.TextareaHTMLAttributes<HTMLTextAreaElement>)} | ||
| /> | ||
| ) : ( |
There was a problem hiding this comment.
여러 줄 입력받을 수 있게 input 컴포넌트를 확장시켰습니다. multiline props가 true면 input이 아니라 textarea로 동작해용
| <p className={cn('cap_14_m text-gray-600', !multiline && iconColorClass)}> | ||
| {messageToShow} | ||
| </p> | ||
| {hasLength && <p className="cap_14_m text-gray-600">{length}/50</p>} |
There was a problem hiding this comment.
글자수를 보여주기 위해 hasLength를 추가했습니다
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src/pages/sign-up/schema/validation-schema.ts (1)
1-11: constants에INFORMATION_ERROR_MESSAGES정의 및 schema에 import/적용 필요현재
src/pages/sign-up/schema/validation-schema.ts에서 정보 입력(information) 필드에 대한 에러 메시지가 지정되어 있지 않으며, 제안된INFORMATION_ERROR_MESSAGES는 constants 파일에 정의되어 있지 않습니다. 아래 수정이 필요합니다:
- src/pages/sign-up/constants/validation.ts
INFORMATION_ERROR_MESSAGES객체를 정의 (최소/최대 길이 초과 시 메시지 등)- src/pages/sign-up/schema/validation-schema.ts
- import 구문에
INFORMATION_ERROR_MESSAGES추가information스키마에.min()및.max()호출 시{ message: INFORMATION_ERROR_MESSAGES.MIN/MAX }옵션 지정// src/pages/sign-up/constants/validation.ts export const INFORMATION_MIN_LENGTH = 1; export const INFORMATION_MAX_LENGTH = 50; +export const INFORMATION_ERROR_MESSAGES = { + MIN: `${INFORMATION_MIN_LENGTH}자 이상 입력해 주세요.`, + MAX: `${INFORMATION_MAX_LENGTH}자 이내로 입력해 주세요.`, +};// src/pages/sign-up/schema/validation-schema.ts -import { +import { BIRTH_ERROR_MESSAGES, GENDER_ERROR_MESSAGES, GENDER_OPTIONS, INFORMATION_MAX_LENGTH, INFORMATION_MIN_LENGTH, + INFORMATION_ERROR_MESSAGES, NICKNAME_ERROR_MESSAGES, NICKNAME_MAX_LENGTH, NICKNAME_MIN_LENGTH, NICKNAME_REGEX, } from '@pages/sign-up/constants/validation'; export const NicknameSchema = z.object({ @@ information: z - .string().min(INFORMATION_MIN_LENGTH).max(INFORMATION_MAX_LENGTH), + .string() + .min(INFORMATION_MIN_LENGTH, { message: INFORMATION_ERROR_MESSAGES.MIN }) + .max(INFORMATION_MAX_LENGTH, { message: INFORMATION_ERROR_MESSAGES.MAX }), });src/pages/sign-up/components/signup-step.tsx (1)
56-82:information필드가 API 요청에 누락되어 있습니다현재
signup-step.tsx의onSubmit핸들러에서 사용자 한 줄 소개(data.information)를 받아오고 있음에도, 이를 백엔드로 전송하는userInfoMutation호출부에 포함되어 있지 않습니다. 이로 인해 사용자가 입력한 소개가 저장되지 않습니다.수정해야 할 위치:
- src/pages/sign-up/components/signup-step.tsx (Lines 56–82)
- src/shared/apis/user/user-mutations.ts (
USER_INFOmutation)- src/shared/types/user-types.ts (
postUserInfoRequest타입)예시 수정안:
// src/pages/sign-up/components/signup-step.tsx - userInfoMutation.mutate( - { - gender: data.gender, - birthYear: Number(data.birthYear), - }, + userInfoMutation.mutate( + { + gender: data.gender, + birthYear: Number(data.birthYear), + information: data.information, // ← 추가 + }, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: authQueries.USER_STATUS().queryKey }); navigate(ROUTES.HOME); }, onError: (error) => { console.error(error); }, }, );// src/shared/types/user-types.ts export interface postUserInfoRequest { gender: string; birthYear: number; + information: string; // ← 추가 }// src/shared/apis/user/user-mutations.ts USER_INFO: () => mutationOptions<responseTypes, Error, postUserInfoRequest>({ mutationKey: USER_KEY.INFO(), - mutationFn: ({ gender, birthYear }) => post(END_POINT.USER_INFO, { gender, birthYear }), + mutationFn: ({ gender, birthYear, information }) => + post(END_POINT.USER_INFO, { gender, birthYear, information }), }),위 세 곳을 반드시 수정하여 사용자 한 줄 소개가 정상적으로 전송 및 저장되도록 해주세요.
🧹 Nitpick comments (9)
src/shared/components/input/styles/input-variants.ts (1)
11-12: 포커스/기본 아이콘 컬러가 동일합니다 — 포커스 가시성 저하 가능focus, default가 모두 text-gray-600이면 상태 구분이 약해질 수 있어요. border focus가 main-900이라 대비는 일부 있지만, 아이콘도 focus 시 main-900으로 맞추면 일관성과 접근성이 좋아집니다.
아래처럼 제안드립니다.- focus: 'text-gray-600', - default: 'text-gray-600', + focus: 'text-main-900', + default: 'text-gray-600',추가로 disabled 상태 아이콘 컬러가 필요하면 별도 키(
disabled: 'text-gray-400'등) 도입을 검토해 주세요.src/pages/sign-up/constants/NOTICE.ts (1)
17-18: 문구 톤/일관성 개선 제안다른 메시지들과 동일한 톤(설명형/완곡체)으로 통일하는 편이 자연스럽습니다. 아래처럼 제안드립니다.
-export const INFORMATION_RULE_MESSAGE = '비방, 욕설 등 불쾌감을 줄 수 있는 내용 제한'; +export const INFORMATION_RULE_MESSAGE = '비방·욕설 등 불쾌감을 줄 수 있는 내용은 입력할 수 없어요.';src/shared/constants/icon-list.ts (1)
6-6: 아이콘 스프라이트 리소스 등록/일치 여부 확인
arrow-right-18가 스프라이트(#icon-arrow-right-18)에 실제로 추가되었는지 확인 부탁드립니다. 미등록 시<use href="#icon-arrow-right-18" />가 빈 렌더링이 됩니다.
또, 좌/우 24 사이즈 페어링 전략이 있다면arrow-right-24추가 필요 여부도 한 번만 점검해 주세요(디자인 가이드와 일치 여부).src/pages/sign-up/constants/validation.ts (3)
25-26: ‘한 줄 소개’ placeholder에 줄바꿈 포함 — UX 의도 재확인placeholder에
\n이 포함되어 실제 다중 줄로 보입니다. 컴포넌트가 textarea로 변경되었더라도, “한 줄 소개”라는 네이밍과의 불일치 또는 복붙 시 의도치 않은 개행 유입이 있을 수 있어요.
한 줄 예시로 단일 문장 유지하거나, 다중 줄을 용인한다면 용어를 “소개”로 조정하는 방안을 제안합니다.-export const INFORMATION_PLACEHOLDER = - '엘지팬입니다! 같이 응원가 떼창해요~\n잠실에서 김말국 먹으면서 직관하고 싶어요 ㅎㅎ'; +export const INFORMATION_PLACEHOLDER = + '엘지팬입니다! 같이 응원가 떼창해요~ · 잠실에서 김말국 먹으면서 직관하고 싶어요 ㅎㅎ';브랜드 표기 가이드가 있다면 ‘엘지’ vs ‘LG’ 표기도 한 번만 확인 부탁드립니다.
39-39: 리터럴 타입 보존을 위해 as const 부여스텝 문자열 오타를 컴파일 타임에 잡기 위해 리터럴 타입을 유지하는 편이 안전합니다.
-export const SIGNUP_STEPS = ['AGREEMENT', 'INFORMATION']; +export const SIGNUP_STEPS = ['AGREEMENT', 'INFORMATION'] as const;
41-42: 정보 필드 에러 메시지 상수 추가 제안스키마에서 기본(zod) 영문 메시지가 노출되지 않도록, 한국어 에러 메시지를 상수화해 두는 것을 권장합니다. 아래 상수를 추가하면 스키마에서 재사용하기 좋습니다.
export const INFORMATION_MIN_LENGTH = 1; export const INFORMATION_MAX_LENGTH = 50; +export const INFORMATION_ERROR_MESSAGES = { + REQUIRED: '한 줄 소개를 입력해 주세요.', + LENGTH: '1-50자 이내로 입력해 주세요.', +};이후
validation-schema.ts에서 해당 메시지를 사용하도록 연결하면 톤앤매너가 일관됩니다.src/pages/sign-up/components/agreement-step.tsx (3)
17-20: 변수명 충돌 가능성
handleCheckAll함수 내에서next라는 변수명이 props의next함수와 충돌할 수 있습니다. 혼동을 피하기 위해 다른 이름을 사용하는 것이 좋습니다.const handleCheckAll = () => { - const next = !isAllChecked; - setTerms(next); - setPrivacy(next); + const newValue = !isAllChecked; + setTerms(newValue); + setPrivacy(newValue); };
23-25: 불필요한 변수 선언
handleCheckTerms함수에서next변수를 선언하는 것이 불필요합니다. 직접 값을 전달하는 것이 더 간결합니다.const handleCheckTerms = () => { - const next = !terms; - setTerms(next); + setTerms(!terms); };
27-30: 불필요한 변수 선언
handleCheckPrivacy함수에서도 마찬가지로next변수가 불필요합니다.const handleCheckPrivacy = () => { - const next = !privacy; - setPrivacy(next); + setPrivacy(!privacy); };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (2)
src/shared/assets/svgs/arrow-right-18.svgis excluded by!**/*.svgsrc/shared/assets/svgs/check-filled.svgis excluded by!**/*.svg
📒 Files selected for processing (11)
src/pages/sign-up/components/agreement-step.tsx(1 hunks)src/pages/sign-up/components/checkbox-row.tsx(1 hunks)src/pages/sign-up/components/signup-step.tsx(4 hunks)src/pages/sign-up/constants/NOTICE.ts(1 hunks)src/pages/sign-up/constants/validation.ts(2 hunks)src/pages/sign-up/schema/validation-schema.ts(2 hunks)src/pages/sign-up/sign-up.tsx(1 hunks)src/shared/components/input/input.tsx(3 hunks)src/shared/components/input/styles/input-variants.ts(1 hunks)src/shared/constants/icon-list.ts(1 hunks)src/shared/styles/custom-utilities.css(0 hunks)
💤 Files with no reviewable changes (1)
- src/shared/styles/custom-utilities.css
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: heesunee
PR: MATEBALL/MATEBALL-CLIENT#78
File: src/pages/sign-up/utils/age-calculate.ts:1-4
Timestamp: 2025-07-09T09:08:46.371Z
Learning: heesunee는 나이 계산 시 한국식 나이 시스템을 사용하므로, 정확한 생일 기반 계산보다는 출생연도 기준의 간단한 계산 방식을 선호합니다.
📚 Learning: 2025-07-09T17:24:19.755Z
Learnt from: heesunee
PR: MATEBALL/MATEBALL-CLIENT#94
File: src/pages/sign-up/sign-up.tsx:4-4
Timestamp: 2025-07-09T17:24:19.755Z
Learning: heesunee는 src/pages/sign-up/sign-up.tsx의 isNicknameStep 하드코딩된 값을 퍼널 패턴으로 카카오 통합과 함께 나중에 처리할 예정이므로, 이 부분에 대해 다시 언급하지 않아야 합니다.
Applied to files:
src/pages/sign-up/components/signup-step.tsx
📚 Learning: 2025-07-09T18:07:41.693Z
Learnt from: heesunee
PR: MATEBALL/MATEBALL-CLIENT#95
File: src/pages/sign-up/components/nickname-step.tsx:28-30
Timestamp: 2025-07-09T18:07:41.693Z
Learning: heesunee는 src/pages/sign-up/components/nickname-step.tsx의 onSubmit 핸들러 API 호출을 쿼리와 함께 통합해서 처리할 예정이므로, 이 부분에 대해 다시 언급하지 않아야 합니다.
Applied to files:
src/pages/sign-up/components/signup-step.tsx
🧬 Code graph analysis (7)
src/shared/components/input/styles/input-variants.ts (2)
src/shared/components/button/button/button.tsx (2)
ButtonProps(20-49)ButtonProps(8-18)src/shared/components/icon/icon.tsx (1)
IconProps(3-13)
src/pages/sign-up/components/checkbox-row.tsx (1)
src/shared/libs/cn.ts (1)
cn(4-6)
src/shared/constants/icon-list.ts (3)
src/shared/components/icon/icon.tsx (2)
IconProps(3-13)rest(15-56)src/shared/components/chip/chip-info/chip-info-item.tsx (2)
ChipInfoItemProps(3-6)ChipInfoItemProps(8-15)src/shared/components/chip/chip-info.tsx (2)
ChipInfoProps(4-9)ChipInfoProps(11-18)
src/pages/sign-up/schema/validation-schema.ts (1)
src/pages/sign-up/constants/validation.ts (2)
INFORMATION_MIN_LENGTH(41-41)INFORMATION_MAX_LENGTH(42-42)
src/pages/sign-up/sign-up.tsx (3)
src/shared/hooks/use-funnel.tsx (5)
useFunnel(14-78)FunnelProps(60-64)StepProps(66-66)step(35-38)StepProps(9-12)src/pages/sign-up/constants/validation.ts (1)
SIGNUP_STEPS(39-39)src/shared/routes/routes-config.ts (1)
ROUTES(1-22)
src/shared/components/input/input.tsx (2)
src/shared/libs/cn.ts (1)
cn(4-6)src/shared/components/icon/icon.tsx (1)
IconProps(3-13)
src/pages/sign-up/components/signup-step.tsx (3)
src/shared/apis/user/user-mutations.ts (2)
userMutations(8-20)mutationOptions(15-19)src/pages/sign-up/constants/validation.ts (3)
INFORMATION_PLACEHOLDER(25-26)INFORMATION_MAX_LENGTH(42-42)BIRTH_PLACEHOLDER(23-23)src/pages/sign-up/constants/NOTICE.ts (1)
INFORMATION_RULE_MESSAGE(17-17)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Cloudflare Pages
🔇 Additional comments (4)
src/pages/sign-up/constants/validation.ts (1)
23-23: BIRTH_PLACEHOLDER 문구 변경 — 출생연도 기반 로직과 정합성 확인
'YYYY 형태로 입력하세요.'로 단순화된 만큼, 실제 검증/연령 계산이 출생연도 4자리 기준으로만 동작하는지 확인해 주세요.
저장된 러닝 참고: heesunee는 “한국식 나이(출생연도 기준 간단 계산)” 선호. 해당 선호가 현재 스키마/후속 계산에 반영돼 있는지 점검 권장합니다.src/pages/sign-up/sign-up.tsx (1)
1-21: LGTM! 퍼널 기반 회원가입 플로우가 잘 구현되었습니다.두 단계(약관 동의, 정보 입력)로 구성된 퍼널 패턴이 명확하게 구현되었고, 각 단계 간 전환이
goNext를 통해 적절히 처리되고 있습니다.src/pages/sign-up/components/signup-step.tsx (1)
121-135: 한 줄 소개 필드가 여러 줄 입력을 허용함'한 줄 소개'라는 라벨이지만 실제로는
multiline속성이 활성화되어 있어 여러 줄 입력이 가능합니다. 의도한 동작인지 확인이 필요합니다.만약 실제로 한 줄만 입력받고자 한다면
multiline속성을 제거하거나, 라벨을 '간단한 소개' 등으로 변경하는 것을 고려해보세요.src/shared/components/input/input.tsx (1)
59-89: 멀티라인 입력 지원이 잘 구현되었습니다textarea와 input을 조건부로 렌더링하는 로직이 깔끔하게 구현되었고, 각각에 맞는 ref 타입 캐스팅과 props 전달이 적절히 처리되었습니다.
Deploying mateball-client with
|
| Latest commit: |
2ebc285
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://7f8ff828.mateball-client.pages.dev |
| Branch Preview URL: | https://feat--303-signup.mateball-client.pages.dev |
| <div className="flex items-center gap-[0.8rem]"> | ||
| <Icon | ||
| name="check-filled" | ||
| onClick={onClick} |
There was a problem hiding this comment.
아이콘이 아니라 버튼 자체에 onClick 연결하는거 어떨까요??
추가로 커서 pointer까지 설정하면 좋을 것 같아요!
There was a problem hiding this comment.
이거 어디영역까지 클릭했을때 체크되게 할지 기디에 한번 물어보고 수정할게요!
| label="이용약관 동의 (필수)" | ||
| onClick={handleCheckTerms} | ||
| checked={terms} | ||
| svg={<Icon name="arrow-right-18" size={1.8} />} |
There was a problem hiding this comment.
네! 여기도 페이지로 퍼블리싱 작업 들어갈 것 같아요 ㅠㅠ
Dubabbi
left a comment
There was a problem hiding this comment.
역시 꼼꼼하게 작업해 주셨네요 쵝오 👍 수고하셨어요!!
* feat: 프로필 수정 상단 퍼블리싱 (#307) * feat: 프로필 수정 내 응원팀 추가 (#307) * feat: 매칭 조건 수정 리스트 추가 (#307) * feat: 조건 수정 초기값 반영 (#307) * feat: selectionGroup component 분리 (#307) * feat: 클릭시 로직 추가 (#307) * style: 불필요한 border-t 삭제 (#307) * feat: SP1 회원가입 페이지 디자인 반영사항 적용 (#304) * feat: signup-page funnel apply (#303) * feat: 약관 동의 페이지 퍼블리싱 (#303) * feat: arrow-right-18 svg add (#303) * feat: input className 받게 확장 (#303) * feat: 한줄소개 관련 유효성 추가 (#303) * feat: input textarea 분기 추가 (#303) * feat: 한줄소개 글자수 실시간 반영 (#303) * feat: 서비스 이용약관 체크박스 로직 추가 (#303) * feat: 이용약관 다음으로 이동 추가 (#303) * style: 정보입력 페이지 pb 수정 (#303) * feat: 체크박스 row 컴포넌트로 분리 (#303) * feat: 이용약관 페이지 checkboxrow 컴포넌트로 교체 (#303) * fix: 체크박스 클릭 함수 icon으로 이동 (#303) * refactor: maxLength 추가 (#303) * feat: 한줄소개 공백 입력 제거 (#303) * feat: checkbox button으로 감싸게 수정 (#303) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * feat: 응원팀 없어요 클릭시 메이트의 응원팀 disabled (#307) * feat: 응원팀 없을때 기본 값 수정 (#307) * feat: button disabled style add (#307) * fix: 수정 취소 (#307) * fix: 수정 취소 (#307) * feat: SP1 마이페이지 수정 및 로그아웃 api 연결 (#306) * style: footer 수정 (#305) * style: 마이페이지 제목, 버튼 이름 수정 (#305) * feat: divider 컴포넌트 추가 (#305) * feat: divider 추가 (#305) * feat: 문의하기, 의견 보내기 구글폼 연결 (#305) * feat: logout api 추가 (#305) * feat: 로그아웃 api 연결 (#305) * feat: 로그아웃 요청 성공시 reload 추가 (#305) * feat: 문의하기/의견보내기 링크 연결 (#305) * refactor: 링크 이동 a 태그로 변경 (#305) * feat: LOGOUT시 쿼리 삭제, 취소 (#305) * feat: 로그아웃 커서 추가 (#305) * feat: 로그아웃 api 실패시 로직 추가 (#307) * feat: logout api 실패 로직 추가 (#305) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * feat: 프로필 수정 상단 퍼블리싱 (#307) * feat: 프로필 수정 내 응원팀 추가 (#307) * feat: 매칭 조건 수정 리스트 추가 (#307) * feat: 조건 수정 초기값 반영 (#307) * feat: selectionGroup component 분리 (#307) * feat: 클릭시 로직 추가 (#307) * style: 불필요한 border-t 삭제 (#307) * feat: 응원팀 없어요 클릭시 메이트의 응원팀 disabled (#307) * feat: 응원팀 없을때 기본 값 수정 (#307) * feat: button disabled style add (#307) * fix: 수정 취소 (#307) * fix: 수정 취소 (#307) * feat: 프로필 수정 페이지 내 divider, 한줄 소개 input 수정(#307) * feat: 리뷰 반영 (#307) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr>
* feat: 약관 동의 노션 페이지 연결 (#323) * feat: 새 페이지로 이동하게 수정 (#323) * feat: 약관 동의 api 추가 (#323) * feat: 사용자 정보 설정 api 수정 (#323) * feat: 회원가입 페이지 내부 api 수정 (#323) * feat: 회원가입 성공, 실패시 분기 추가 (#323) * feat: 약관 동의 api 추가 (#323) * refactor: 약관 동의 먼저 후 그다음 정보 보내게 수정 (#323) * refactor: 중첩 버튼 수정 (#323) * feat: SP1 마이페이지 수정 및 로그아웃 api 연결 (#306) * style: footer 수정 (#305) * style: 마이페이지 제목, 버튼 이름 수정 (#305) * feat: divider 컴포넌트 추가 (#305) * feat: divider 추가 (#305) * feat: 문의하기, 의견 보내기 구글폼 연결 (#305) * feat: logout api 추가 (#305) * feat: 로그아웃 api 연결 (#305) * feat: 로그아웃 요청 성공시 reload 추가 (#305) * feat: 문의하기/의견보내기 링크 연결 (#305) * refactor: 링크 이동 a 태그로 변경 (#305) * feat: LOGOUT시 쿼리 삭제, 취소 (#305) * feat: 로그아웃 커서 추가 (#305) * feat: 로그아웃 api 실패시 로직 추가 (#307) * feat: logout api 실패 로직 추가 (#305) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * feat: SP1 매칭 정보 수정 페이지 퍼블리싱 (#308) * feat: 프로필 수정 상단 퍼블리싱 (#307) * feat: 프로필 수정 내 응원팀 추가 (#307) * feat: 매칭 조건 수정 리스트 추가 (#307) * feat: 조건 수정 초기값 반영 (#307) * feat: selectionGroup component 분리 (#307) * feat: 클릭시 로직 추가 (#307) * style: 불필요한 border-t 삭제 (#307) * feat: SP1 회원가입 페이지 디자인 반영사항 적용 (#304) * feat: signup-page funnel apply (#303) * feat: 약관 동의 페이지 퍼블리싱 (#303) * feat: arrow-right-18 svg add (#303) * feat: input className 받게 확장 (#303) * feat: 한줄소개 관련 유효성 추가 (#303) * feat: input textarea 분기 추가 (#303) * feat: 한줄소개 글자수 실시간 반영 (#303) * feat: 서비스 이용약관 체크박스 로직 추가 (#303) * feat: 이용약관 다음으로 이동 추가 (#303) * style: 정보입력 페이지 pb 수정 (#303) * feat: 체크박스 row 컴포넌트로 분리 (#303) * feat: 이용약관 페이지 checkboxrow 컴포넌트로 교체 (#303) * fix: 체크박스 클릭 함수 icon으로 이동 (#303) * refactor: maxLength 추가 (#303) * feat: 한줄소개 공백 입력 제거 (#303) * feat: checkbox button으로 감싸게 수정 (#303) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * feat: 응원팀 없어요 클릭시 메이트의 응원팀 disabled (#307) * feat: 응원팀 없을때 기본 값 수정 (#307) * feat: button disabled style add (#307) * fix: 수정 취소 (#307) * fix: 수정 취소 (#307) * feat: SP1 마이페이지 수정 및 로그아웃 api 연결 (#306) * style: footer 수정 (#305) * style: 마이페이지 제목, 버튼 이름 수정 (#305) * feat: divider 컴포넌트 추가 (#305) * feat: divider 추가 (#305) * feat: 문의하기, 의견 보내기 구글폼 연결 (#305) * feat: logout api 추가 (#305) * feat: 로그아웃 api 연결 (#305) * feat: 로그아웃 요청 성공시 reload 추가 (#305) * feat: 문의하기/의견보내기 링크 연결 (#305) * refactor: 링크 이동 a 태그로 변경 (#305) * feat: LOGOUT시 쿼리 삭제, 취소 (#305) * feat: 로그아웃 커서 추가 (#305) * feat: 로그아웃 api 실패시 로직 추가 (#307) * feat: logout api 실패 로직 추가 (#305) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * feat: 프로필 수정 상단 퍼블리싱 (#307) * feat: 프로필 수정 내 응원팀 추가 (#307) * feat: 매칭 조건 수정 리스트 추가 (#307) * feat: 조건 수정 초기값 반영 (#307) * feat: selectionGroup component 분리 (#307) * feat: 클릭시 로직 추가 (#307) * style: 불필요한 border-t 삭제 (#307) * feat: 응원팀 없어요 클릭시 메이트의 응원팀 disabled (#307) * feat: 응원팀 없을때 기본 값 수정 (#307) * feat: button disabled style add (#307) * fix: 수정 취소 (#307) * fix: 수정 취소 (#307) * feat: 프로필 수정 페이지 내 divider, 한줄 소개 input 수정(#307) * feat: 리뷰 반영 (#307) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr> * fix: 오타 수정 (#323) * feat: 약관 동의 노션 페이지 연결 (#323) * feat: 새 페이지로 이동하게 수정 (#323) * feat: 약관 동의 api 추가 (#323) * feat: 사용자 정보 설정 api 수정 (#323) * feat: 회원가입 페이지 내부 api 수정 (#323) * feat: 회원가입 성공, 실패시 분기 추가 (#323) * feat: 약관 동의 api 추가 (#323) * refactor: 약관 동의 먼저 후 그다음 정보 보내게 수정 (#323) * refactor: 중첩 버튼 수정 (#323) * fix: 오타 수정 (#323) * fix: build error (#323) --------- Co-authored-by: heesunee <heesun729@uos.ac.kr>
#️⃣ Related Issue
Closes #303
💎 PR Point
📸 Screenshot
-.Clipchamp.mp4
Summary by CodeRabbit
New Features
UI/UX