Skip to content

feat: SP1 회원가입 페이지 디자인 반영사항 적용#304

Merged
heesunee merged 16 commits intodevelopfrom
feat/#303/signup
Aug 27, 2025
Merged

feat: SP1 회원가입 페이지 디자인 반영사항 적용#304
heesunee merged 16 commits intodevelopfrom
feat/#303/signup

Conversation

@heesunee
Copy link
Contributor

@heesunee heesunee commented Aug 25, 2025

#️⃣ Related Issue

Closes #303

💎 PR Point

  • 기존 단일 페이지로 구성되어있던 회원가입 페이지를 Funnel 구조로 수정했습니다. (step = AGREEMENT, INFORMATION)
  • 정보 입력 단계 내 한줄 소개가 추가 되었습니다.
  • 기존에 존재하던 input 컴포넌트는 줄바꿈이 되지 않기 때문에 한줄소개를 위해.. textarea 분기를 추가했습니다.
  • 자세한 설명은 코드에 더 달아놓을게요 !

📸 Screenshot

-.Clipchamp.mp4

Summary by CodeRabbit

  • New Features

    • 회원가입이 단계형으로 변경되어 약관 동의 → 정보 입력 순서로 진행됩니다.
    • 약관 전체 동의 토글과 필수 항목(이용약관, 개인정보) 체크 후에만 다음 단계로 이동됩니다.
    • “한 줄 소개” 입력란이 추가되었고 길이 제한 및 유효성 검사를 지원합니다.
  • UI/UX

    • 입력창에 멀티라인 지원 및 글자수 표시가 추가되어 긴 소개 입력이 편리해졌습니다.
    • 출생 연도 문구가 더 명확해졌고 우측 화살표 아이콘 등 시각 요소가 개선되었습니다.
    • 페이지 레이아웃과 간격, 체크박스 행 구성 등이 조정되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Aug 25, 2025

Walkthrough

회원가입을 단일 페이지에서 useFunnel 기반 2단계(AGREEMENT → INFORMATION)로 분리했습니다. 약관 동의 컴포넌트(AgreementStep)와 CheckboxRow를 추가하고, 한 줄 소개 입력(스키마·검증·상수 포함) 및 Input의 멀티라인/길이 표시 기능을 도입했습니다. 아이콘 목록과 스타일 유틸리티도 조정되었습니다.

Changes

Cohort / File(s) Change Summary
Agreement step UI
src/pages/sign-up/components/agreement-step.tsx, src/pages/sign-up/components/checkbox-row.tsx
신규 약관 동의 컴포넌트 추가(전체 동의 토글, 개별 필수 체크박스, Next 버튼 활성 제어) 및 재사용 가능한 CheckboxRow 도입.
Signup form enhancements
src/pages/sign-up/components/signup-step.tsx, src/pages/sign-up/schema/validation-schema.ts, src/pages/sign-up/constants/NOTICE.ts, src/pages/sign-up/constants/validation.ts
한 줄 소개 필드 추가(플레이스홀더, 최소·최대 길이, 검증 메시지), 스키마·타입·상수(INFORMATION_*, SIGNUP_STEPS) 확장.
Funnel flow wiring
src/pages/sign-up/sign-up.tsx, src/shared/styles/custom-utilities.css
useFunnel으로 2단계 퍼널 구성(AGREEMENT → INFORMATION), 레이아웃 구조 변경 및 .signup-layout 유틸리티 제거.
Shared Input updates
src/shared/components/input/input.tsx, src/shared/components/input/styles/input-variants.ts
Input에 multiline/hasLength/length/maxLength/className 추가, textarea 분기와 onBlur 타입 확장, 아이콘 색상 토큰 조정(text-gray-500 → text-gray-600).
Icon set
src/shared/constants/icon-list.ts
아이콘 목록에 'arrow-right-18' 추가.

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: 제출 로직 호출
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Assessment against linked issues

