Common Components Input - kookmin-sw/capstone-2025-44 GitHub Wiki

🧾 Input Components

이 λ¬Έμ„œλŠ” νƒ€μž„νŽ˜μ΄μ—μ„œ μ‚¬μš©λ˜λŠ” μž…λ ₯(Input) μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. 이 μ»΄ν¬λ„ŒνŠΈλ“€μ€ μ‚¬μš©μž μž…λ ₯을 λ°›λŠ” μΌκ΄€λœ UI μš”μ†Œλ‘œ, μœ νš¨μ„± 검사, μŠ€νƒ€μΌλ§, μ—λŸ¬ ν”Όλ“œλ°±μ„ ν¬ν•¨ν•˜μ—¬ λ‹€μ–‘ν•œ μž…λ ₯ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.


Relevant Source Files


1. πŸ“Œ Input μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜

μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ 계측 ꡬ쑰

  • 곡톡 μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ (Common)

    • CommonInput
    • InputBox
  • ν”„λ‘œν•„ νŽΈμ§‘μš© μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ

    • InputInner (μˆ«μžν˜•)
    • InputNum (μˆ«μžν˜•)
    • InputMap (κ²€μƒ‰ν˜•)
    • NicknameInput
    • GenderInput
    • InputWrapper
    • LocationSwiper

νƒ€μž… μ •μ˜

곡톡 μž…λ ₯ νƒ€μž… (InputType)

interface InputType {
  value: string | number;
  setValue: React.Dispatch<...>;
  children?: React.ReactNode;
  isError?: boolean;
  setIsError?: React.Dispatch<...>;
}

InputInnerPropsλŠ” μ΅œλŒ€κ°’, μ΅œμ†Œκ°’, 가격 μ—¬λΆ€ λ“±μ˜ μœ νš¨μ„± μ œμ•½ 쑰건을 μΆ”κ°€λ‘œ ν¬ν•¨ν•©λ‹ˆλ‹€.


2. 🧱 μ£Όμš” μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ μ„€λͺ…

2.1 InputBox

  • μž…λ ₯ ν•„λ“œλ₯Ό κ°μ‹ΈλŠ” μ»¨ν…Œμ΄λ„ˆ μ—­ν• 
  • 내뢀에 InputNum, InputMap λ“± νŠΉν™” μ»΄ν¬λ„ŒνŠΈλ₯Ό 포함

πŸ”— Input-box.tsx

πŸ“Œ InputNum

  • 숫자만 μž…λ ₯ κ°€λŠ₯ (예: 가격, μˆ˜λŸ‰)
  • κ°•μ‘°λœ 배경색과 λ‹¨μœ„(예: 원) ν‘œμ‹œ

πŸ“Œ InputMap

  • κ²€μƒ‰μš© 인풋 (예: μœ„μΉ˜ 검색)
  • 잘λͺ»λœ μž…λ ₯ μ‹œ μ‹œκ°μ  ν”Όλ“œλ°±(흔듀림, 배경색 λ³€ν™”)

2.2 CommonInput

  • 곡톡 μŠ€νƒ€μΌμ„ μ μš©ν•œ μž…λ ₯ 래퍼
  • 내뢀에 InputInner 포함
  • μœ νš¨μ„± 검사: μ΅œλŒ€/μ΅œμ†Œκ°’, κ³΅λž€ λ“±
  • μ—λŸ¬ μƒνƒœ μ‹œ μ• λ‹ˆλ©”μ΄μ…˜ + 5초 ν›„ μžλ™ 리셋

πŸ”— common-input.tsx


3. πŸ§β€β™€οΈ ν”„λ‘œν•„ νŽΈμ§‘ μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ

3.1 InputWrapper

  • λͺ¨λ“  ν”„λ‘œν•„ μž…λ ₯ UIλ₯Ό κ°μ‹ΈλŠ” μ»¨ν…Œμ΄λ„ˆ
  • μ˜€λ Œμ§€μƒ‰ ν…Œλ‘λ¦¬, μˆ˜μ • μ•„μ΄μ½˜ 포함

πŸ”— input-wrapper.tsx

