Skip to content

Conversation

@yulrang
Copy link
Contributor

@yulrang yulrang commented Nov 20, 2024

πŸ”– Issue Ticket

✍️ Description

μžμž˜ν•œ μˆ˜μ •μ‚¬ν•­ μˆ˜μ •ν•΄μ„œ μ˜¬λ¦¬κ² μŠ΅λ‹ˆλ‹€~!

  • μ ‘κ·Όμ„± κ°œμ„ 
  • νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„  : 5MB이상, JPG, PNG, JPEG μ΄μ™Έμ˜ 파일 올린 경우 블락
  • ν”Œλ ˆμ΄μŠ€ν™€λ” μ˜€νƒ€ μˆ˜μ •
  • 이미지 sizes μž…λ ₯

βœ… Checklist

PR

  • Branch Convention 확인

    feat/ 피쳐, fix/ 버그 μˆ˜μ •, refactor/ κ°œμ„ 

  • Base Branch 확인
  • μ μ ˆν•œ Label μ§€μ •
  • Assignee 및 Reviewer μ§€μ •

Test

  • 둜컬 μž‘λ™ 확인

Summary by CodeRabbit

릴리슀 λ…ΈνŠΈ

  • μƒˆλ‘œμš΄ κΈ°λŠ₯

    • 접근성을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 폼 μ»΄ν¬λ„ŒνŠΈμ˜ λ ˆμ΄λΈ” 및 속성을 μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.
    • 데이터 λ‘œλ”© μ‹œ μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•˜λŠ” CrewSkeletonList μ»΄ν¬λ„ŒνŠΈλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
    • 이미지 μ—…λ‘œλ“œ μ‹œ 였λ₯˜ 처리 및 μœ νš¨μ„± 검사λ₯Ό κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
  • 버그 μˆ˜μ •

    • 이미지 μ—…λ‘œλ“œ 및 ν…μŠ€νŠΈ ν•„λ“œμ˜ μœ νš¨μ„± 검사 κ·œμΉ™μ„ μ‘°μ •ν–ˆμŠ΅λ‹ˆλ‹€.
  • λ¬Έμ„œν™”

    • 메타데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ SEO 및 μ†Œμ…œ λ―Έλ””μ–΄ 톡합을 ν–₯μƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€.
  • μŠ€νƒ€μΌ

    • μ—¬λŸ¬ 이미지 μ»΄ν¬λ„ŒνŠΈμ˜ μŠ€νƒ€μΌμ„ κ°œμ„ ν•˜μ—¬ λ°˜μ‘μ„±μ„ λ†’μ˜€μŠ΅λ‹ˆλ‹€.

@coderabbitai
Copy link

coderabbitai bot commented Nov 20, 2024

Caution

Review failed

The head commit changed during the review from 0a5ab41 to 5e014cf.

Walkthrough

이 ν’€ λ¦¬ν€˜μŠ€νŠΈλŠ” μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ˜ μ ‘κ·Όμ„±κ³Ό μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°œμ„ ν•˜λŠ” λ³€κ²½ 사항을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ£Όμš” λ³€κ²½ μ‚¬ν•­μœΌλ‘œλŠ” CreateCrewForm, CreateGatheringForm, HomePage, CrewCard, DropDown, CreateCrewPage, DetailCrewPresenter, GatheringDetailModalPresenter, EditCrewPage, GatheringCardPresenter, ScheduledGatheringCardPresenter, FileInput, Profile, ReviewableGatheringCard와 같은 μ»΄ν¬λ„ŒνŠΈμ—μ„œ 이미지 속성과 λ ˆμ΄λΈ”μ˜ 접근성을 ν–₯μƒμ‹œν‚€λŠ” μ—…λ°μ΄νŠΈκ°€ ν¬ν•¨λ©λ‹ˆλ‹€. λ˜ν•œ, 메타데이터와 μƒ˜ν”Œ 이미지 URL의 μˆ˜μ •λ„ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Changes

파일 경둜 λ³€κ²½ μš”μ•½
src/app/(crew)/crew/create/_components/create-crew-form/index.tsx μ ‘κ·Όμ„± ν–₯상: λ ˆμ΄λΈ”μ˜ htmlFor 속성 및 id μ—…λ°μ΄νŠΈ, 슀크린 리더 지원을 μœ„ν•œ sr-only λ ˆμ΄λΈ” μΆ”κ°€.
src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx λ ˆμ΄λΈ”μ„ <span>으둜 λ³€κ²½, 접근성을 μœ„ν•œ id 속성 μΆ”κ°€.
src/app/(crew)/page.tsx λ‘œλ”© μƒνƒœ 처리 λ³€κ²½: Loader λŒ€μ‹  CrewSkeletonList μ‚¬μš©. μ ‘κ·Όμ„± ν–₯상.
src/components/common/crew-list/crew-card.tsx <Image> μ»΄ν¬λ„ŒνŠΈμ— sizes 및 className 속성 μΆ”κ°€.
src/components/common/input/drop-down/index.tsx DropDownProps μΈν„°νŽ˜μ΄μŠ€μ— id 속성 μΆ”κ°€.
src/app/(crew)/crew/create/page.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: sizes 및 className μ†μ„±μœΌλ‘œ λ³€κ²½.
src/app/(crew)/crew/detail/[id]/_components/detail-crew-presenter.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: fill 및 sizes μ†μ„±μœΌλ‘œ λ³€κ²½.
src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: sizes 속성 μΆ”κ°€.
src/app/(crew)/crew/detail/[id]/edit/page.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: sizes 및 className μ†μ„±μœΌλ‘œ λ³€κ²½.
src/components/common/gathering-card/presenter.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: fill 및 sizes μ†μ„±μœΌλ‘œ λ³€κ²½.
src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx <Image> 속성 μ—…λ°μ΄νŠΈ: fill 및 sizes μ†μ„±μœΌλ‘œ λ³€κ²½.
src/components/common/input/file-input-wrap/file-input/index.tsx <Image> μ»΄ν¬λ„ŒνŠΈμ— sizes 속성 μΆ”κ°€.
src/components/common/profile/index.tsx <Image> 속성 μ—…λ°μ΄νŠΈ 및 ProfileProps μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ size μ˜΅μ…˜ μΆ”κ°€.
public/assets/images/crew-sample/index.tsx ImgCrewSampleUrls λ°°μ—΄μ˜ URL μˆ˜μ •.
public/assets/images/gathering-sample/index.tsx ImgGatheringSampleUrls λ°°μ—΄μ˜ URL λ³€κ²½.
src/app/layout.tsx metadata 객체 μ—…λ°μ΄νŠΈ 및 Open Graph 메타 νƒœκ·Έ μΆ”κ°€.
src/components/my-page/reviewable-gatherings/reviewable-gathering-card.tsx <Image> 속성에 sizes 및 className μΆ”κ°€.

Possibly related PRs

  • Hofix/index pageΒ #91: CreateCrewForm μ»΄ν¬λ„ŒνŠΈμ˜ λ³€κ²½ 사항은 μ‚¬μš©μž μž…λ ₯ 처리λ₯Ό κ°œμ„ ν•˜λŠ” 것과 관련이 μžˆμŠ΅λ‹ˆλ‹€.
  • Feat/98/crew api μ—°κ²°Β #104: CreateCrewForm μ»΄ν¬λ„ŒνŠΈμ˜ μ—…λ°μ΄νŠΈλŠ” 이미지 μ—…λ‘œλ“œ 및 데이터 μ²˜λ¦¬μ™€ 관련이 μžˆμŠ΅λ‹ˆλ‹€.
  • Feat/128/edit crew api μ—°κ²°Β #129: CreateCrewForm의 μˆ˜μ •μ€ 크루 데이터 생성 및 νŽΈμ§‘κ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€.
  • Feat/153/detail page loadingΒ #155: CrewDetailSkeleton μ»΄ν¬λ„ŒνŠΈμ˜ λ„μž…μ€ 데이터 λ‘œλ”© μƒνƒœ κ°œμ„ κ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€.

Suggested labels

components

Suggested reviewers

  • HaeJungg
  • minkyung5x5
  • Rangbyeolang

πŸ‡ λ³€ν™”μ˜ λ°”λžŒμ΄ λΆˆμ–΄μ™€
크루와 ν•¨κ»˜ν•˜λŠ” 즐거운 λ‚ ,
μ ‘κ·Όμ„± 높이고, 이미지 λΉ›λ‚˜,
μƒˆλ‘œμš΄ λͺ¨μŠ΅μœΌλ‘œ 닀가와!
ν•¨κ»˜ν•˜λŠ” 이 μˆœκ°„, 기쁨 가득,
우리 크루의 꿈이 μžλΌλ‚˜! 🌟

Warning

There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.

πŸ”§ eslint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

src/app/(crew)/crew/create/_components/create-crew-form/index.tsx