Objective Addressed Explanation
회원가입 페이지 퍼블리싱 수정(레이아웃·단계 반영) [#303]
약관 동의 단계 도입 및 네비게이션 연동 [#303]
한 줄 소개 입력 추가 및 검증/가이드 텍스트 반영 [#303]
디자인/문구 픽셀 단위 일치 검증 [#303] PR만으로 픽셀·카피 정확성(디자인 시안 대비)을 확인할 수 없음.

Possibly related PRs

Suggested reviewers

  • yeeeww
  • bongtta
  • Dubabbi

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 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.

📥 Commits

Reviewing files that changed from the base of the PR and between 76ac12c and 2ebc285.

📒 Files selected for processing (1)
  • src/pages/sign-up/components/checkbox-row.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/pages/sign-up/components/checkbox-row.tsx
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#303/signup

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link

MATEBALL-STORYBOOK
⚾ Storybook 배포가 완료되었습니다!

Comment on lines +11 to +14
const [terms, setTerms] = useState(false);
const [privacy, setPrivacy] = useState(false);

const isAllChecked = terms && privacy;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각각 이용약관 동의, 개인정보 수집 동의 값을 저장하는 상태와, 전체 항목이 체크되었는지 검사를 위한 isAllChecked입니다. 둘다 true여야지 활성화 됩니다

mode: 'onChange',
resolver: zodResolver(NicknameSchema),
defaultValues: { nickname: '', gender: undefined, birthYear: '' },
defaultValues: { nickname: '', gender: undefined, birthYear: '', information: '' },
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한 줄 소개 항목이 추가가 되어서 form 에도 등록해두었습니다. 서버 api는 아직 업데이트가 안돼서 api 수정은 안되어있어용

Comment on lines +59 to +75
{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>)}
/>
) : (
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여러 줄 입력받을 수 있게 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>}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

글자수를 보여주기 위해 hasLength를 추가했습니다

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.tsxonSubmit 핸들러에서 사용자 한 줄 소개(data.information)를 받아오고 있음에도, 이를 백엔드로 전송하는 userInfoMutation 호출부에 포함되어 있지 않습니다. 이로 인해 사용자가 입력한 소개가 저장되지 않습니다.

수정해야 할 위치:

  • src/pages/sign-up/components/signup-step.tsx (Lines 56–82)
  • src/shared/apis/user/user-mutations.ts (USER_INFO mutation)
  • 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.

📥 Commits

Reviewing files that changed from the base of the PR and between b00d4ad and ea2a96d.

⛔ Files ignored due to path filters (2)
  • src/shared/assets/svgs/arrow-right-18.svg is excluded by !**/*.svg
  • src/shared/assets/svgs/check-filled.svg is 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 전달이 적절히 처리되었습니다.

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Aug 25, 2025

Deploying mateball-client with  Cloudflare Pages  Cloudflare Pages

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

View logs

Copy link
Contributor

@bongtta bongtta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니당 👍

<div className="flex items-center gap-[0.8rem]">
<Icon
name="check-filled"
onClick={onClick}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이콘이 아니라 버튼 자체에 onClick 연결하는거 어떨까요??
추가로 커서 pointer까지 설정하면 좋을 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 어디영역까지 클릭했을때 체크되게 할지 기디에 한번 물어보고 수정할게요!

label="이용약관 동의 (필수)"
onClick={handleCheckTerms}
checked={terms}
svg={<Icon name="arrow-right-18" size={1.8} />}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클릭시 이동할 주소는 아직 전달 못받은거져??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네! 여기도 페이지로 퍼블리싱 작업 들어갈 것 같아요 ㅠㅠ

Copy link
Contributor

@Dubabbi Dubabbi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

역시 꼼꼼하게 작업해 주셨네요 쵝오 👍 수고하셨어요!!

@heesunee heesunee merged commit 1be8cf3 into develop Aug 27, 2025
7 checks passed
@heesunee heesunee deleted the feat/#303/signup branch August 27, 2025 13:10
heesunee added a commit that referenced this pull request Aug 31, 2025
* 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>
heesunee added a commit that referenced this pull request Aug 31, 2025
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat new feature 희선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: SP1 회원가입 페이지 퍼블리싱을 수정합니다.

3 participants