3.2 특수 μž…λ ₯λ“€

  • NicknameInput: μ΅œλŒ€ 5자, onBlur μ‹œ μƒνƒœ κ°±μ‹ 
  • GenderInput: 남/μ—¬ μ „ν™˜, μŠ¬λΌμ΄λ“œ μ• λ‹ˆλ©”μ΄μ…˜ 적용
  • LocationSwiper: μœ„μΉ˜ μ„ νƒμš© μΊλŸ¬μ…€, Swiper μ‚¬μš©
  • ProfileImage: 클릭 μ‹œ 카메라 μΈν„°νŽ˜μ΄μŠ€ μ˜€ν”ˆ (사진 촬영)

πŸ”— profile-edit-modal.tsx


4. 🚨 μœ νš¨μ„± 검사 및 μ—λŸ¬ 처리 흐름

μž…λ ₯ μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ‹€μŒκ³Ό 같은 νŒ¨ν„΄μ„ 톡해 μœ νš¨μ„± 검사λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. μ‚¬μš©μžμ˜ μž…λ ₯ λ°œμƒ
  2. μœ νš¨μ„± 검사 μ‹€ν–‰
  3. μ‹€νŒ¨ μ‹œ isError μƒνƒœ true μ„€μ •
  4. μ—λŸ¬ ν”Όλ“œλ°±: μ• λ‹ˆλ©”μ΄μ…˜(흔듀림), 색상 λ³€ν™”
  5. 5초 ν›„ μ—λŸ¬ μƒνƒœ μ΄ˆκΈ°ν™”

검사 ν•­λͺ©:

  • μ΅œλŒ€/μ΅œμ†Œκ°’
  • 곡백/λΉ„μ–΄μžˆλŠ” κ°’

5. πŸ” μ‚¬μš© μ˜ˆμ‹œ 및 λ§₯락

πŸ“‡ ν”„λ‘œν•„ 관리

  • λ‹‰λ„€μž„, 성별, λ‚˜μ΄, μ§€μ—­, 사진 λ“± μˆ˜μ • μ‹œ μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©

πŸ”— profile-edit-modal.tsx

πŸ—ΊοΈ μœ„μΉ˜ 검색

  • InputMap을 μ‚¬μš©ν•΄ μœ„μΉ˜ 검색 κΈ°λŠ₯ κ΅¬ν˜„

πŸ”— Input-box.tsx

πŸ”’ 숫자 μž…λ ₯

  • 가격, μ‹œκ°„, μˆ˜λŸ‰ λ“± μž…λ ₯ μ‹œ InputNum λ˜λŠ” InputInner μ‚¬μš©

πŸ”— common-input.tsx


πŸ› οΈ κ΅¬ν˜„ μ‹œ μœ μ˜μ‚¬ν•­

  • λŒ€λΆ€λΆ„μ˜ μž…λ ₯ μ»΄ν¬λ„ŒνŠΈλŠ” λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό 관리
  • μ—λŸ¬ μƒνƒœ λ˜ν•œ ν•¨κ»˜ κ΄€λ¦¬ν•˜λ©° νƒ€μ΄λ¨Έλ‘œ 리셋
  • μŠ€νƒ€μΌλ§μ€ styled-components 기반, ν…Œλ§ˆ 색상 일관성 μœ μ§€
  • μ• λ‹ˆλ©”μ΄μ…˜μ€ CSS μ „ν™˜ λ˜λŠ” Framer Motion μ‚¬μš©
  • 카메라 촬영 κΈ°λŠ₯은 react-html5-camera-photo 라이브러리 ν™œμš©

βœ… μš”μ•½

Input μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€:

  • μž¬μ‚¬μš© κ°€λŠ₯ν•œ ꡬ쑰와 μΌκ΄€λœ μŠ€νƒ€μΌ 제곡
  • 숫자, 검색, ν…μŠ€νŠΈ λ“± λ‹€μ–‘ν•œ μž…λ ₯ 방식 λŒ€μ‘
  • μ—λŸ¬μ— λŒ€ν•œ μ‹œκ°μ  ν”Όλ“œλ°± 제곡
  • ν”„λ‘œν•„ μˆ˜μ •, 검색, 수치 μž…λ ₯ λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯에 적용됨
⚠️ **GitHub.com Fallback** ⚠️