Oops! Something went wrong! :(

ESLint: 8.57.1

ESLint couldn't determine the plugin "react-hooks" uniquely.

  • /node_modules/eslint-plugin-react-hooks/index.js (loaded in ".eslintrc.js")
  • /node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks/index.js (loaded in ".eslintrc.js Β» eslint-config-next/core-web-vitals Β» /node_modules/eslint-config-next/index.js Β» plugin:react-hooks/recommended")

Please remove the "plugins" setting from either config or remove either plugin installation.

If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❀️ 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.
    • Generate unit testing code for this file.
    • 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. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • 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 src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

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

Documentation and Community

  • 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

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: 10

🧹 Outside diff range and nitpick comments (21)
src/components/common/skeleton/my-review-skeleton-list/index.tsx (1)

9-14: μ„±λŠ₯ μ΅œμ ν™”μ™€ λ°˜μ‘ν˜• λ ˆμ΄μ•„μ›ƒ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

  1. Array 생성 방식을 μ΅œμ ν™”ν•˜κ³ 
  2. λ°˜μ‘ν˜• κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ„ μ μš©ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

- <div className="grid grid-cols-1 gap-6" aria-label="μ½˜ν…μΈ  λ‘œλ”© 쀑">
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" aria-label="μ½˜ν…μΈ  λ‘œλ”© 쀑">
  {[...Array(num)].map((_, index) => (

그리고 Array 생성을 λ‹€μŒκ³Ό 같이 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

- {[...Array(num)].map((_, index) => (
+ {Array.from({ length: num }, (_, index) => (
src/components/common/skeleton/reviewable-review-skeleton-list/index.tsx (2)

10-13: λ°°μ—΄ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것을 μž¬κ³ ν•΄ μ£Όμ„Έμš”.

React의 μž¬μ‘°μ •(reconciliation) κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈμ˜ νŠΉμ„±μƒ 큰 λ¬Έμ œκ°€ λ˜μ§€ μ•Šμ„ 수 μžˆμ§€λ§Œ, 더 μ•ˆμ •μ μΈ κ΅¬ν˜„μ„ μœ„ν•΄ κ³ μœ ν•œ μ‹λ³„μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”:

- <ReviewableReviewSkeleton key={index} />
+ <ReviewableReviewSkeleton key={`skeleton-${index}`} />

9-9: μ ‘κ·Όμ„± κ°œμ„ μ„ μœ„ν•œ μ œμ•ˆ

ν˜„μž¬ aria-label이 잘 κ΅¬ν˜„λ˜μ–΄ μžˆμ§€λ§Œ, λ‘œλ”© 쀑인 μ•„μ΄ν…œμ˜ 수λ₯Ό λͺ…μ‹œν•˜λ©΄ 더 λ‚˜μ€ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

- <div className="grid grid-cols-1 gap-12" aria-label="μ½˜ν…μΈ  λ‘œλ”© 쀑">
+ <div className="grid grid-cols-1 gap-12" aria-label={`${num}개의 리뷰 μ½˜ν…μΈ  λ‘œλ”© 쀑`}>
src/components/common/skeleton/gathering-skeleton-list/index.tsx (1)

3-5: μΈν„°νŽ˜μ΄μŠ€ ν”„λ‘œνΌν‹° 이름을 더 λͺ…ν™•ν•˜κ²Œ κ°œμ„ ν•˜μ„Έμš”

num ν”„λ‘œνΌν‹° 이름이 λ‹€μ†Œ λͺ¨ν˜Έν•©λ‹ˆλ‹€. μ˜λ„λ₯Ό 더 λͺ…ν™•ν•˜κ²Œ μ „λ‹¬ν•˜κΈ° μœ„ν•΄ skeletonCount λ˜λŠ” itemCount와 같은 이름을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

interface GatheringSkeletonListProps {
-  num: number;
+  skeletonCount: number;
}
src/components/common/skeleton/my-gathering-skeleton/index.tsx (2)

1-1: νƒ€μž… μ•ˆμ „μ„±μ„ μœ„ν•΄ νƒ€μž… μž„ν¬νŠΈ μ‚¬μš©μ„ κ³ λ €ν•΄λ³΄μ„Έμš”

더 λ‚˜μ€ νƒ€μž… μ•ˆμ „μ„±μ„ μœ„ν•΄ λ‹€μŒκ³Ό 같이 λ³€κ²½ν•˜λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€:

-import { Skeleton } from '@mantine/core';
+import type { SkeletonProps } from '@mantine/core';
+import { Skeleton } from '@mantine/core';

5-15: μŠ€νƒ€μΌ ꡬ성 κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€

ν˜„μž¬ μŠ€νƒ€μΌλ§μ— λŒ€ν•΄ λͺ‡ κ°€μ§€ κ°œμ„ μ‚¬ν•­μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  1. μž¬μ‚¬μš© κ°€λŠ₯ν•œ ν΄λž˜μŠ€λ“€μ„ μƒμˆ˜λ‘œ 뢄리
  2. λ°˜μ‘ν˜• λ””μžμΈ 브레이크포인트 일관성 확보
  3. μ ˆλŒ€ μœ„μΉ˜ μ§€μ • λŒ€μ‹  Flexboxλ‚˜ Grid μ‚¬μš© κ³ λ €
+const CONTAINER_CLASSES = 'flex gap-6 p-6';
+const IMAGE_CLASSES = 'h-28 w-28 rounded-xl md:h-32 md:w-32';
+const CONTENT_CLASSES = 'flex flex-col gap-3';
+
 export default function MyGatheringSkeleton() {
   return (
-    <div className="flex gap-6 p-6">
-      <Skeleton className="h-28 w-28 rounded-xl md:h-32 md:w-32" />
-      <div className="relative flex flex-col gap-3">
+    <div className={CONTAINER_CLASSES}>
+      <Skeleton className={IMAGE_CLASSES} />
+      <div className={CONTENT_CLASSES}>
src/components/common/skeleton/crew-skeleton-list/index.tsx (2)

9-9: νƒ€μž… μ•ˆμ •μ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

column 값에 λŒ€ν•œ νƒ€μž… μ œν•œμ΄ μ—†μ–΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ 값이 λ“€μ–΄μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•΄λ³΄μ„Έμš”:

-interface CrewSkeletonListProps {
-  num: number;
-  column?: number;
-}
+interface CrewSkeletonListProps {
+  num: number;
+  column?: 1 | 2;
+}

11-11: μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

ν˜„μž¬ aria-label이 λ‘œλ”© μƒνƒœλ§Œ μ•Œλ €μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€. 전체 μ•„μ΄ν…œ μˆ˜λ„ ν•¨κ»˜ μ œκ³΅ν•˜λ©΄ 더 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•΄λ³΄μ„Έμš”:

-<div className={`grid grid-cols-1 gap-x-4 gap-y-6 ${columnStyle}`} aria-label="μ½˜ν…μΈ  λ‘œλ”© 쀑">
+<div 
+  className={`grid grid-cols-1 gap-x-4 gap-y-6 ${columnStyle}`} 
+  aria-label={`μ½˜ν…μΈ  λ‘œλ”© 쀑: ${num}개의 ν•­λͺ©`}
+  role="status"
+>
src/app/(crew)/my-crew/hosted/page.tsx (1)

Line range hint 3-3: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” Loader importλ₯Ό μ œκ±°ν•΄μ£Όμ„Έμš”.

CrewSkeletonList둜 λŒ€μ²΄λ˜μ–΄ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” Loader importλ₯Ό μ œκ±°ν•˜λ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

-import { Loader } from '@mantine/core';
src/app/(crew)/my-crew/joined/page.tsx (1)

19-19: μŠ€μΌˆλ ˆν†€ UI κ΅¬ν˜„μ΄ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

기쑴의 λ‹¨μˆœν•œ λ‘œλ”λ₯Ό 더 μ„Έλ ¨λœ μŠ€μΌˆλ ˆν†€ UI둜 κ΅μ²΄ν•œ 것이 쒋은 κ°œμ„ μž…λ‹ˆλ‹€. 특히:

  • num={6}이 쿼리의 νŽ˜μ΄μ§€ 크기와 μΌμΉ˜ν•˜μ—¬ 일관성이 μžˆμŠ΅λ‹ˆλ‹€
  • column={1}둜 λ ˆμ΄μ•„μ›ƒμ΄ 적절히 μœ μ§€λ©λ‹ˆλ‹€

λ‹€λ§Œ, μ‚¬μš©μž κ²½ν—˜μ„ λ”μš± ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λ‹€μŒ 사항을 κ³ λ €ν•΄λ³΄μ‹œλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

μŠ€μΌˆλ ˆν†€ UI에 μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μΆ”κ°€ν•˜μ—¬ 더 μžμ—°μŠ€λŸ¬μš΄ λ‘œλ”© μƒνƒœλ₯Ό ν‘œν˜„ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”. μ˜ˆμ‹œ:

-<CrewSkeletonList num={6} column={1} />
+<CrewSkeletonList num={6} column={1} animate={true} />
src/components/common/skeleton/my-gathering-skeleton-list/index.tsx (1)

14-19: ν•˜λ“œμ½”λ”©λœ λ„ˆλΉ„κ°’ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

ν˜„μž¬ ν•˜λ“œμ½”λ”©λœ width 값듀을 ν…Œλ§ˆ μ‹œμŠ€ν…œμ΄λ‚˜ μ„€μ •μœΌλ‘œ κ΄€λ¦¬ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

CSS λ³€μˆ˜λ‚˜ ν…Œλ§ˆ μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 것을 κ³ λ €ν•΄ λ³΄μ„Έμš”:

-          <div className="w-1/6">
+          <div className="w-[var(--gathering-sidebar-width)]">
src/app/(crew)/my-gathering/hosted/page.tsx (2)

16-18: useQuery ν›…μ˜ κ΅¬ν˜„μ΄ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

isLoading μƒνƒœλ₯Ό μΆ”κ°€ν•˜μ—¬ 데이터 λ‘œλ”© μƒνƒœλ₯Ό 좔적할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μž κ²½ν—˜ ν–₯상에 도움이 λ©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ—λŸ¬ 처리λ₯Ό μΆ”κ°€ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”:

-  const { data, isLoading, refetch } = useQuery(
+  const { data, isLoading, error, refetch } = useQuery(
     useGetHostedGatheringListQuery(formatDateToRequest(selectedDate)),
   );

Line range hint 1-37: μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

λ‘œλ”© μƒνƒœμ— λŒ€ν•œ 슀크린 리더 지원이 λˆ„λ½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 aria-live μ˜μ—­μ„ μΆ”κ°€ν•˜λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€:

   return (
-    <div>
+    <div role="region" aria-live="polite">
       <div className="py-4 md:py-6">
         <PopOverCalendar value={selectedDate} onChange={(d) => setSelectedDate(d)} />
       </div>
src/app/(crew)/my-gathering/joined/page.tsx (2)

16-18: useQuery ν›… μˆ˜μ • 승인 및 μ œμ•ˆ

isLoading μƒνƒœ μΆ”κ°€λŠ” μ μ ˆν•˜λ‚˜, μ—λŸ¬ μ²˜λ¦¬κ°€ λˆ„λ½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ—λŸ¬ 처리λ₯Ό μΆ”κ°€ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”:

- const { data, isLoading, refetch } = useQuery(
+ const { data, isLoading, error, refetch } = useQuery(
  useGetJoinedGatheringListQuery(formatDateToRequest(selectedDate)),
);

Line range hint 13-35: μ„±λŠ₯ μ΅œμ ν™” μ œμ•ˆ

μ»΄ν¬λ„ŒνŠΈμ˜ λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ‹€μŒ μ΅œμ ν™”λ₯Ό κ³ λ €ν•΄λ³΄μ„Έμš”:

  1. React.memoλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ λ©”λͺ¨μ΄μ œμ΄μ…˜
  2. useCallback을 μ‚¬μš©ν•˜μ—¬ onChange ν•Έλ“€λŸ¬ λ©”λͺ¨μ΄μ œμ΄μ…˜
  3. useMemoλ₯Ό μ‚¬μš©ν•˜μ—¬ joinedGatheringList λ©”λͺ¨μ΄μ œμ΄μ…˜
src/components/gathering-list/liked-list-container.tsx (1)

41-46: λ‘œλ”© μƒνƒœ UIκ°€ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€λ§Œ, μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

μŠ€μΌˆλ ˆν†€ UIλ₯Ό 톡해 λ‘œλ”© μƒνƒœμ˜ μ‹œκ°μ  ν”Όλ“œλ°±μ΄ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•œ μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 aria-label을 μΆ”κ°€ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  if (isLoading)
    return (
-     <div className="mx-auto max-w-[1200px] px-4">
+     <div className="mx-auto max-w-[1200px] px-4" aria-label="λͺ¨μž„ λͺ©λ‘μ„ λΆˆλŸ¬μ˜€λŠ” μ€‘μž…λ‹ˆλ‹€">
        <GatheringSkeletonList num={6} />
      </div>
    );
src/components/common/crew-list/crew-card-list.tsx (1)

Line range hint 44-49: 이미지 URL 처리 방식 κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

ν˜„μž¬ κ΅¬ν˜„μ—μ„œ λͺ‡ κ°€μ§€ κ°œμ„ μ΄ ν•„μš”ν•œ 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€:

  1. 'string'을 νŠΉμˆ˜κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것은 νƒ€μž… μ•ˆμ •μ„±μ„ ν•΄μΉ©λ‹ˆλ‹€
  2. κΈ΄ ν”Œλ ˆμ΄μŠ€ν™€λ” 이미지 URL을 μƒμˆ˜λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•΄λ³΄μ„Έμš”:

+const PLACEHOLDER_IMAGE_URL = 'https://media.istockphoto.com/id/1396814518/vector/image-coming-soon-no-photo-no-thumbnail-image-available-vector-illustration.jpg?s=612x612&w=0&k=20&c=hnh2OZgQGhf0b46-J2z7aHbIWwq8HNlSDaNp2wn_iko=';

export default function CrewCardList({ data, inWhere }: CrewCardListProps) {
  // ...
            imageUrl={
-              inform?.imageUrl === 'string'
-                ? 'https://media.istockphoto.com/id/1396814518/vector/image-coming-soon-no-photo-no-thumbnail-image-available-vector-illustration.jpg?s=612x612&w=0&k=20&c=hnh2OZgQGhf0b46-J2z7aHbIWwq8HNlSDaNp2wn_iko='
-                : inform?.imageUrl
+              !inform?.imageUrl || inform.imageUrl === 'string'
+                ? PLACEHOLDER_IMAGE_URL
+                : inform.imageUrl
            }
src/app/(crew)/my-page/_components/profile-card/container.tsx (1)

42-42: λ‘œλ”© μƒνƒœ UI κ°œμ„ μ΄ 잘 이루어짐

ν…μŠ€νŠΈ 기반 λ‘œλ”© ν‘œμ‹œλ₯Ό μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈλ‘œ λŒ€μ²΄ν•œ 것이 μ‚¬μš©μž κ²½ν—˜ μΈ‘λ©΄μ—μ„œ 더 λ‚˜μ€ μ ‘κ·Όμž…λ‹ˆλ‹€. κΈ°μ‘΄ λ‘œμ§μ„ μœ μ§€ν•˜λ©΄μ„œ μ‹œκ°μ  ν”Όλ“œλ°±λ§Œ κ°œμ„ ν•œ 점이 μ’‹μŠ΅λ‹ˆλ‹€.

선택적 κ°œμ„ μ‚¬ν•­: μŠ€μΌˆλ ˆν†€ λ‘œλ”© μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ λ‹€μŒκ³Ό 같은 νƒ€μž„μ•„μ›ƒ 처리λ₯Ό κ³ λ €ν•΄λ³΄μ„Έμš”:

  if (userLoading || !isAuthChecked) {
+   const [showTimeout, setShowTimeout] = useState(false);
+   useEffect(() => {
+     const timer = setTimeout(() => setShowTimeout(true), 5000);
+     return () => clearTimeout(timer);
+   }, []);
+   
+   if (showTimeout) {
+     return <div>λ‘œλ”©μ΄ μ§€μ—°λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μž μ‹œλ§Œ κΈ°λ‹€λ €μ£Όμ„Έμš”.</div>;
+   }
    return <ProfileSkeleton />;
  }
src/components/common/input/drop-down/index.tsx (1)

20-22: λ§€κ°œλ³€μˆ˜ μˆœμ„œ κ°œμ„  μ œμ•ˆ

ν•„μˆ˜ propsλ₯Ό 선택적 props보닀 λ¨Όμ € λ°°μΉ˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. id와 inWhereλ₯Ό λ‹€λ₯Έ 선택적 props와 ν•¨κ»˜ λ§ˆμ§€λ§‰μ— λ°°μΉ˜ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”.

 export default function DropDown({
-  id,
-  inWhere = 'default',
   name,
   variant,
   data,
   value,
   onChange,
   placeholder,
+  id,
+  inWhere = 'default',
   className,
   error,
   ...rest
 }: DropDownProps)
src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (1)

폼 λ ˆμ΄λΈ” νŒ¨ν„΄μ˜ 일관성 κ°œμ„  ν•„μš”

ν˜„μž¬ νΌμ—μ„œ λ‹€μŒκ³Ό 같은 일관성 λ¬Έμ œκ°€ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • 약속 이름, μž₯μ†Œ, λͺ¨μ§‘ 정원, λͺ¨μ§‘ μ„€λͺ…/κ³΅μ§€λŠ” <label> νƒœκ·Έλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©
  • 이미지 선택/첨뢀와 λ‚ μ§œλŠ” <span> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λ ˆμ΄λΈ”λ§ν•˜κ³  있음

μ ‘κ·Όμ„± ν–₯상을 μœ„ν•΄ λ‹€μŒ μš”μ†Œλ“€μ˜ <span> νƒœκ·Έλ₯Ό <label> νƒœκ·Έλ‘œ λ³€κ²½ν•˜κ³  μ μ ˆν•œ htmlFor 속성을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€:

  • 이미지 선택/첨뢀 ν•„λ“œ
  • λ‚ μ§œ ν•„λ“œ

μ΄λŠ” 슀크린 리더 μ‚¬μš©μžμ˜ 폼 탐색 κ²½ν—˜μ„ κ°œμ„ ν•˜κ³  μ›Ή μ ‘κ·Όμ„± ν‘œμ€€μ„ μ€€μˆ˜ν•˜λŠ”λ° 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

πŸ”— Analysis chain

Line range hint 1-248: μ „λ°˜μ μΈ μ ‘κ·Όμ„± νŒ¨ν„΄ κ²€ν†  ν•„μš”

폼 μ „μ²΄μ μœΌλ‘œ λ ˆμ΄λΈ” μ²˜λ¦¬κ°€ 일관성이 μ—†μŠ΅λ‹ˆλ‹€. μΌλΆ€λŠ” <label>을 μ‚¬μš©ν•˜κ³  μΌλΆ€λŠ” <span>을 μ‚¬μš©ν•˜κ³  μžˆμ–΄ ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. λͺ¨λ“  μž…λ ₯ ν•„λ“œμ— λŒ€ν•΄ μΌκ΄€λœ μ ‘κ·Όμ„± νŒ¨ν„΄μ„ μ μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‹€μŒ 슀크립트둜 ν”„λ‘œμ νŠΈ μ „μ²΄μ˜ 폼 λ ˆμ΄λΈ” νŒ¨ν„΄μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: ν”„λ‘œμ νŠΈ μ „μ²΄μ˜ 폼 λ ˆμ΄λΈ” νŒ¨ν„΄ 검사

# label νƒœκ·Έ μ‚¬μš© νŒ¨ν„΄ 검색
echo "Label νƒœκ·Έ μ‚¬μš© νŒ¨ν„΄:"
rg '<label' -A 2

# span νƒœκ·Έλ₯Ό λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄ 검색
echo "\nSpan νƒœκ·Έλ₯Ό λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄:"
rg '<span[^>]*>(?:[^<]*(?:<(?!\/span>)[^<]*)*)?(?:이름|λ‚ μ§œ|μ‹œκ°„|μ„€λͺ…|제λͺ©|μž₯μ†Œ)' -A 2

Length of output: 5765


Script:

#!/bin/bash
# Description: ν”„λ‘œμ νŠΈ μ „μ²΄μ˜ 폼 λ ˆμ΄λΈ” νŒ¨ν„΄ 검사 (μˆ˜μ •λœ 버전)

# span νƒœκ·Έλ₯Ό λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄ 검색 (μˆ˜μ •λœ μ •κ·œμ‹)
echo "Span νƒœκ·Έλ₯Ό λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄:"
rg '<span[^>]*class="[^"]*text-base[^"]*font-semibold[^"]*">' -A 2

# νŠΉμ • νŒŒμΌμ—μ„œ span νƒœκ·Έ 검색
echo "\nλͺ¨μž„ 생성 폼의 span νƒœκ·Έ μ‚¬μš©:"
rg '<span' src/app/\(crew\)/crew/detail/\[id\]/_components/create-gathering/create-gathering-form/index.tsx -A 2

Length of output: 949

src/app/(crew)/crew/create/_components/create-crew-form/index.tsx (1)

327-330: μ†Œκ°œκΈ€ μž…λ ₯ ν•„λ“œμ˜ 문자 수 ν‘œμ‹œ 및 접근성이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • λ ˆμ΄λΈ”κ³Ό μž…λ ₯ ν•„λ“œμ˜ 연결이 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 문자 수 ν‘œμ‹œκ°€ λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄ μ‚¬μš©μž κ²½ν—˜μ΄ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ μž‘μ€ μ œμ•ˆμ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€:

문자 수 ν‘œμ‹œμ— 슀크린 리더λ₯Ό μœ„ν•œ μ„€λͺ…을 μΆ”κ°€ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€:

            <span>
-              <span className="text-blue-500">{introduce.length}</span>/100
+              <span className="text-blue-500" aria-label={`ν˜„μž¬ ${introduce.length}자 μž…λ ₯됨, μ΅œλŒ€ 100자`}>
+                {introduce.length}
+              </span>/100
            </span>

Also applies to: 334-334, 343-343

πŸ“œ Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between a16dc81 and fef8165.

πŸ“’ Files selected for processing (25)
  • src/app/(crew)/crew/create/_components/create-crew-form/index.tsx (9 hunks)
  • src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (3 hunks)
  • src/app/(crew)/my-crew/hosted/page.tsx (2 hunks)
  • src/app/(crew)/my-crew/joined/page.tsx (2 hunks)
  • src/app/(crew)/my-gathering/hosted/page.tsx (2 hunks)
  • src/app/(crew)/my-gathering/joined/page.tsx (2 hunks)
  • src/app/(crew)/my-page/_components/profile-card/container.tsx (2 hunks)
  • src/app/(crew)/page.tsx (5 hunks)
  • src/components/common/crew-list/crew-card-list.tsx (1 hunks)
  • src/components/common/crew-list/crew-card.tsx (1 hunks)
  • src/components/common/input/date-time-picker/index.tsx (2 hunks)
  • src/components/common/input/drop-down/index.tsx (3 hunks)
  • src/components/common/skeleton/crew-skeleton-list/index.tsx (1 hunks)
  • src/components/common/skeleton/crew-skeleton/index.tsx (1 hunks)
  • src/components/common/skeleton/gathering-skeleton-list/index.tsx (1 hunks)
  • src/components/common/skeleton/gathering-skeleton/index.tsx (1 hunks)
  • src/components/common/skeleton/my-gathering-skeleton-list/index.tsx (1 hunks)
  • src/components/common/skeleton/my-gathering-skeleton/index.tsx (1 hunks)
  • src/components/common/skeleton/my-review-skeleton-list/index.tsx (1 hunks)
  • src/components/common/skeleton/my-review-skeleton/index.tsx (1 hunks)
  • src/components/common/skeleton/profile-skeleton/index.tsx (1 hunks)
  • src/components/common/skeleton/reviewable-review-skeleton-list/index.tsx (1 hunks)
  • src/components/common/skeleton/reviewable-review-skeleton/index.tsx (1 hunks)
  • src/components/gathering-list/liked-list-container.tsx (2 hunks)
  • tailwind.config.ts (1 hunks)
βœ… Files skipped from review due to trivial changes (6)
  • src/components/common/crew-list/crew-card.tsx
  • src/components/common/skeleton/crew-skeleton/index.tsx
  • src/components/common/skeleton/gathering-skeleton/index.tsx
  • src/components/common/skeleton/my-review-skeleton/index.tsx
  • src/components/common/skeleton/profile-skeleton/index.tsx
  • src/components/common/skeleton/reviewable-review-skeleton/index.tsx
πŸ”‡ Additional comments (28)
src/components/common/skeleton/my-review-skeleton-list/index.tsx (2)

1-5: μΈν„°νŽ˜μ΄μŠ€ μ •μ˜κ°€ λͺ…ν™•ν•˜κ³  κΉ”λ”ν•©λ‹ˆλ‹€!

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»¨λ²€μ…˜μ„ 잘 λ”°λ₯΄κ³  있으며, props μΈν„°νŽ˜μ΄μŠ€κ°€ μ μ ˆν•˜κ²Œ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


10-13: πŸ› οΈ Refactor suggestion

λ°°μ—΄ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것을 κ°œμ„ ν•΄μ£Όμ„Έμš”.

λ°°μ—΄ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λ©΄ React의 μž¬μ‘°μ •(reconciliation) κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 더 μ•ˆμ •μ μΈ key 생성 방식을 λ„μž…ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

- <MyReviewSkeleton key={index} />
+ <MyReviewSkeleton key={`skeleton-${index}-${Date.now()}`} />

Likely invalid or redundant comment.

src/components/common/skeleton/reviewable-review-skeleton-list/index.tsx (1)

1-5: μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ΄ κΉ”λ”ν•©λ‹ˆλ‹€!

νƒ€μž…μŠ€ν¬λ¦½νŠΈ 넀이밍 μ»¨λ²€μ…˜μ„ 잘 λ”°λ₯΄κ³  있으며, Props μΈν„°νŽ˜μ΄μŠ€κ°€ λͺ…ν™•ν•˜κ²Œ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

src/components/common/skeleton/gathering-skeleton-list/index.tsx (1)

9-12: μ ‘κ·Όμ„±κ³Ό λ°˜μ‘ν˜• λ””μžμΈμ΄ 잘 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€

  • aria-label을 ν†΅ν•œ λ‘œλ”© μƒνƒœ 전달
  • grid-cols-* 클래슀λ₯Ό ν™œμš©ν•œ 효과적인 λ°˜μ‘ν˜• λ ˆμ΄μ•„μ›ƒ κ΅¬ν˜„
src/components/common/skeleton/crew-skeleton-list/index.tsx (1)

1-6: μΈν„°νŽ˜μ΄μŠ€ μ •μ˜κ°€ 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€!

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μΈν„°νŽ˜μ΄μŠ€κ°€ λͺ…ν™•ν•˜κ²Œ μ •μ˜λ˜μ–΄ 있으며, props의 ν•„μˆ˜/선택 μ—¬λΆ€κ°€ μ μ ˆν•˜κ²Œ μ§€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

src/app/(crew)/my-crew/hosted/page.tsx (1)

19-19: μŠ€μΌˆλ ˆν†€ λ‘œλ”© UI κ΅¬ν˜„μ΄ 잘 λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

νŽ˜μ΄μ§€ 크기와 μΌμΉ˜ν•˜λŠ” μ μ ˆν•œ 수의 μŠ€μΌˆλ ˆν†€ μ•„μ΄ν…œμ„ ν‘œμ‹œν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ΄ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/app/(crew)/my-crew/joined/page.tsx (1)

7-7: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μž„ν¬νŠΈκ°€ 적절히 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ λ‘œλ”© μƒνƒœ UIλ₯Ό μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ μž„ν¬νŠΈκ°€ μ˜¬λ°”λ₯΄κ²Œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/components/common/skeleton/my-gathering-skeleton-list/index.tsx (2)

1-6: κΉ”λ”ν•œ νƒ€μž… μ •μ˜μ™€ import κ΅¬λ¬Έμž…λ‹ˆλ‹€!

μΈν„°νŽ˜μ΄μŠ€ μ •μ˜κ°€ λͺ…ν™•ν•˜κ³  ν•„μš”ν•œ μ˜μ‘΄μ„±λ§Œ κ°€μ Έμ˜€κ³  μžˆμŠ΅λ‹ˆλ‹€.


11-13: πŸ› οΈ Refactor suggestion

λ°°μ—΄ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것을 μž¬κ³ ν•΄ μ£Όμ„Έμš”.

ESLint κ·œμΉ™μ„ λΉ„ν™œμ„±ν™”ν•˜λŠ” λŒ€μ‹ , 더 μ•ˆμ •μ μΈ key 생성 방법을 κ³ λ €ν•΄ λ³΄μ„Έμš”.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

-        // eslint-disable-next-line react/no-array-index-key
-        <div key={index} className="md:flex">
+        <div key={`skeleton-${index}-${Date.now()}`} className="md:flex">

Likely invalid or redundant comment.

src/app/(crew)/my-gathering/hosted/page.tsx (1)

9-9: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μž„ν¬νŠΈκ°€ 적절히 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‘œλ”© μƒνƒœλ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œμ‹œν•˜κΈ° μœ„ν•œ μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈμ˜ μž„ν¬νŠΈκ°€ 잘 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/app/(crew)/my-gathering/joined/page.tsx (2)

9-9: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ 승인

λ‘œλ”© μƒνƒœλ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜κΈ° μœ„ν•œ μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ importκ°€ μ μ ˆν•˜κ²Œ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


33-34: μŠ€μΌˆλ ˆν†€ UI κ΅¬ν˜„ 검증 ν•„μš”

μŠ€μΌˆλ ˆν†€ 리슀트의 개수(6개)κ°€ μ‹€μ œ 데이터 ν‘œμ‹œ νŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜λŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

βœ… Verification successful

μŠ€μΌˆλ ˆν†€ UI의 μ•„μ΄ν…œ κ°œμˆ˜κ°€ μ μ ˆν•©λ‹ˆλ‹€

νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ„€μ •κ³Ό API 호좜 κ²°κ³Όλ₯Ό ν™•μΈν•œ κ²°κ³Ό, μ‹€μ œ 데이터도 νŽ˜μ΄μ§€λ‹Ή 6κ°œμ”© λ‘œλ“œλ˜λ„λ‘ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μŠ€μΌˆλ ˆν†€ UI의 6개 μ•„μ΄ν…œμ€ μ‹€μ œ 데이터 ν‘œμ‹œ νŒ¨ν„΄κ³Ό μ •ν™•νžˆ μΌμΉ˜ν•©λ‹ˆλ‹€.

  • src/_apis/liked/liked-apis.tsμ—μ„œ νŽ˜μ΄μ§€ 크기가 6으둜 μ„€μ •
  • src/mock/gathering-data.tsμ—μ„œλ„ limit: 6 확인
  • 호슀트된 λͺ¨μž„κ³Ό μ°Έμ—¬ν•œ λͺ¨μž„ λͺ¨λ‘ λ™μΌν•œ νŒ¨ν„΄ μ‚¬μš©
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# μ‹€μ œ 데이터 ν‘œμ‹œ νŒ¨ν„΄ 확인
rg -A 5 "GatheringListWithDate" --type tsx

Length of output: 70


Script:

#!/bin/bash
# Search for GatheringListWithDate component usage
rg "GatheringListWithDate" -A 5

# Search for any pagination or list size limits
rg "limit|size|per_page" --type ts

Length of output: 12137


Script:

#!/bin/bash
# Check MyGatheringSkeletonList implementation and any pagination settings
rg -A 10 "MyGatheringSkeletonList" --type-add 'tsx:*.{tsx,ts}'

# Check actual list size in the mock or API data
rg "joinedGatheringList" -B 5 -A 5 --type-add 'tsx:*.{tsx,ts}'

Length of output: 6104

src/components/gathering-list/liked-list-container.tsx (2)

8-8: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μž„ν¬νŠΈκ°€ 적절히 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‘œλ”© μƒνƒœ UI κ°œμ„ μ„ μœ„ν•œ GatheringSkeletonList μ»΄ν¬λ„ŒνŠΈ μž„ν¬νŠΈκ°€ 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.


41-46: μŠ€μΌˆλ ˆν†€ μ•„μ΄ν…œ 개수 검증이 ν•„μš”ν•©λ‹ˆλ‹€.

κ³ μ •λœ μŠ€μΌˆλ ˆν†€ μ•„μ΄ν…œ 개수(6)κ°€ μ‹€μ œ λ°μ΄ν„°μ˜ νŽ˜μ΄μ§€ 크기와 μΌμΉ˜ν•˜λŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

βœ… Verification successful

Based on the search results, I can see that the pageSize is consistently set to 6 in the codebase, particularly in the gathering list components. Let me verify if this is the actual page size used in the API calls and container component.


Let me try a different approach to find the API calls and hooks:


Let me check the API query implementation:


μŠ€μΌˆλ ˆν†€ μ•„μ΄ν…œ κ°œμˆ˜κ°€ API νŽ˜μ΄μ§€ 크기와 μΌμΉ˜ν•©λ‹ˆλ‹€.

API 호좜 μ‹œ size=6으둜 κ³ μ •λ˜μ–΄ 있고, μŠ€μΌˆλ ˆν†€ UI도 λ™μΌν•˜κ²Œ 6개의 μ•„μ΄ν…œμ„ ν‘œμ‹œν•˜κ³  μžˆμ–΄ μ μ ˆν•©λ‹ˆλ‹€. stories νŒŒμΌμ—μ„œλ„ pageSize: 6으둜 μΌκ΄€λ˜κ²Œ μ‚¬μš©λ˜κ³  μžˆλŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: νŽ˜μ΄μ§€λ‹Ή μ•„μ΄ν…œ 수 확인

# API μ‘λ‹΅μ΄λ‚˜ μ„€μ • νŒŒμΌμ—μ„œ νŽ˜μ΄μ§€ 크기 확인
rg -A 5 'pageSize|itemsPerPage|per_page' 

Length of output: 3902


Script:

#!/bin/bash
# Check API calls and container implementation
rg -A 5 "useGetGatherings|useGetLikedGatherings" 

Length of output: 50


Script:

#!/bin/bash
# Search for gathering API related files and hooks
rg -g "**/{api,hooks}/**" -l "gathering"

# Also check the container component implementation
cat src/components/gathering-list/liked-list-container.tsx

Length of output: 1953


Script:

#!/bin/bash
# Check the liked queries implementation
cat src/\_queries/liked/liked-queries.ts

# Also check the API implementation
cat src/\_apis/liked/liked-apis.ts

Length of output: 1318

src/components/common/crew-list/crew-card-list.tsx (1)

36-36: κ·Έλ¦¬λ“œ 간격 쑰정이 μ μ ˆν•΄ λ³΄μž…λ‹ˆλ‹€!

μΉ΄λ“œ μ‚¬μ΄μ˜ 간격을 늘렀 μ‹œκ°μ  계측 ꡬ쑰가 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/app/(crew)/my-page/_components/profile-card/container.tsx (1)

13-13: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ μ μ ˆν•¨

λ‘œλ”© μƒνƒœμ˜ μ‹œκ°μ  ν‘œν˜„μ„ μœ„ν•œ ProfileSkeleton μ»΄ν¬λ„ŒνŠΈ importκ°€ 잘 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/components/common/input/drop-down/index.tsx (2)

6-6: μ ‘κ·Όμ„± ν–₯상을 μœ„ν•œ id 속성 μΆ”κ°€ 승인

선택적 id 속성을 μΆ”κ°€ν•¨μœΌλ‘œμ¨ μ»΄ν¬λ„ŒνŠΈμ˜ 접근성이 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ARIA λ ˆμ΄λΈ”λ§κ³Ό 폼 연결에 도움이 λ©λ‹ˆλ‹€.


78-78: μ ‘κ·Όμ„± κ΅¬ν˜„ 확인 ν•„μš”

id 속성이 μ˜¬λ°”λ₯΄κ²Œ μ „λ‹¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—°κ΄€λœ label μš”μ†Œλ“€μ΄ 이 idλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

βœ… Verification successful

μ ‘κ·Όμ„± κ΅¬ν˜„μ΄ 적절히 λ˜μ–΄μžˆμŒμ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€

DropDown μ»΄ν¬λ„ŒνŠΈμ˜ id 속성이 λͺ¨λ“  μ‚¬μš©μ²˜μ—μ„œ μ μ ˆν•˜κ²Œ htmlFor와 μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 특히:

  • 크루 생성 νΌμ—μ„œ crew-mainCategory, crew-subCategory λ“±μ˜ idκ°€ ν•΄λ‹Ή labelκ³Ό μ˜¬λ°”λ₯΄κ²Œ μ—°κ²°
  • 메인 νŽ˜μ΄μ§€μ˜ region, sort λ“œλ‘­λ‹€μš΄λ„ μŠ€ν¬λ¦°λ¦¬λ”λ₯Ό μœ„ν•œ labelκ³Ό μ •ν™•νžˆ μ—°κ²°
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ μ‚¬μš©μ²˜μ—μ„œ labelκ³Ό idκ°€ μ˜¬λ°”λ₯΄κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ”μ§€ 확인

# htmlFor μ†μ„±μ—μ„œ 이 μ»΄ν¬λ„ŒνŠΈμ˜ id μ‚¬μš© μ—¬λΆ€ 확인
rg -l "htmlFor.*id.*DropDown" 

Length of output: 31


Script:

#!/bin/bash
# 1. DropDown μ»΄ν¬λ„ŒνŠΈμ˜ μ‚¬μš©μ²˜ 검색
rg -A 5 "<DropDown" 

# 2. labelκ³Ό htmlFor 속성 μ‚¬μš© 검색 (더 넓은 λ²”μœ„)
rg -A 3 'htmlFor.*=.*["'\''].*["'\'']'

# 3. aria-labelledby 속성 검색
rg -A 3 'aria-labelledby.*=.*["'\''].*["'\'']'

# 4. id prop이 μ „λ‹¬λ˜λŠ” νŒ¨ν„΄ 검색
ast-grep --pattern 'id={$_}'

Length of output: 11818

src/components/common/input/date-time-picker/index.tsx (1)

64-64: μ„ νƒλœ λ‚ μ§œμ˜ μŠ€νƒ€μΌλ§μ΄ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‘₯κ·Ό λͺ¨μ„œλ¦¬ μŠ€νƒ€μΌμ„ μΆ”κ°€ν•˜μ—¬ μ„ νƒλœ λ‚ μ§œμ˜ μ‹œκ°μ  ν”Όλ“œλ°±μ΄ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, 접근성을 μœ„ν•΄ 색상 λŒ€λΉ„λ₯Ό ν™•μΈν•˜λŠ” 것이 μ’‹κ² μŠ΅λ‹ˆλ‹€.

src/app/(crew)/page.tsx (3)

5-5: μŠ€μΌˆλ ˆν†€ UI λ„μž…μ„ ν†΅ν•œ μ‚¬μš©μž κ²½ν—˜ κ°œμ„ μ„ μŠΉμΈν•©λ‹ˆλ‹€!

λ‘œλ”© μƒνƒœλ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•œ μŠ€μΌˆλ ˆν†€ UI νŒ¨ν„΄μ˜ λ„μž…μ€ μ‚¬μš©μž κ²½ν—˜μ„ 크게 ν–₯μƒμ‹œν‚¬ κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

Also applies to: 14-14


106-108: μ ‘κ·Όμ„± κ°œμ„ μ„ μœ„ν•œ λ ˆμ΄λΈ” μΆ”κ°€λ₯Ό μŠΉμΈν•©λ‹ˆλ‹€!

슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•œ λ ˆμ΄λΈ” 좔가와 id 속성 섀정은 μ›Ή μ ‘κ·Όμ„± ν‘œμ€€μ„ μ€€μˆ˜ν•˜λŠ” 쒋은 κ°œμ„ μ‚¬ν•­μž…λ‹ˆλ‹€.

Also applies to: 110-110, 121-123, 125-125


145-145: μŠ€μΌˆλ ˆν†€ 리슀트 ꡬ성이 μ‹€μ œ 컨텐츠와 μΌμΉ˜ν•˜λŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

μŠ€μΌˆλ ˆν†€ UI의 μ—΄ μˆ˜μ™€ μ•„μ΄ν…œ μˆ˜κ°€ μ‹€μ œ CrewCardList μ»΄ν¬λ„ŒνŠΈμ˜ λ ˆμ΄μ•„μ›ƒκ³Ό μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•΄μ£Όμ„Έμš”.

βœ… Verification successful

μŠ€μΌˆλ ˆν†€ UI ꡬ성이 μ‹€μ œ 컨텐츠 λ ˆμ΄μ•„μ›ƒκ³Ό μΌμΉ˜ν•©λ‹ˆλ‹€

CrewCardList μ»΄ν¬λ„ŒνŠΈκ°€ lg:grid-cols-2 μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜μ—¬ 2μ—΄ κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬ν˜„ν•˜κ³  있으며, μ‹€μ œ 데이터 λ‘œλ”© μ‹œ ν‘œμ‹œλ˜λŠ” CrewSkeletonList의 column={2} μ„€μ •κ³Ό μΌμΉ˜ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ‘œλ”© μƒνƒœμ˜ μ‹œκ°μ  ν‘œν˜„μ΄ μ‹€μ œ 컨텐츠와 μžμ—°μŠ€λŸ½κ²Œ μ „ν™˜λ  κ²ƒμž…λ‹ˆλ‹€.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify if CrewCardList uses the same layout configuration

# Check CrewCardList implementation
rg -A 10 "CrewCardList.*=.*{" src/components/common/crew-list/crew-card-list.tsx

Length of output: 182


Script:

#!/bin/bash
# Search for CrewCardList component implementation
rg -A 10 "CrewCardList" src/components/common/crew-list/crew-card-list.tsx

# Search for actual usage of CrewCardList in the crew page
rg -A 10 "CrewCardList" src/app/\(crew\)/page.tsx

# Find any grid or column related styles
rg "grid|column" src/components/common/crew-list/crew-card-list.tsx

Length of output: 1846

tailwind.config.ts (1)

124-124: μƒˆλ‘œμš΄ μΉ΄λ“œ 그림자 μŠ€νƒ€μΌμ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μƒˆλ‘œμš΄ card 그림자 섀정이 μ μ ˆν•˜κ²Œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ€μ€ν•œ νŒŒλž€μƒ‰ 색쑰와 μ λ‹Ήν•œ 깊이둜 μΉ΄λ“œ μ»΄ν¬λ„ŒνŠΈμ˜ μ‹œκ°μ  계측을 잘 ν‘œν˜„ν•  κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

λ‹€μŒ νŒŒμΌλ“€μ—μ„œ μƒˆλ‘œμš΄ 그림자 μŠ€νƒ€μΌμ˜ μ‚¬μš©μ„ ν™•μΈν•΄λ³΄μ„Έμš”:

βœ… Verification successful

μƒˆλ‘œμš΄ 그림자 μŠ€νƒ€μΌμ΄ 크루 μΉ΄λ“œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 적절히 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€

shadow-card μŠ€νƒ€μΌμ΄ crew-card.tsx μ»΄ν¬λ„ŒνŠΈμ˜ ν˜Έλ²„ 효과둜 κ΅¬ν˜„λ˜μ–΄ 있으며, μΉ΄λ“œμ˜ μ‹œκ°μ  μƒν˜Έμž‘μš©μ„ μžμ—°μŠ€λŸ½κ²Œ κ°•ν™”ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. νŠΈλžœμ§€μ…˜ 효과(transition-shadow)와 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ λΆ€λ“œλŸ¬μš΄ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# μ„€λͺ…: card 그림자 μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ 검색

# card 그림자λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  파일 검색
rg "shadow-card" --type tsx

Length of output: 55


Script:

#!/bin/bash
# 파일 ν™•μž₯자λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³  전체 검색
rg "shadow-card"

# TypeScript/JavaScript νŒŒμΌμ—μ„œ shadow κ΄€λ ¨ 클래슀 검색
rg "shadow.*card|card.*shadow" -g "*.{ts,tsx,js,jsx}"

# Tailwind 클래슀 μ‚¬μš© νŒ¨ν„΄ 검색
rg "class.*shadow.*card|class.*card.*shadow" -g "*.{ts,tsx,js,jsx}"

Length of output: 865

src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (1)

222-225: Textarea에 id 속성 μΆ”κ°€λŠ” 쒋은 κ°œμ„ μž…λ‹ˆλ‹€

Textarea μ»΄ν¬λ„ŒνŠΈμ— idλ₯Ό μΆ”κ°€ν•œ 것은 λ ˆμ΄λΈ”κ³Όμ˜ 연결성을 λ†’μ—¬ 접근성을 κ°œμ„ ν•˜λŠ” 쒋은 λ³€κ²½μž…λ‹ˆλ‹€.

src/app/(crew)/crew/create/_components/create-crew-form/index.tsx (4)

157-157: 메인 μΉ΄ν…Œκ³ λ¦¬ μ ‘κ·Όμ„± κ°œμ„ μ΄ 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

htmlFor와 id 속성이 μΌμΉ˜ν•˜λ„λ‘ μˆ˜μ •λ˜μ–΄ 슀크린 리더 μ‚¬μš©μžμ˜ 접근성이 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Also applies to: 170-170


184-186: μ„ΈλΆ€ μΉ΄ν…Œκ³ λ¦¬ λ ˆμ΄λΈ” μΆ”κ°€λ‘œ 접근성이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

sr-only 클래슀λ₯Ό μ‚¬μš©ν•œ λ ˆμ΄λΈ” μΆ”κ°€λŠ” μ‹œκ°μ  λ””μžμΈμ„ ν•΄μΉ˜μ§€ μ•ŠμœΌλ©΄μ„œ 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•œ 접근성을 μ œκ³΅ν•˜λŠ” 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

Also applies to: 193-193


245-245: 메인 μœ„μΉ˜ 선택 μ ‘κ·Όμ„± κ°œμ„ μ΄ 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

htmlFor와 id 속성이 μΌμΉ˜ν•˜λ„λ‘ μˆ˜μ •λ˜μ–΄ 슀크린 리더 μ‚¬μš©μžμ˜ 접근성이 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Also applies to: 258-258


272-274: μ„ΈλΆ€ μœ„μΉ˜ λ ˆμ΄λΈ” μΆ”κ°€λ‘œ 접근성이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

sr-only 클래슀λ₯Ό μ‚¬μš©ν•œ λ ˆμ΄λΈ” μΆ”κ°€λŠ” μ‹œκ°μ  λ””μžμΈμ„ ν•΄μΉ˜μ§€ μ•ŠμœΌλ©΄μ„œ 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•œ 접근성을 μ œκ³΅ν•˜λŠ” 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

Also applies to: 282-282

Comment on lines 13 to 16
{[...Array(num)].map((_, index) => (
// eslint-disable-next-line react/no-array-index-key
<GatheringSkeleton key={index} />
))}
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•œ κ°œμ„ μ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€

  1. Array μŠ€ν”„λ ˆλ“œ μ—°μ‚°μž λŒ€μ‹  Array.from을 μ‚¬μš©ν•˜λ©΄ 더 νš¨μœ¨μ μž…λ‹ˆλ‹€.
  2. indexλ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- {[...Array(num)].map((_, index) => (
-   // eslint-disable-next-line react/no-array-index-key
-   <GatheringSkeleton key={index} />
- ))}
+ {Array.from({ length: num }, (_, index) => (
+   <GatheringSkeleton key={`skeleton-${index}`} />
+ ))}
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{[...Array(num)].map((_, index) => (
// eslint-disable-next-line react/no-array-index-key
<GatheringSkeleton key={index} />
))}
{Array.from({ length: num }, (_, index) => (
<GatheringSkeleton key={`skeleton-${index}`} />
))}

@@ -0,0 +1,17 @@
import { Skeleton } from '@mantine/core';

export default function MyGatheringSkeleton() {
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

μ»΄ν¬λ„ŒνŠΈ λ¬Έμ„œν™” 및 νƒ€μž… μ •μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€

μ»΄ν¬λ„ŒνŠΈμ˜ λͺ©μ κ³Ό μ‚¬μš©λ²•μ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ JSDoc λ¬Έμ„œν™”μ™€ νƒ€μž… μ •μ˜λ₯Ό μΆ”κ°€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€:

+interface MyGatheringSkeletonProps {
+  className?: string;
+}
+
+/**
+ * λͺ¨μž„ 정보가 λ‘œλ”©μ€‘μΌ λ•Œ ν‘œμ‹œλ˜λŠ” μŠ€μΌˆλ ˆν†€ UI μ»΄ν¬λ„ŒνŠΈ
+ */
-export default function MyGatheringSkeleton() {
+export default function MyGatheringSkeleton({ className }: MyGatheringSkeletonProps) {
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export default function MyGatheringSkeleton() {
interface MyGatheringSkeletonProps {
className?: string;
}
/**
* λͺ¨μž„ 정보가 λ‘œλ”©μ€‘μΌ λ•Œ ν‘œμ‹œλ˜λŠ” μŠ€μΌˆλ ˆν†€ UI μ»΄ν¬λ„ŒνŠΈ
*/
export default function MyGatheringSkeleton({ className }: MyGatheringSkeletonProps) {

Comment on lines 4 to 16
return (
<div className="flex gap-6 p-6">
<Skeleton className="h-28 w-28 rounded-xl md:h-32 md:w-32" />
<div className="relative flex flex-col gap-3">
<Skeleton className="h-4 w-40" />
<div className="flex gap-2">
<Skeleton className="h-4 w-32" />
<Skeleton className="h-4 w-24" />
</div>
<Skeleton className="absolute bottom-0 h-4 w-24" />
</div>
</div>
);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€

슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•œ μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€:

 export default function MyGatheringSkeleton() {
   return (
-    <div className="flex gap-6 p-6">
+    <div 
+      className="flex gap-6 p-6"
+      role="status"
+      aria-label="λͺ¨μž„ 정보 λ‘œλ”© 쀑"
+    >
       <Skeleton className="h-28 w-28 rounded-xl md:h-32 md:w-32" />

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 12 to 15
{[...Array(num)].map((_, index) => (
// eslint-disable-next-line react/no-array-index-key
<CrewSkeleton key={index} />
))}
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

λ°°μ—΄ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

React의 μž¬μ‘°μ •(reconciliation) κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 더 μ•ˆμ •μ μΈ key 생성 방법을 κ³ λ €ν•΄λ³΄μ„Έμš”.

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•΄λ³΄μ„Έμš”:

-{[...Array(num)].map((_, index) => (
-  // eslint-disable-next-line react/no-array-index-key
-  <CrewSkeleton key={index} />
-))}
+{[...Array(num)].map((_, index) => (
+  <CrewSkeleton key={`crew-skeleton-${index}-${Date.now()}`} />
+))}

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 13 to 26
<div key={index} className="md:flex">
<div className="w-1/6">
<div className="flex flex-col gap-2">
<Skeleton className="h-4 w-36" />
<Skeleton className="h-4 w-20" />
</div>
</div>
<div className="relative -mb-3.5 w-0.5 bg-gray-200">
<div className="md:corner-dot" />
</div>
<div className="flex-1 pb-6 md:pl-8">
<MyGatheringSkeleton />
</div>
</div>
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

μŠ€μΌˆλ ˆν†€ UI에 μ μ ˆν•œ ARIA 속성을 μΆ”κ°€ν•˜μ—¬ 슀크린 리더 μ‚¬μš©μžμ˜ κ²½ν—˜μ„ κ°œμ„ ν•΄ μ£Όμ„Έμš”.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

-        <div className="md:flex">
+        <div 
+          className="md:flex"
+          role="status"
+          aria-label="λͺ¨μž„ 정보 λ‘œλ”© 쀑"
+        >
           <div className="w-1/6">
             <div className="flex flex-col gap-2">
-              <Skeleton className="h-4 w-36" />
-              <Skeleton className="h-4 w-20" />
+              <Skeleton className="h-4 w-36" aria-hidden="true" />
+              <Skeleton className="h-4 w-20" aria-hidden="true" />
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div key={index} className="md:flex">
<div className="w-1/6">
<div className="flex flex-col gap-2">
<Skeleton className="h-4 w-36" />
<Skeleton className="h-4 w-20" />
</div>
</div>
<div className="relative -mb-3.5 w-0.5 bg-gray-200">
<div className="md:corner-dot" />
</div>
<div className="flex-1 pb-6 md:pl-8">
<MyGatheringSkeleton />
</div>
</div>
<div
key={index}
className="md:flex"
role="status"
aria-label="λͺ¨μž„ 정보 λ‘œλ”© 쀑"
>
<div className="w-1/6">
<div className="flex flex-col gap-2">
<Skeleton className="h-4 w-36" aria-hidden="true" />
<Skeleton className="h-4 w-20" aria-hidden="true" />
</div>
</div>
<div className="relative -mb-3.5 w-0.5 bg-gray-200">
<div className="md:corner-dot" />
</div>
<div className="flex-1 pb-6 md:pl-8">
<MyGatheringSkeleton />
</div>
</div>

Comment on lines 33 to 34
{isLoading && <MyGatheringSkeletonList num={6} />}
{hostedGatheringList && <GatheringListWithDate gatheringList={hostedGatheringList} />}
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

λ‘œλ”© μƒνƒœ UIκ°€ 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μŠ€μΌˆλ ˆν†€ λ‘œλ”© μƒνƒœμ™€ 데이터 ν‘œμ‹œκ°€ 쑰건뢀 λ Œλ”λ§μœΌλ‘œ 잘 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ—λŸ¬ μƒνƒœ μ²˜λ¦¬κ°€ λˆ„λ½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ—λŸ¬ μƒνƒœ 처리λ₯Ό μΆ”κ°€ν•˜λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€:

   {isLoading && <MyGatheringSkeletonList num={6} />}
+  {error && <div className="text-red-500">데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.</div>}
   {hostedGatheringList && <GatheringListWithDate gatheringList={hostedGatheringList} />}

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 21 to 32
const newDate = new Date(selected);
const isSelected = selected;

newDate.setFullYear(Number(date.getFullYear()));
newDate.setMonth(Number(date.getMonth()));
newDate.setDate(Number(date.getDate()));

const kstDate = new Date(newDate.getTime() - newDate.getTimezoneOffset() * 60000).toISOString();

if (isSelected) {
setSelected(date);
setSelected(newDate);
onChange(kstDate);
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

λ‚ μ§œ 선택 둜직 κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

ν˜„μž¬ κ΅¬ν˜„μ—μ„œ λͺ‡ κ°€μ§€ 잠재적인 문제점이 μžˆμŠ΅λ‹ˆλ‹€:

  1. isSelected λ³€μˆ˜κ°€ 항상 trueλ₯Ό λ°˜ν™˜ν•˜μ—¬ 쑰건문이 λΆˆν•„μš”ν•©λ‹ˆλ‹€
  2. μ‹œκ°„λŒ€ λ³€ν™˜ μ‹œ 쀑볡 μ½”λ“œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

- const newDate = new Date(selected);
- const isSelected = selected;
+ const newDate = new Date(selected);

  newDate.setFullYear(Number(date.getFullYear()));
  newDate.setMonth(Number(date.getMonth()));
  newDate.setDate(Number(date.getDate()));

  const kstDate = new Date(newDate.getTime() - newDate.getTimezoneOffset() * 60000).toISOString();

- if (isSelected) {
-   setSelected(newDate);
-   onChange(kstDate);
- }
+ setSelected(newDate);
+ onChange(kstDate);

λ˜ν•œ μ‹œκ°„λŒ€ λ³€ν™˜ λ‘œμ§μ„ λ³„λ„μ˜ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‘œ λΆ„λ¦¬ν•˜μ—¬ μž¬μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”.

πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const newDate = new Date(selected);
const isSelected = selected;
newDate.setFullYear(Number(date.getFullYear()));
newDate.setMonth(Number(date.getMonth()));
newDate.setDate(Number(date.getDate()));
const kstDate = new Date(newDate.getTime() - newDate.getTimezoneOffset() * 60000).toISOString();
if (isSelected) {
setSelected(date);
setSelected(newDate);
onChange(kstDate);
const newDate = new Date(selected);
newDate.setFullYear(Number(date.getFullYear()));
newDate.setMonth(Number(date.getMonth()));
newDate.setDate(Number(date.getDate()));
const kstDate = new Date(newDate.getTime() - newDate.getTimezoneOffset() * 60000).toISOString();
setSelected(newDate);
onChange(kstDate);

<label htmlFor="gathering-dateTime" className="text-base font-semibold text-gray-800">
λ‚ μ§œ
</label>
<span className="text-base font-semibold text-gray-800">λ‚ μ§œ</span>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

λ‚ μ§œ 선택 λ ˆμ΄λΈ”μ˜ 의미둠적 λ§ˆν¬μ—… κ°œμ„  ν•„μš”

λ‚ μ§œ 선택 λ ˆμ΄λΈ”λ„ <span> νƒœκ·Έλ‘œ λ³€κ²½λ˜μ–΄ 접근성이 μ €ν•˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•΄ <label> νƒœκ·Έλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

-<span className="text-base font-semibold text-gray-800">λ‚ μ§œ</span>
+<label htmlFor="gathering-datetime" className="text-base font-semibold text-gray-800">λ‚ μ§œ</label>

Committable suggestion skipped: line range outside the PR's diff.

<label htmlFor="gathering-image" className="text-base font-semibold text-gray-800">
이미지 선택/첨뢀
</label>
<span className="text-base font-semibold text-gray-800">이미지 선택/첨뢀</span>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

μ ‘κ·Όμ„± κ°œμ„ μ„ μœ„ν•΄ 의미둠적 νƒœκ·Έ μ‚¬μš© ν•„μš”

이미지 선택 λ ˆμ΄λΈ”μ΄ <span> νƒœκ·Έλ‘œ λ³€κ²½λ˜μ–΄ 접근성이 μ €ν•˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•΄ <label> νƒœκ·Έλ‘œ λ˜λŒλ¦¬λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆν•©λ‹ˆλ‹€:

-<span className="text-base font-semibold text-gray-800">이미지 선택/첨뢀</span>
+<label htmlFor="gathering-image" className="text-base font-semibold text-gray-800">이미지 선택/첨뢀</label>

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines +207 to +209
<span className="text-base font-semibold text-gray-800 md:text-xl">
λŒ€ν‘œμ΄λ―Έμ§€λ₯Ό μ„ νƒν•˜κ±°λ‚˜ μ²¨λΆ€ν•΄μ£Όμ„Έμš”.
</label>
</span>
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

이미지 선택 UI의 μ‹œλ§¨ν‹± λ§ˆν¬μ—… κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

label μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό span으둜 λ³€κ²½ν•˜λ©΄ 접근성이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

-          <span className="text-base font-semibold text-gray-800 md:text-xl">
+          <label htmlFor="crew-image" className="text-base font-semibold text-gray-800 md:text-xl">
            λŒ€ν‘œμ΄λ―Έμ§€λ₯Ό μ„ νƒν•˜κ±°λ‚˜ μ²¨λΆ€ν•΄μ£Όμ„Έμš”.
-          </span>
+          </label>

Committable suggestion skipped: line range outside the PR's diff.

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: 0

🧹 Outside diff range and nitpick comments (8)
src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx (1)

60-66: 이미지 μ»΄ν¬λ„ŒνŠΈ 속성이 μ μ ˆν•˜κ²Œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Next.js의 Image μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©μ΄ λͺ¨λ²” 사둀λ₯Ό 잘 λ”°λ₯΄κ³  μžˆμŠ΅λ‹ˆλ‹€. λ°˜μ‘ν˜• 이미지 처리λ₯Ό μœ„ν•œ sizes 속성과 fill 속성이 μ μ ˆν•˜κ²Œ μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ ‘κ·Όμ„± ν–₯상을 μœ„ν•΄ λ‹€μŒκ³Ό 같은 μˆ˜μ •μ„ μ œμ•ˆν•©λ‹ˆλ‹€:

 <Image
   src={imageUrl}
   alt={title}
   fill
   sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
-  className="h-full w-full object-cover"
+  className="h-full w-full object-cover transition-opacity duration-300"
+  loading="lazy"
+  quality={85}
 />
  • transition-opacity와 duration-300을 μΆ”κ°€ν•˜μ—¬ 이미지 λ‘œλ”© μ‹œ λΆ€λ“œλŸ¬μš΄ μ „ν™˜ 효과λ₯Ό 제곡
  • loading="lazy"λ₯Ό μΆ”κ°€ν•˜μ—¬ μ„±λŠ₯ μ΅œμ ν™”
  • quality={85}λ₯Ό μΆ”κ°€ν•˜μ—¬ 이미지 ν’ˆμ§ˆκ³Ό μ„±λŠ₯의 μ μ ˆν•œ κ· ν˜•μ„ μœ μ§€
src/components/common/gathering-card/presenter.tsx (2)

Line range hint 71-76: μ ‘κ·Όμ„± κ°œμ„ μ„ μœ„ν•œ μ œμ•ˆμ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€.

타이머 μ•„μ΄μ½˜ κ΄€λ ¨ κ°œμ„ μ‚¬ν•­:

  1. μ•„μ΄μ½˜μ˜ alt ν…μŠ€νŠΈλ₯Ό 더 λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€ (예: "마감 μž„λ°• 타이머 μ•„μ΄μ½˜")
  2. λ°˜λ³΅λ˜λŠ” μ•„μ΄μ½˜ 크기 값을 μƒμˆ˜λ‘œ λΆ„λ¦¬ν•˜λ©΄ μœ μ§€λ³΄μˆ˜κ°€ 더 μš©μ΄ν•  것 κ°™μŠ΅λ‹ˆλ‹€

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•΄λ³΄μ‹œλŠ” 건 μ–΄λ–¨κΉŒμš”?

+ const ICON_SIZE = 16;
// ... 
- <Image src={IcoTimer} alt="timer icon" width={16} height={16} />
+ <Image src={IcoTimer} alt="마감 μž„λ°• 타이머 μ•„μ΄μ½˜" width={ICON_SIZE} height={ICON_SIZE} />

Line range hint 13-28: Props νƒ€μž… μ •μ˜λ₯Ό κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ isWithin24Hours와 deadlineMessageκ°€ λ…λ¦½μ μœΌλ‘œ optional둜 μ •μ˜λ˜μ–΄ μžˆμ–΄, νƒ€μž… μ•ˆμ •μ„±μ΄ μ™„λ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ 각 prop의 μš©λ„μ— λŒ€ν•œ λ¬Έμ„œν™”κ°€ 있으면 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같은 κ°œμ„ μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

export interface GatheringCardPresenterProps {
  /** λͺ¨μž„ 고유 μ‹λ³„μž */
  id: number;
  /** λͺ¨μž„ λŒ€ν‘œ 이미지 URL */
  imageUrl: string;
  /** λͺ¨μž„ 제λͺ© */
  title: string;
  // ... 기타 ν•„μˆ˜ props

  /** 24μ‹œκ°„ 이내 마감 μ—¬λΆ€ */
  isWithin24Hours?: boolean;
  /** 마감 μ‹œκ°„ λ©”μ‹œμ§€ (isWithin24Hoursκ°€ true일 λ•Œ ν•„μˆ˜) */
  deadlineMessage?: string;
  /** μΆ”κ°€ μŠ€νƒ€μΌ 클래슀 */
  className?: string;
}
src/components/common/input/file-input-wrap/file-input/index.tsx (1)

122-128: 이미지 미리보기 μ»΄ν¬λ„ŒνŠΈμ˜ 속성이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ 사항듀이 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • λ°˜μ‘ν˜• 이미지λ₯Ό μœ„ν•œ sizes 속성
  • 접근성을 μœ„ν•œ μ μ ˆν•œ alt ν…μŠ€νŠΈ
  • Tailwind CSSλ₯Ό ν™œμš©ν•œ μΌκ΄€λœ μŠ€νƒ€μΌλ§

ν•˜λ‚˜μ˜ μ œμ•ˆμ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€:

이미지 λ‘œλ”© 쀑 μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•˜κΈ° μœ„ν•΄ blurλ‚˜ loading 속성 μΆ”κ°€λ₯Ό κ³ λ €ν•΄λ³΄μ„Έμš”:

 <Image
   src={preview}
   fill
   sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
   alt="이미지 미리보기"
   className="h-full w-full object-cover"
+  loading="lazy"
+  placeholder="blur"
+  blurDataURL="data:image/jpeg;base64,/9j/4AAQSkZJRg..."
 />
src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx (1)

95-97: μ•„μ΄μ½˜ 이미지에도 λ™μΌν•œ μ΅œμ ν™”κ°€ μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μž‘μ€ μ•„μ΄μ½˜ 이미지에도 λ™μΌν•œ λ°˜μ‘ν˜• μ²˜λ¦¬κ°€ μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ•„μ΄μ½˜μ˜ 경우 κ³ μ •λœ 크기(20x20)둜 μ‚¬μš©λ˜λ―€λ‘œ, sizes 속성이 λΆˆν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”:

<Image
  src={IcoUser}
  fill
- sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
  alt="μ•„μ΄μ½˜"
  className="h-full w-full object-cover"
/>
src/app/(crew)/crew/detail/[id]/_components/detail-crew-presenter.tsx (3)

62-68: 이미지 μ»΄ν¬λ„ŒνŠΈ ꡬ성이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€! πŸ‘

Next.js Image μ»΄ν¬λ„ŒνŠΈμ˜ μ΅œμ‹  ꢌμž₯ 사항에 맞게 μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • fill μ†μ„±μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ±„μš°λ„λ‘ μ„€μ •
  • sizes μ†μ„±μœΌλ‘œ λ°˜μ‘ν˜• λ™μž‘ μ΅œμ ν™”
  • μŠ€νƒ€μΌλ§μ΄ className으둜 κΉ”λ”ν•˜κ²Œ 톡합

μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ priority 속성 μΆ”κ°€λ₯Ό κ³ λ €ν•΄λ³΄μ„Έμš”. 이 μ΄λ―Έμ§€λŠ” νŽ˜μ΄μ§€ 상단에 μžˆλŠ” μ£Όμš” μ»¨ν…μΈ μ΄λ―€λ‘œ μš°μ„ μˆœμœ„λ₯Ό 높이면 LCP(Largest Contentful Paint) μ„±λŠ₯이 ν–₯상될 수 μžˆμŠ΅λ‹ˆλ‹€.

 <Image
   src={imageUrl}
   alt={title}
   fill
   sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
   className="h-full w-full rounded-lg object-cover"
+  priority
 />

Line range hint 89-93: μ ‘κ·Όμ„± κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€

ν˜„μž¬ λ²„νŠΌλ“€μ˜ 접근성이 λΆ€μ‘±ν•©λ‹ˆλ‹€:

  • 곡유 λ²„νŠΌκ³Ό 더보기 λ²„νŠΌμ— 슀크린 리더λ₯Ό μœ„ν•œ μ μ ˆν•œ λ ˆμ΄λΈ”μ΄ μ—†μŠ΅λ‹ˆλ‹€
  • 메뉴 μ•„μ΄ν…œλ“€μ˜ 역할이 λͺ…ν™•ν•˜κ²Œ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€

λ‹€μŒκ³Ό 같이 접근성을 κ°œμ„ ν•΄μ£Όμ„Έμš”:

-<button type="button" className="bg-transparent" onClick={onShareClick}>
+<button
+  type="button"
+  className="bg-transparent"
+  onClick={onShareClick}
+  aria-label="크루 정보 κ³΅μœ ν•˜κΈ°"
+>
   <Image src={ShareIco} alt="κ³΅μœ ν•˜κΈ°" className="h-6 w-6" />
 </button>

 <Menu.Target>
-  <div className="cursor-pointer">
+  <button
+    type="button"
+    className="cursor-pointer"
+    aria-label="크루 관리 메뉴 μ—΄κΈ°"
+  >
     <Image src={KebabIcon} alt="더보기" width={20} height={20} />
-  </div>
+  </button>
 </Menu.Target>

Also applies to: 94-98


62-68: 이미지 λ‘œλ”© μ—λŸ¬ μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€

ν˜„μž¬ 이미지 λ‘œλ”© μ‹€νŒ¨ μ‹œμ˜ λŒ€μ²΄ λ™μž‘μ΄ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ—λŸ¬ 처리λ₯Ό μΆ”κ°€ν•΄μ£Όμ„Έμš”:

 <Image
   src={imageUrl}
   alt={title}
   fill
   sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
   className="h-full w-full rounded-lg object-cover"
+  onError={(e) => {
+    e.currentTarget.src = '/assets/images/default-crew-image.jpg'
+  }}
 />
πŸ“œ Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between fef8165 and fea5c28.

πŸ“’ Files selected for processing (10)
  • src/app/(crew)/crew/create/page.tsx (1 hunks)
  • src/app/(crew)/crew/detail/[id]/_components/detail-crew-presenter.tsx (1 hunks)
  • src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx (2 hunks)
  • src/app/(crew)/crew/detail/[id]/edit/page.tsx (1 hunks)
  • src/components/common/crew-list/crew-card.tsx (1 hunks)
  • src/components/common/gathering-card/presenter.tsx (1 hunks)
  • src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx (1 hunks)
  • src/components/common/input/file-input-wrap/file-input/index.tsx (2 hunks)
  • src/components/common/profile/index.tsx (1 hunks)
  • src/components/common/writable-gathering-card/writable-gathering-card.tsx (2 hunks)
βœ… Files skipped from review due to trivial changes (2)
  • src/app/(crew)/crew/create/page.tsx
  • src/app/(crew)/crew/detail/[id]/edit/page.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/components/common/crew-list/crew-card.tsx
🧰 Additional context used
πŸͺ› Biome
src/components/common/profile/index.tsx

[error] 71-71: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

πŸ”‡ Additional comments (7)
src/components/common/profile/index.tsx (2)

70-72: Image μ»΄ν¬λ„ŒνŠΈμ˜ μ΅œμ‹  μ†μ„±μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Next.js Image μ»΄ν¬λ„ŒνŠΈμ˜ μ΅œμ‹  ꢌμž₯ 사항에 맞게 속성이 μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€. fillκ³Ό sizes 속성을 μ‚¬μš©ν•˜μ—¬ λ°˜μ‘ν˜• 이미지 μ²˜λ¦¬κ°€ κ°œμ„ λ˜μ—ˆκ³ , className을 ν†΅ν•œ μŠ€νƒ€μΌλ§λ„ 더 λͺ…ν™•ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.

🧰 Tools
πŸͺ› Biome

[error] 71-71: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)


Line range hint 1-95: μ „λ°˜μ μΈ κ΅¬ν˜„μ΄ 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

  • μ»΄ν¬λ„ŒνŠΈ λ¬Έμ„œν™”κ°€ 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
  • νƒ€μž… μ •μ˜κ°€ λͺ…ν™•ν•©λ‹ˆλ‹€.
  • 쑰건뢀 λ Œλ”λ§κ³Ό μŠ€νƒ€μΌλ§μ΄ κΉ”λ”ν•˜κ²Œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • 접근성을 κ³ λ €ν•œ alt ν…μŠ€νŠΈκ°€ 적절히 μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
🧰 Tools
πŸͺ› Biome

[error] 71-71: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

src/components/common/writable-gathering-card/writable-gathering-card.tsx (2)

51-57: 이미지 μ΅œμ ν™”κ°€ 잘 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

λ°˜μ‘ν˜• 이미지 μ²˜λ¦¬μ™€ μ„±λŠ₯ μ΅œμ ν™”κ°€ μ μ ˆν•˜κ²Œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. sizes 속성을 ν†΅ν•œ 뷰포트 기반의 이미지 크기 μ‘°μ •κ³Ό object-coverλ₯Ό ν†΅ν•œ λΉ„μœ¨ μœ μ§€λŠ” 쒋은 μ ‘κ·Όμž…λ‹ˆλ‹€.


68-74: μ•„μ΄μ½˜ 이미지 μ²˜λ¦¬κ°€ μ μ ˆν•©λ‹ˆλ‹€.

μ•„μ΄μ½˜μ— object-contain을 μ‚¬μš©ν•œ 것이 μ μ ˆν•©λ‹ˆλ‹€. 접근성을 μœ„ν•œ λŒ€μ²΄ ν…μŠ€νŠΈλ„ 잘 μ œκ³΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

src/components/common/gathering-card/presenter.tsx (1)

63-65: Next.js Image μ»΄ν¬λ„ŒνŠΈ 속성이 μ΅œμ‹  λ°©μ‹μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이미지 μ΅œμ ν™”μ™€ λ°˜μ‘ν˜• μ²˜λ¦¬κ°€ μ μ ˆν•˜κ²Œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. sizes 속성을 톡해 뷰포트 크기에 λ”°λ₯Έ 이미지 크기 쑰정이 잘 μ„€μ •λ˜μ–΄ 있으며, fillκ³Ό ν•¨κ»˜ object-cover μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜μ—¬ 이미지 λΉ„μœ¨μ΄ μ˜¬λ°”λ₯΄κ²Œ μœ μ§€λ©λ‹ˆλ‹€.

src/components/common/input/file-input-wrap/file-input/index.tsx (1)

101-104: 이미지 μ΅œμ ν™” 속성이 적절히 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜• 이미지 처리λ₯Ό μœ„ν•œ sizes 속성과 Tailwind CSS 클래슀 기반 μŠ€νƒ€μΌλ§μœΌλ‘œμ˜ μ „ν™˜μ΄ 잘 μ΄λ£¨μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx (1)

49-50: 이미지 λ°˜μ‘ν˜• μ²˜λ¦¬κ°€ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

sizes 속성과 Tailwind의 object-cover 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λ―Έμ§€μ˜ λ°˜μ‘ν˜• μ²˜λ¦¬κ°€ λ”μš± 효과적으둜 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@github-actions
Copy link

@github-actions
Copy link

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: 2

🧹 Outside diff range and nitpick comments (3)
public/assets/images/gathering-sample/index.tsx (1)

Line range hint 1-5: 둜컬 이미지 μž„ν¬νŠΈμ™€ S3 URL μ‚¬μš©μ˜ 뢈일치

ν˜„μž¬ 둜컬 이미지λ₯Ό μž„ν¬νŠΈν•˜κ³  μžˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” μ‚¬μš©λ˜μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μž„ν¬νŠΈλŠ” μ œκ±°ν•˜κ±°λ‚˜, μ˜λ„ν•œ λŒ€λ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λΆˆν•„μš”ν•œ μž„ν¬νŠΈλ₯Ό μ œκ±°ν•˜λŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€:

-import ImgGatheringSample01 from './gathering-sample-1.jpg';
-import ImgGatheringSample02 from './gathering-sample-2.jpg';
-import ImgGatheringSample03 from './gathering-sample-3.jpg';
-
-const ImgGatheringSamples = [ImgGatheringSample01, ImgGatheringSample02, ImgGatheringSample03];
const ImgGatheringSampleUrls = [
src/components/common/profile/index.tsx (1)

73-74: λ°˜μ‘ν˜• 이미지 μ‚¬μ΄μ¦ˆ μ΅œμ ν™” μ œμ•ˆ

ν˜„μž¬ sizes 속성이 일반적인 κ°’μœΌλ‘œ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Profile μ»΄ν¬λ„ŒνŠΈμ˜ μ‹€μ œ 크기에 맞게 더 ꡬ체적인 값을 μ§€μ •ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

-            sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
+            sizes={
+              size === 'small' ? '24px' :
+              size === 'header' ? '40px' :
+              size === 'large' ? '56px' :
+              size === 'full' ? '100vw' :
+              '80px'  // captain size
+            }
🧰 Tools
πŸͺ› Biome

[error] 73-73: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

src/components/my-page/reviewable-gatherings/reviewable-gathering-card.tsx (1)

53-59: 이미지 μ΅œμ ν™” μ œμ•ˆ

이미지 μ»΄ν¬λ„ŒνŠΈμ˜ λ°˜μ‘ν˜• μ²˜λ¦¬κ°€ 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같은 속성듀을 μΆ”κ°€ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”:

  • priority: λ·°ν¬νŠΈμ— λ°”λ‘œ ν‘œμ‹œλ˜λŠ” μ΄λ―Έμ§€μ˜ 경우
  • loading="lazy": 뷰포트 밖에 μžˆλŠ” μ΄λ―Έμ§€μ˜ 경우
  • quality: 이미지 ν’ˆμ§ˆ μ‘°μ • (κΈ°λ³Έκ°’ 75)
 <Image
   src={imageUrl}
   alt={gatheringName}
   fill
   sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
   className="h-full w-full object-cover"
+  loading="lazy"
+  quality={85}
 />
πŸ“œ Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between de86036 and 43fd284.

β›” Files ignored due to path filters (5)
  • public/assets/images/crew-sample/crew-sample-2.jpg is excluded by !**/*.jpg
  • public/assets/images/gathering-sample/gathering-sample-1.jpg is excluded by !**/*.jpg
  • public/assets/images/gathering-sample/gathering-sample-2.jpg is excluded by !**/*.jpg
  • public/assets/images/gathering-sample/gathering-sample-3.jpg is excluded by !**/*.jpg
  • public/assets/images/og.png is excluded by !**/*.png
πŸ“’ Files selected for processing (8)
  • public/assets/images/crew-sample/index.tsx (1 hunks)
  • public/assets/images/gathering-sample/index.tsx (1 hunks)
  • src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx (1 hunks)
  • src/app/layout.tsx (2 hunks)
  • src/components/common/gathering-card/presenter.tsx (1 hunks)
  • src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx (1 hunks)
  • src/components/common/profile/index.tsx (1 hunks)
  • src/components/my-page/reviewable-gatherings/reviewable-gathering-card.tsx (2 hunks)
βœ… Files skipped from review due to trivial changes (1)
  • public/assets/images/crew-sample/index.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/presenter.tsx
  • src/components/common/gathering-card/presenter.tsx
  • src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx
🧰 Additional context used
πŸͺ› Biome
src/components/common/profile/index.tsx

[error] 73-73: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

πŸ”‡ Additional comments (3)
public/assets/images/gathering-sample/index.tsx (1)

7-9: S3 URL ꡬ쑰 및 μ ‘κ·Όμ„± 검증이 ν•„μš”ν•©λ‹ˆλ‹€

S3 URL이 직접 ν•˜λ“œμ½”λ”©λ˜μ–΄ μžˆμ–΄ λ‹€μŒκ³Ό 같은 잠재적인 λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€:

  • ν™˜κ²½μ— λ”°λ₯Έ 버킷 이름 λ³€κ²½ μ‹œ μ½”λ“œ μˆ˜μ •μ΄ ν•„μš”
  • URL λ…ΈμΆœλ‘œ μΈν•œ λ³΄μ•ˆ μœ„ν—˜

λ‹€μŒκ³Ό 같은 κ°œμ„ μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  1. S3 버킷 이름을 ν™˜κ²½ λ³€μˆ˜λ‘œ 관리
  2. URL 생성 λ‘œμ§μ„ λ³„λ„μ˜ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‘œ 뢄리
src/app/layout.tsx (1)

12-12: 메타데이터 μ„€λͺ…이 μ μ ˆν•˜κ²Œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μ›Ήμ‚¬μ΄νŠΈμ˜ λͺ©μ μ„ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•˜λŠ” ν•œκΈ€ μ„€λͺ…μœΌλ‘œ λ³€κ²½λ˜μ–΄ SEO μ΅œμ ν™”μ— 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

src/components/common/profile/index.tsx (1)

Line range hint 19-25: μΈν„°νŽ˜μ΄μŠ€ 변경이 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

'header' μ‚¬μ΄μ¦ˆ μ˜΅μ…˜μ΄ μΆ”κ°€λ˜μ—ˆκ³ , 이에 λŒ€ν•œ μŠ€νƒ€μΌλ§μ΄ sizeClasses 객체에 μ˜¬λ°”λ₯΄κ²Œ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

🧰 Tools
πŸͺ› Biome

[error] 73-73: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

Comment on lines +23 to +29
<meta property="og:image" content="/assets/images/og.png" />
<meta property="og:title" content="CrewCrew" />
<meta
property="og:description"
content="λ‚΄ 크루와 ν•¨κ»˜ μ•½μ†ν•˜κ³  λ§Œλ‚˜λŠ” μš΄λ™ μ†Œλͺ¨μž„ μ›Ήμ‚¬μ΄νŠΈ"
/>
<meta property="og:url" content="https://crewcrew.vercel.app" />
Copy link

Choose a reason for hiding this comment

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

πŸ’‘ Codebase verification

Open Graph 메타 νƒœκ·Έ 섀정이 λΆ€λΆ„μ μœΌλ‘œ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  1. /assets/images/og.png 이미지 파일이 public 디렉토리에 μ •μƒμ μœΌλ‘œ μ‘΄μž¬ν•¨μ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.
  2. og:url은 ν˜„μž¬ ν•˜λ“œμ½”λ”©λ˜μ–΄ 있으며, ν™˜κ²½ λ³€μˆ˜λ₯Ό ν†΅ν•œ URL 섀정이 이루어지지 μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€:
    • 배포 ν™˜κ²½μ— 따라 λ‹€λ₯Έ URL을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν™˜κ²½ λ³€μˆ˜ 기반으둜 μˆ˜μ •
    • NEXT_PUBLIC_API_BASE_URLκ³Ό 같이 ν™˜κ²½λ³„ URL μ„€μ • 방식 ν™œμš© ꢌμž₯
πŸ”— Analysis chain

Open Graph 메타 νƒœκ·Έ 섀정을 ν™•μΈν•΄μ£Όμ„Έμš”.

λ‹€μŒ 사항듀을 κ²€μ¦ν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€:

  1. /assets/images/og.png 이미지 파일이 μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
  2. og:url이 ν™˜κ²½(개발/μŠ€ν…Œμ΄μ§•/ν”„λ‘œλ•μ…˜)에 따라 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜λŠ”μ§€ 확인
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# og:image 파일 쑴재 μ—¬λΆ€ 확인
fd "og.png" public/assets/images

# og:url μ„€μ • κ΄€λ ¨ ν™˜κ²½ λ³€μˆ˜ μ‚¬μš© μ—¬λΆ€ 확인
rg -A 2 "NEXT_PUBLIC.*URL|VERCEL_URL" .env*

Length of output: 154


Script:

#!/bin/bash
# Check if there are any environment-related configurations in the codebase
rg -g "!{.git,node_modules}" "process\.env|NEXT_PUBLIC|VERCEL_URL" 

# Check if there are any URL configurations in Next.js config files
fd -e config.js -e config.ts | xargs cat

# Look for any environment configuration patterns in the codebase
ast-grep --pattern 'process.env.$_'

Length of output: 6571

Comment on lines +69 to +75
<Image
alt="μ°Έμ—¬ 인원"
src={person}
fill
sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
className="h-full w-full object-contain"
/>
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

μ•„μ΄μ½˜ 이미지 μ΅œμ ν™” ν•„μš”

μž‘μ€ μ•„μ΄μ½˜ 이미지에 λΆˆν•„μš”ν•œ λ°˜μ‘ν˜• 속성이 μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. κ³ μ • 크기의 μ•„μ΄μ½˜μ΄λ―€λ‘œ sizes 속성은 μ œκ±°ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 <Image
   alt="μ°Έμ—¬ 인원"
   src={person}
   fill
-  sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
   className="h-full w-full object-contain"
 />
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Image
alt="μ°Έμ—¬ 인원"
src={person}
fill
sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw"
className="h-full w-full object-contain"
/>
<Image
alt="μ°Έμ—¬ 인원"
src={person}
fill
className="h-full w-full object-contain"
/>

@github-actions
Copy link

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: 5

🧹 Outside diff range and nitpick comments (6)
src/_apis/image/get-image-url.ts (1)

Line range hint 28-30: λΆˆν•„μš”ν•œ catch 블둝 제거 ꢌμž₯

ν˜„μž¬ catch 블둝은 λ‹¨μˆœνžˆ μ—λŸ¬λ₯Ό λ‹€μ‹œ throwν•˜λŠ” μ—­ν• λ§Œ ν•˜κ³  μžˆμ–΄ λΆˆν•„μš”ν•©λ‹ˆλ‹€. μ—λŸ¬ λ³€ν™˜μ΄λ‚˜ λ‘œκΉ… λ“±μ˜ μΆ”κ°€ μ²˜λ¦¬κ°€ μ—†λ‹€λ©΄ catch 블둝을 μ œκ±°ν•˜λŠ” 것이 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ²Œ λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

-    } catch (error) {
-      throw error;
-    }
+    }
src/_queries/crew/crew-detail-queries.ts (1)

27-28: localStorage 정리 둜직이 적절히 λ°°μΉ˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

성곡적인 크루 생성 ν›„ localStorageλ₯Ό μ •λ¦¬ν•˜λŠ” 것은 쒋은 μ ‘κ·Όμž…λ‹ˆλ‹€. λ‹€λ§Œ, λ‹€μŒ 사항듀을 κ³ λ €ν•΄λ³΄μ‹œλ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€:

  1. λΌμš°νŒ… μ‹€νŒ¨ μ‹œμ—λ„ localStorage 정리가 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μ—λŸ¬ λ°œμƒ μ‹œμ—λ„ λΆˆν•„μš”ν•œ 데이터가 남지 μ•Šλ„λ‘ μ •λ¦¬ν•˜λŠ” 것을 κ³ λ €ν•΄λ³΄μ„Έμš”.

λ‹€μŒκ³Ό 같이 κ°œμ„ ν•΄λ³΄μ‹œλŠ” 건 μ–΄λ–¨κΉŒμš”?:

  onSuccess: (data) => {
    if (data === null || data === undefined) {
+     localStorage.removeItem('createCrew');
      return;
    }
    queryClient.invalidateQueries({ queryKey: ['crewLists', 'crewDetail'] });
    toast.success('크루가 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.');
    localStorage.removeItem('createCrew');

    router.push(`/crew/detail/${data.crewId}`);
  },
  onError: (error) => {
+   localStorage.removeItem('createCrew');
    toast.error(error.message);
  },
src/app/layout.tsx (1)

34-47: ToastContainer 섀정이 잘 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

μ•Œλ¦Ό μ œν•œ, μœ„μΉ˜ μ„€μ •, ν…Œλ§ˆ 등이 μ μ ˆν•˜κ²Œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ ‘κ·Όμ„± ν–₯상을 μœ„ν•œ 섀정을 μΆ”κ°€ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ ‘κ·Όμ„± κ΄€λ ¨ 속성을 μΆ”κ°€ν•΄λ³΄μ„Έμš”:

 <ToastContainer
   position="bottom-right"
   autoClose={3000}
   hideProgressBar={false}
   newestOnTop={false}
   closeOnClick
   rtl={false}
   pauseOnFocusLoss
   draggable
   pauseOnHover
   theme="light"
   transition={Bounce}
   limit={1}
+  role="alert"
+  aria-live="polite"
 />
src/components/common/input/file-input-wrap/index.tsx (2)

58-63: FileInput μ»΄ν¬λ„ŒνŠΈμ— μ—λŸ¬ 처리 κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λͺ‡ κ°€μ§€ κ°œμ„ μ‚¬ν•­μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  1. μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ‚¬μš©μžμ—κ²Œ μ‹œκ°μ  ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜λŠ” 것이 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€
  2. μ—λŸ¬ μƒνƒœμ—μ„œ 파일 선택 UI의 접근성을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€

λ‹€μŒκ³Ό 같은 κ°œμ„ μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

 <FileInput
   value={fileValue}
   onChange={handleFileInput}
   isBlur={isSampleSelected}
   error={error}
+  aria-invalid={error ? 'true' : 'false'}
+  aria-errormessage={error?.message}
 />

Line range hint 35-56: λ°˜λ³΅λ˜λŠ” FileSample μ»΄ν¬λ„ŒνŠΈ μ½”λ“œλ₯Ό κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μΌν•œ FileSample μ»΄ν¬λ„ŒνŠΈκ°€ μ„Έ 번 반볡되고 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 배열을 μ‚¬μš©ν•˜μ—¬ λ¦¬νŒ©ν† λ§ν•˜λ©΄ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯상될 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같은 λ¦¬νŒ©ν† λ§μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

-      <FileSample
-        isEdit={isEdit}
-        value={isEdit ? (value as string) : sample[0]}
-        image={sample[0]}
-        onChange={handleChange}
-        isBlur={isOtherSelected}
-      />
-      <FileSample
-        isEdit={isEdit}
-        value={isEdit ? (value as string) : sample[0]}
-        image={sample[1]}
-        onChange={handleChange}
-        isBlur={isOtherSelected}
-      />
-      <FileSample
-        isEdit={isEdit}
-        value={isEdit ? (value as string) : sample[0]}
-        image={sample[2]}
-        onChange={handleChange}
-        isBlur={isOtherSelected}
-      />
+      {sample.map((image, index) => (
+        <FileSample
+          key={index}
+          isEdit={isEdit}
+          value={isEdit ? (value as string) : sample[0]}
+          image={image}
+          onChange={handleChange}
+          isBlur={isOtherSelected}
+        />
+      ))}
src/components/common/input/file-input-wrap/file-input/index.tsx (1)

71-74: μ—λŸ¬ μƒνƒœ λ³€κ²½ μ‹œ 정리(cleanup) λ‘œμ§μ„ μΆ”κ°€ν•΄μ£Όμ„Έμš”.

μ—λŸ¬ λ°œμƒ μ‹œ 미리보기λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 것은 μ’‹μ§€λ§Œ, 이전 μƒνƒœμ— λŒ€ν•œ 정리가 ν•„μš”ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같은 κ°œμ„ μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  useEffect(() => {
    if (error) {
+     if (preview) {
+       URL.revokeObjectURL(preview);
+     }
      setPreview(null);
    }
  }, [error]);
πŸ“œ Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 43fd284 and 96f1e22.

β›” Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
πŸ“’ Files selected for processing (10)
  • src/_apis/image/get-image-url.ts (1 hunks)
  • src/_queries/crew/crew-detail-queries.ts (1 hunks)
  • src/app/(crew)/crew/create/_components/create-crew-form/index.tsx (13 hunks)
  • src/app/(crew)/crew/create/page.tsx (1 hunks)
  • src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx (7 hunks)
  • src/app/(crew)/crew/detail/[id]/edit/page.tsx (1 hunks)
  • src/app/(crew)/layout.tsx (0 hunks)
  • src/app/layout.tsx (3 hunks)
  • src/components/common/input/file-input-wrap/file-input/index.tsx (7 hunks)
  • src/components/common/input/file-input-wrap/index.tsx (2 hunks)
πŸ’€ Files with no reviewable changes (1)
  • src/app/(crew)/layout.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/app/(crew)/crew/create/_components/create-crew-form/index.tsx
  • src/app/(crew)/crew/create/page.tsx
  • src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/index.tsx
  • src/app/(crew)/crew/detail/[id]/edit/page.tsx
πŸ”‡ Additional comments (6)
src/app/layout.tsx (2)

13-13: 메타데이터 μ„€λͺ…이 μ μ ˆν•˜κ²Œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ›Ήμ‚¬μ΄νŠΈμ˜ λͺ©μ μ„ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•˜λŠ” ν•œκΈ€ μ„€λͺ…μœΌλ‘œ 잘 μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


24-24: Open Graph 이미지 μ΅œμ ν™”λ₯Ό ν™•μΈν•΄μ£Όμ„Έμš”.

μ†Œμ…œ λ―Έλ””μ–΄ 곡유 μ‹œ 졜적의 ν‘œμ‹œλ₯Ό μœ„ν•΄ og:image의 크기가 μ μ ˆν•œμ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

ꢌμž₯ 이미지 크기:

  • Facebook: 1200 x 630 pixels
  • Twitter: 1200 x 675 pixels
  • LinkedIn: 1200 x 627 pixels
src/components/common/input/file-input-wrap/index.tsx (2)

4-4: νƒ€μž… μ •μ˜μ™€ μ—λŸ¬ 처리 κΈ°λŠ₯이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

react-hook-form의 FieldError νƒ€μž…μ„ ν™œμš©ν•˜μ—¬ 파일 μž…λ ₯의 μœ νš¨μ„± 검사 κΈ°λŠ₯이 κ°•ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μž κ²½ν—˜ ν–₯상에 도움이 될 κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

Also applies to: 12-12


16-16: μ»΄ν¬λ„ŒνŠΈ μ‹œκ·Έλ‹ˆμ²˜κ°€ 적절히 μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

error 프둭이 μΆ”κ°€λ˜μ–΄ μƒμœ„ μ»΄ν¬λ„ŒνŠΈλ‘œλΆ€ν„° μ—λŸ¬ μƒνƒœλ₯Ό 전달받을 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

src/components/common/input/file-input-wrap/file-input/index.tsx (2)

2-2: νƒ€μž… μ•ˆμ „μ„±κ³Ό μ—λŸ¬ μ²˜λ¦¬κ°€ 적절히 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

react-hook-form의 FieldError νƒ€μž…μ„ ν™œμš©ν•˜μ—¬ 폼 μœ νš¨μ„± 검사와 μ—λŸ¬ 처리λ₯Ό μ²΄κ³„μ μœΌλ‘œ κ΅¬ν˜„ν•œ 것이 μ’‹μŠ΅λ‹ˆλ‹€.

Also applies to: 12-12, 22-22


99-102: Next.js Image μ»΄ν¬λ„ŒνŠΈκ°€ μ΅œμ ν™”λ˜μ–΄ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜• 이미지 처리λ₯Ό μœ„ν•œ sizes 속성과 Tailwind CSS 클래슀 μ‚¬μš©μ΄ μ μ ˆν•©λ‹ˆλ‹€.

Also applies to: 120-126

try {
if (!validateFile(file)) {
throw new Error('Invalid file');
throw new Error(validateFile(file) as string);
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

validateFile ν•¨μˆ˜ 호좜 μ΅œμ ν™” ν•„μš”

validateFile ν•¨μˆ˜κ°€ 두 번 호좜되고 μžˆμ–΄ μ„±λŠ₯상 λΉ„νš¨μœ¨μ μ΄λ©°, ν•¨μˆ˜κ°€ λΆ€μž‘μš©μ„ κ°€μ§ˆ 경우 일관성 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•˜λŠ” 것을 μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

-      if (!validateFile(file)) {
-        throw new Error(validateFile(file) as string);
+      const validationResult = validateFile(file);
+      if (!validationResult) {
+        throw new Error(validationResult as string);

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines +27 to +28
localStorage.removeItem('createCrew');

Copy link

Choose a reason for hiding this comment

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

πŸ’‘ Codebase verification

createCrew localStorage 정리 μ½”λ“œκ°€ 두 κ³³μ—μ„œ λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€

localStorage.removeItem('createCrew')κ°€ λ‹€μŒ 두 μœ„μΉ˜μ—μ„œ λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • src/app/(crew)/crew/create/_components/create-crew-form/index.tsx
  • src/_queries/crew/crew-detail-queries.ts

λ™μΌν•œ cleanup μž‘μ—…μ΄ 두 κ³³μ—μ„œ μˆ˜ν–‰λ˜κ³  μžˆμ–΄ 쀑볡 μ½”λ“œκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. ν•œ 곳으둜 ν†΅ν•©ν•˜λŠ” 것이 μ’‹κ² μŠ΅λ‹ˆλ‹€.

πŸ”— Analysis chain

CreateCrewPageμ—μ„œ 쀑볡 cleanup μ½”λ“œ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

이전 μœ„μΉ˜μΈ CreateCrewPage μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ™μΌν•œ cleanup μ½”λ“œκ°€ μ™„μ „νžˆ μ œκ±°λ˜μ—ˆλŠ”μ§€ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.

λ‹€μŒ 슀크립트둜 ν™•μΈν•΄λ³΄μ„Έμš”:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# CreateCrewPageμ—μ„œ localStorage.removeItem('createCrew') μ‚¬μš© μ—¬λΆ€ 확인
rg "localStorage\.removeItem\('createCrew'\)" "src/app/(crew)/crew/create/page.tsx"

Length of output: 91


Script:

#!/bin/bash
# Check for any usage of 'createCrew' in localStorage operations within CreateCrewPage
rg "localStorage.*createCrew" "src/app/(crew)/crew/create/page.tsx"

# Also check the entire codebase for any remaining cleanup of 'createCrew' in localStorage
rg "localStorage.*createCrew"

# Use ast-grep to find any useEffect hooks that might contain cleanup
ast-grep --pattern 'useEffect(() => { $$$ }, $$$)'  "src/app/(crew)/crew/create/page.tsx"

Length of output: 543

@@ -1,3 +1,4 @@
import { Bounce, ToastContainer } from 'react-toastify';
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

react-toastify CSS νŒŒμΌμ„ import ν•΄μ£Όμ„Έμš”.

ToastContainerλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” react-toastify의 CSS νŒŒμΌλ„ ν•¨κ»˜ import ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•΄μ£Όμ„Έμš”:

import { Bounce, ToastContainer } from 'react-toastify';
+import 'react-toastify/dist/ReactToastify.css';
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { Bounce, ToastContainer } from 'react-toastify';
import { Bounce, ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

Comment on lines +37 to +39
if (reader.result) {
setPreview(reader.result as string);
}
Copy link

Choose a reason for hiding this comment

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

πŸ› οΈ Refactor suggestion

파일 처리 둜직의 μ—λŸ¬ 처리λ₯Ό κ°œμ„ ν•΄μ£Όμ„Έμš”.

파일 처리 κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έ 상황에 λŒ€ν•œ μ²˜λ¦¬κ°€ λΆ€μ‘±ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같은 κ°œμ„ μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  const handleFileLoad = (file: File) => {
    if (fileReader) {
      fileReader.abort();
    }

    const reader = new FileReader();
    setFileReader(reader);

+   reader.onerror = () => {
+     console.error('파일 읽기 였λ₯˜:', reader.error);
+     setPreview(null);
+   };

    reader.onloadend = () => {
      if (reader.result) {
        setPreview(reader.result as string);
      }
    };
    reader.readAsDataURL(file);
  };

  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
    if (e.target.files && e.target.files.length > 0) {
      const file = e.target.files[0];
+     if (file.size > 5 * 1024 * 1024) {
+       console.error('파일 ν¬κΈ°λŠ” 5MBλ₯Ό μ΄ˆκ³Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.');
+       return;
+     }
      onChange(file);
      handleFileLoad(file);
    }
  };

Also applies to: 48-49

Comment on lines +76 to +84
useEffect(() => {
if (!isBlur && value) {
if (typeof value === 'string') {
setPreview(value);
} else {
handleFileLoad(value);
onChange(value);
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

λ©”λͺ¨λ¦¬ λˆ„μˆ˜ κ°€λŠ₯성이 μžˆλŠ” μƒνƒœ 관리 λ‘œμ§μ„ μˆ˜μ •ν•΄μ£Όμ„Έμš”.

ν˜„μž¬ κ΅¬ν˜„μ—λŠ” λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

  1. λΆˆν•„μš”ν•œ μƒνƒœ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€
  2. 이전 미리보기 URL이 μ œλŒ€λ‘œ μ •λ¦¬λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€

λ‹€μŒκ³Ό 같은 μˆ˜μ •μ„ μ œμ•ˆλ“œλ¦½λ‹ˆλ‹€:

  useEffect(() => {
+   let mounted = true;
    if (!isBlur && value) {
      if (typeof value === 'string') {
+       if (preview) {
+         URL.revokeObjectURL(preview);
+       }
-       setPreview(value);
+       if (mounted) setPreview(value);
      } else {
        handleFileLoad(value);
-       onChange(value);  // λΆˆν•„μš”ν•œ μƒνƒœ μ—…λ°μ΄νŠΈ 제거
      }
    }
    if (isBlur && value) {
+     if (preview) {
+       URL.revokeObjectURL(preview);
+     }
      setPreview(null);
    }
+   return () => {
+     mounted = false;
+   };
-  }, [isBlur, value]);
+  }, [isBlur, value, preview]);
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
useEffect(() => {
if (!isBlur && value) {
if (typeof value === 'string') {
setPreview(value);
} else {
handleFileLoad(value);
onChange(value);
}
}
useEffect(() => {
let mounted = true;
if (!isBlur && value) {
if (typeof value === 'string') {
if (preview) {
URL.revokeObjectURL(preview);
}
if (mounted) setPreview(value);
} else {
handleFileLoad(value);
}
}
if (isBlur && value) {
if (preview) {
URL.revokeObjectURL(preview);
}
setPreview(null);
}
return () => {
mounted = false;
};
}, [isBlur, value, preview]);

@github-actions
Copy link

@github-actions
Copy link

Copy link
Contributor

@ChoYenii ChoYenii left a comment

Choose a reason for hiding this comment

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

수고 λ§ŽμœΌμ…¨μŠ΅λ‹ˆλ‹€!

@yulrang yulrang merged commit 078c749 into develop Nov 21, 2024
2 checks passed
yulrang added a commit that referenced this pull request Nov 22, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 22, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 22, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 메인 λ²„νŠΌ 크기 톡일

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 23, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 메인 λ²„νŠΌ 크기 톡일

* πŸ’„ Design: z-index μˆ˜μ •

* πŸ’„ Design: λ²„νŠΌ μ‚¬μ΄μ¦ˆ μ‘°μ •, μ•ˆμ“°λŠ” 클래슀 μ‚­μ œ

* Merge branch 'main' into hotfix/Design

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 24, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 메인 λ²„νŠΌ 크기 톡일

* πŸ’„ Design: z-index μˆ˜μ •

* πŸ’„ Design: λ²„νŠΌ μ‚¬μ΄μ¦ˆ μ‘°μ •, μ•ˆμ“°λŠ” 클래슀 μ‚­μ œ

* Merge branch 'main' into hotfix/Design

* 🍱 Chore: 메타 이미지 λ³€κ²½

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 24, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

* πŸš‘ fix: μ΄λ¦„μˆ˜μ •, μ‹œκ°„κ³„μ‚° μˆ˜μ •

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
yulrang added a commit that referenced this pull request Nov 24, 2024
* ✨ Feat: reviewing Form에 post api μ—°κ²°

* Rename: review-apis

* πŸ› fix: build warning μˆ˜μ •, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜, import μ‚­μ œ

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ uiμˆ˜μ •

* ✨ feat: 크루 λ””ν…ŒμΌ μŠ€μΌˆλ ˆν†€ UIμΆ”κ°€

* ✨ feat: 리슀트 μŠ€μΌˆλ ˆν†€ 적용, 데이터 없을 경우 μŠ€νƒ€μΌ μΆ”κ°€

* ✨ feat: μŠ€μΌˆλ ˆν†€ ui μΆ”κ°€ 잘λͺ»λœ id 404둜 이동

* πŸ› fix: npm installed canged

* ♻️ refactor: μŠ€ν† λ¦¬λΆ 폴더, 파일λͺ… μˆ˜μ •

* πŸš‘ fix: npm i changed

* πŸš‘ fix: νŽ˜μ΄μ§€ λžœλ”λ§ μ•ˆλ˜λŠ” 문제 μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ configure doc μˆ˜μ •

* πŸš‘ fix: λ§₯ μŠ€ν† λ¦¬λΆμœ„ν•΄ esbuildμ„€μΉ˜

* πŸ’„ design: fontweigntμ‚­μ œ

* πŸ› fix: 포멧 데이터 λ””μžμΈμ— 맞게 μˆ˜μ •

* πŸ› fix: νƒ€μž… μˆ˜μ •

* πŸ› fix: μŠ€ν† λ¦¬λΆ λͺ©λ°μ΄ν„° μˆ˜μ •

* πŸ’„ design: λ””μžμΈμ— 맞게 λ‚ μ§œ μˆ˜μ •

* ✨ feat: λ‚˜μ˜λ¦¬λ·°, 리뷰 μ‚­μ œν•˜κΈ° μΆ”κ°€

* πŸ› fix: ν† μŠ€νŠΈλ‘œ λ³€κ²½

* ✨ feat: λ‚˜μ˜ 리뷰 리슀트 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„, 데이터 μ—°κ²°

* πŸ“ docs: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 파일 μ‚­μ œ, μ£Όμ„μ²˜λ¦¬

* πŸš‘ fix: 쀑볡 μ½”λ“œ μ‚­μ œ, μ΄λ™κ²½λ‘œ μˆ˜μ •

* πŸ’„ design: λ§ˆμ§„ μΆ”κ°€

* πŸ› fix: 폴더 λ“€μ—¬μ“°κΈ° μ—λŸ¬ μˆ˜μ • - meta title λ³€κ²½

* πŸ› fix: ν”„λ¦¬νŒ¨μΉ˜ κΈ°λŠ₯ λ‹€μ‹œ μ‚΄λ¦Ό

* ✨ feat: 크루 리뷰 νƒ€μž… μΆ”κ°€

* πŸ› fix: λ¦¬λ·°μΉ΄λ“œ μˆ˜μ •

* πŸ› fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” import μ‚­μ œ

* πŸš‘ fix: νƒ€μž…μ— 따라 이름 λ³€κ²½

* ✨ feat: 데이터 패치

* ✨ feat: λ ˆμ΄μ§€ λ‘œλ”©μ„ 톡해 μ‹œκ°„λ‹¨μΆ•

* ♻️ refactor: νŽ˜μ΄μ§€λ„€μ΄μ…˜ λ¦¬νŒ©ν† λ§

* πŸ› fix: μ„ μ–Έν–ˆμ§€λ§Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°’ μ‚­μ œ

* ✨ feat: 리뷰 리슀트 μŠ€μΌˆλ ˆν†€ UI μΆ”κ°€

* Fix/youl bug fix (#150)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* ✨ feat: μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* ✨ feat: 데이터 패치, μŠ€μΌˆλ ˆν†€ μ‚¬μš©

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* πŸ’„ design: λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* μ΅œμ‹ ν™”

* πŸš‘ fix: 데이터 μˆ˜μ •

* πŸ› fix: zustand state μ—λŸ¬ μˆ˜μ •, ✨ Feat: reissueμ—λŸ¬μ‹œ redirect μΆ”κ°€

* πŸ’„ Style: img style λ³€κ²½

* πŸš‘ fix: νŒ¨ν‚€μ§€ λ³€κ²½

* ✨ feat: 데이터가 μ—†λŠ”κ²½μš° 처리

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ •

* ♻️ refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§

* πŸ’„ design: λ””μžμΈμ— 맞게 μˆ˜μ •, λˆ„λ½λœ 데이터 μΆ”κ°€, λ°˜μ‘ν˜• μž‘μ—…

* πŸ› fix: 데이터λͺ… λ³€κ²½

* πŸ› fix: storybook err μˆ˜μ •

* Feat/135/not found λ””μžμΈ μˆ˜μ • (#167)

* ✨ Feat: Not Found μΆ”κ°€

* πŸ’„ Design: λ””μžμΈ κ°œμ„ 

* πŸ’„ Design: not-found λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: favicon μΆ”κ°€

* 🚨 Fix: μž„ν¬νŠΈ 정리

* πŸ› Fix : 였λ₯˜μ²˜λ¦¬ μΆ”κ°€

* πŸš‘ fix: λ§ˆμ΄νŽ˜μ΄μ§€ 401둜직 μˆ˜μ •

* ✨ feat: λ‘œκ·ΈμΈμƒνƒœκ°€ μ•„λ‹κ²½μš° 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

* πŸ› fix: μ•ˆμ“°λŠ” μž„μ‹œνŒŒμΌ μ‚­μ œ

* ♻️ refactor: storybook 폴더 λ³€κ²½, πŸ“ docs: configure 이미지 파일 μΆ”κ°€

* Feat/147/skeleton : λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€ (#162)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* πŸ’„ Design: ν¬λ£¨μΉ΄λ“œ λͺ¨λ°”일 λ””μžμΈ μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* 🚨 Fix: λΉŒλ“œ μ›Œλ‹ 제거

* πŸ’„  Design: λ‚˜μ˜μ•½μ† μŠ€μΌˆλ ˆν†€ λ””μžμΈ μˆ˜μ • μ΄ˆμ•ˆ

* πŸ’„ Design: μŠ€μΌˆλ ˆν†€ λ„ˆλΉ„ μˆ˜μ •

* Merge branch 'develop' into Feat/147/Skeleton

* πŸ› fix: build err μˆ˜μ • - import μΆ”κ°€

* πŸ› fix: ν”„λ‘œν•„ λͺ¨μŒ μœ„μΉ˜μˆ˜μ •

* πŸ› fix: μ•ˆμ“°λŠ” μ»΄ν¬λ„ŒνŠΈ μ‚­μ œ

* πŸ› fix: 폴더λͺ… λ³€κ²½

* πŸš‘ fix: λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ μœ„μΉ˜ λ³€κ²½

* πŸ› fix: νŒŒμΌμ΄λ™

* πŸ“¦ chore: μ•ˆμ“°λŠ” 파일, νŒ¨ν‚€μ§€ 정리

* πŸš‘ fix: build warning 정리

* ✨ feat: λΉŒλ“œ ν•΄κ²°μœ„ν•΄ μΆ”κ°€

* πŸš‘ fix: μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” νŒ¨ν‚€μ§€ μ‚­μ œ

* Fix/youl bug fix : 둜고, νŒŒλΉ„μ½˜ ꡐ체, 헀더 μŠ€νƒ€μΌ λ³€κ²½ (#171)

* Feat: μŠ€μΌˆλ ˆν†€ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€

* πŸ› Fix: 컬럼 μˆ˜μ •

* ✨ Feat: λ§ˆμ΄νŽ˜μ΄μ§€ ν”„λ‘œν•„ μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: μž‘μ„±κ°€λŠ₯ν•œλ¦¬λ·° μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* ✨ Feat: λ‚˜μ˜ 리뷰 μŠ€μΌˆλ ˆν†€ μΆ”κ°€κ°€

* ♿️ Fix: μ ‘κ·Όμ„± κ°œμ„ 

* ✨ Feat: λ‚˜μ˜ 약속 λ‘œλ”© μŠ€μΌˆλ ˆν†€ μΆ”κ°€

* πŸ’„ Design: ν˜Έλ²„μ‹œ 그림자 적용

* 🚨 Fix: λΉŒλ“œ 였λ₯˜ μˆ˜μ •

* πŸ› Fix: DateTimePicker λ™μž‘κ°œμ„ 

* ♿️ Fix: 크루 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix : 약속 폼 μ ‘κ·Όμ„± κ°œμ„ 

* ♿️ Fix: 크루찾기 μ ‘κ·Όμ„± κ°œμ„ 

* πŸ› Fix: 이미지 fill, cover μ›Œλ‹ μ—†μ• κΈ°

* Merge branch 'develop' into Fix/YoulBugFix

* 🍱 Fix: μƒ˜ν”Œ 이미지 ꡐ체

* ✨ Feat: 메타 μ„€μ •

* ⬇️ Chore: package install

* πŸ› Fix: νŒŒμΌμΈν’‹ λ™μž‘ κ°œμ„ 

* Co-authored-by: JEP <[email protected]>

* πŸ› Fix: FileInput λ™μž‘ κ°œμ„ 

* 🚨 Fix: λΉŒλ“œμ˜€λ₯˜ μˆ˜μ •

* 🎨 Style: λ¦°νŠΈν”„λ¦¬ν‹°μ–΄ 적용

* πŸ’„ Design: 헀더 μˆ˜μ •

* πŸ”₯ Chore: 파일 정리

* πŸ› Fix: 헀더 λ™μž‘ κ°œμ„ 

* πŸ› Fix: 크루 μ°ΎκΈ° 메뉴 μ›λž˜λŒ€λ‘œ

* πŸ’„ Design: 헀더 λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 둜그인 ν°νŠΈμ‚¬μ΄μ¦ˆ λ³€κ²½

* πŸ› Fix: 이미지 경둜 μˆ˜μ •

* 🍱 Chore: μ••μΆ•λœ μ΄λ―Έμ§€λ‘œ ꡐ체

* πŸ”§ Chore: νŒŒλΉ„μ½˜ μ„€μ • μΆ”κ°€

* πŸ’š Chore: package 싱크

* πŸ’„design: 간격 λ³€κ²½

* ✨ feat: λΉˆλ°°μ—΄ 문ꡬ μΆ”κ°€

* πŸ’„ design: μŠ€μΌˆλ ˆν†€ ui μˆ˜μ •

* ✨ Feat: 데이터 없을 λ•Œ 문ꡬ μΆ”κ°€

* πŸ› fix: svg err μˆ˜μ •

* πŸ“ docs: μŠ€ν† λ¦¬λΆ docs μΆ”κ°€, 보강

* πŸ› fix: μ•ˆμ“°λŠ” λͺ©λ°μ΄ν„° μ‚­μ œ

* πŸ“ docs: ν”„λ‘œν•„, μ°œν•˜κΈ° μŠ€ν† λ¦¬λΆ docs μΆ”κ°€

* πŸ“ docs: input, auth, layout component μŠ€ν† λ¦¬λΆ λ¬Έμ„œ μˆ˜μ •

* ♻️ refactor: 이전 νŒŒλΉ„μ½˜ μ‚­μ œ

* Fix/youl storybook + 노데이터 문ꡬ μˆ˜μ • (#174)

* πŸ“ Docs: μŠ€ν† λ¦¬λΆ μˆ˜μ •, Refactor: μ•ˆμ“°λŠ” νƒ€μž… μˆ˜μ •

* πŸ“ Docs: jsdoc μΆ”κ°€

* ✨ feat: λΉˆλ°°μ—΄μΌ 경우 처리 μΆ”κ°€, mtμΆ”κ°€

* πŸ› fix: app λ‚΄ νŒŒλΉ„μ½˜ μ‚­μ œ

* πŸ’„ design: λ””μžμΈ μˆ˜μ •

* πŸ’„ Design: 메인 λ²„νŠΌ 크기 톡일

* πŸ’„ Design: z-index μˆ˜μ •

* πŸ’„ Design: λ²„νŠΌ μ‚¬μ΄μ¦ˆ μ‘°μ •, μ•ˆμ“°λŠ” 클래슀 μ‚­μ œ

* Merge branch 'main' into hotfix/Design

* 🍱 Chore: 메타 이미지 λ³€κ²½

* 🍱 Chore : 메타 이미지 ꡐ체

---------

Co-authored-by: μ‘°μ˜ˆμ€ <[email protected]>
Co-authored-by: min5x5 <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: HaeJungg <[email protected]>
Co-authored-by: Cho Yeeun <[email protected]>
Co-authored-by: κΉ€λ―Όκ²½ <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants