-
Notifications
You must be signed in to change notification settings - Fork 3
Fix/youl bug fix #150
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix/youl bug fix #150
Conversation
Walkthroughμ΄ ν 리νμ€νΈλ μ¬λ¬ μ»΄ν¬λνΈμ μ κ·Όμ±κ³Ό μ¬μ©μ μΈν°νμ΄μ€λ₯Ό κ°μ νλ λ³κ²½ μ¬νμ ν¬ν¨νκ³ μμ΅λλ€. μ£Όμ λ³κ²½ μ¬νμΌλ‘λ Changes
Possibly related PRs
Suggested labels
Suggested reviewers
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
src/app/(crew)/crew/create/_components/create-crew-form/index.tsxOops! Something went wrong! :( ESLint: 8.57.1 ESLint couldn't determine the plugin "react-hooks" uniquely.
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? πͺ§ TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-lkhovhbwfa.chromatic.com/ |
There was a problem hiding this 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: μ±λ₯ μ΅μ νμ λ°μν λ μ΄μμ κ°μ μ΄ νμν©λλ€.
- Array μμ± λ°©μμ μ΅μ ννκ³
- λ°μν 그리λ λ μ΄μμμ μ μ©νλ©΄ μ’μ κ² κ°μ΅λλ€.
λ€μκ³Ό κ°μ΄ μμ νλ κ²μ μ μν©λλ€:
- <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: μ€νμΌ κ΅¬μ± κ°μ μ΄ νμν©λλ€νμ¬ μ€νμΌλ§μ λν΄ λͺ κ°μ§ κ°μ μ¬νμ μ μλ립λλ€:
- μ¬μ¬μ© κ°λ₯ν ν΄λμ€λ€μ μμλ‘ λΆλ¦¬
- λ°μν λμμΈ λΈλ μ΄ν¬ν¬μΈνΈ μΌκ΄μ± ν보
- μ λ μμΉ μ§μ λμ 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: μ±λ₯ μ΅μ ν μ μμ»΄ν¬λνΈμ λΆνμν 리λ λλ§μ λ°©μ§νκΈ° μν΄ λ€μ μ΅μ νλ₯Ό κ³ λ €ν΄λ³΄μΈμ:
- React.memoλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈ λ©λͺ¨μ΄μ μ΄μ
- useCallbackμ μ¬μ©νμ¬ onChange νΈλ€λ¬ λ©λͺ¨μ΄μ μ΄μ
- 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 μ²λ¦¬ λ°©μ κ°μ μ΄ νμν©λλ€.νμ¬ κ΅¬νμμ λͺ κ°μ§ κ°μ μ΄ νμν λΆλΆμ΄ μμ΅λλ€:
- 'string'μ νΉμκ°μΌλ‘ μ¬μ©νλ κ²μ νμ μμ μ±μ ν΄μΉ©λλ€
- κΈ΄ νλ μ΄μ€νλ μ΄λ―Έμ§ 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 2Length 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 2Length 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
π 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
| {[...Array(num)].map((_, index) => ( | ||
| // eslint-disable-next-line react/no-array-index-key | ||
| <GatheringSkeleton key={index} /> | ||
| ))} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π οΈ Refactor suggestion
μ±λ₯ μ΅μ νλ₯Ό μν κ°μ μ¬νμ΄ μμ΅λλ€
Arrayμ€νλ λ μ°μ°μ λμArray.fromμ μ¬μ©νλ©΄ λ ν¨μ¨μ μ λλ€.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.
| {[...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() { | |||
There was a problem hiding this comment.
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.
| export default function MyGatheringSkeleton() { | |
| interface MyGatheringSkeletonProps { | |
| className?: string; | |
| } | |
| /** | |
| * λͺ¨μ μ λ³΄κ° λ‘λ©μ€μΌ λ νμλλ μ€μΌλ ν€ UI μ»΄ν¬λνΈ | |
| */ | |
| export default function MyGatheringSkeleton({ className }: MyGatheringSkeletonProps) { |
| 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> | ||
| ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μ κ·Όμ± κ°μ μ΄ νμν©λλ€
μ€ν¬λ¦° 리λ μ¬μ©μλ₯Ό μν μ κ·Όμ± κ°μ μ΄ νμν©λλ€:
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.
| {[...Array(num)].map((_, index) => ( | ||
| // eslint-disable-next-line react/no-array-index-key | ||
| <CrewSkeleton key={index} /> | ||
| ))} |
There was a problem hiding this comment.
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.
| <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> |
There was a problem hiding this comment.
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.
| <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> |
| {isLoading && <MyGatheringSkeletonList num={6} />} | ||
| {hostedGatheringList && <GatheringListWithDate gatheringList={hostedGatheringList} />} |
There was a problem hiding this comment.
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.
| 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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π οΈ Refactor suggestion
λ μ§ μ ν λ‘μ§ κ°μ μ΄ νμν©λλ€.
νμ¬ κ΅¬νμμ λͺ κ°μ§ μ μ¬μ μΈ λ¬Έμ μ μ΄ μμ΅λλ€:
isSelectedλ³μκ° νμtrueλ₯Ό λ°ννμ¬ μ‘°κ±΄λ¬Έμ΄ λΆνμν©λλ€- μκ°λ λ³ν μ μ€λ³΅ μ½λκ° λ°μν μ μμ΅λλ€
λ€μκ³Ό κ°μ΄ κ°μ νλ κ²μ μ μλ립λλ€:
- 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.
| 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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
λ μ§ μ ν λ μ΄λΈμ μλ―Έλ‘ μ λ§ν¬μ κ°μ νμ
λ μ§ μ ν λ μ΄λΈλ <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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μ κ·Όμ± κ°μ μ μν΄ μλ―Έλ‘ μ νκ·Έ μ¬μ© νμ
μ΄λ―Έμ§ μ ν λ μ΄λΈμ΄ <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.
| <span className="text-base font-semibold text-gray-800 md:text-xl"> | ||
| λνμ΄λ―Έμ§λ₯Ό μ ννκ±°λ 첨λΆν΄μ£ΌμΈμ. | ||
| </label> | ||
| </span> |
There was a problem hiding this comment.
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.
There was a problem hiding this 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: μ κ·Όμ± κ°μ μ μν μ μμ¬νμ΄ μμ΅λλ€.νμ΄λ¨Έ μμ΄μ½ κ΄λ ¨ κ°μ μ¬ν:
- μμ΄μ½μ alt ν μ€νΈλ₯Ό λ λͺ ννκ² μμ±νλ©΄ μ’μ κ² κ°μ΅λλ€ (μ: "λ§κ° μλ° νμ΄λ¨Έ μμ΄μ½")
- λ°λ³΅λλ μμ΄μ½ ν¬κΈ° κ°μ μμλ‘ λΆλ¦¬νλ©΄ μ μ§λ³΄μκ° λ μ©μ΄ν κ² κ°μ΅λλ€
λ€μκ³Ό κ°μ΄ μμ ν΄λ³΄μλ 건 μ΄λ¨κΉμ?
+ 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
π 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 ν΄λμ€λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§μ λ°μν μ²λ¦¬κ° λμ± ν¨κ³Όμ μΌλ‘ κ°μ λμμ΅λλ€.
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-mqyrdhmkec.chromatic.com/ |
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-eqjlzrinhb.chromatic.com/ |
There was a problem hiding this 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
β Files ignored due to path filters (5)
public/assets/images/crew-sample/crew-sample-2.jpgis excluded by!**/*.jpgpublic/assets/images/gathering-sample/gathering-sample-1.jpgis excluded by!**/*.jpgpublic/assets/images/gathering-sample/gathering-sample-2.jpgis excluded by!**/*.jpgpublic/assets/images/gathering-sample/gathering-sample-3.jpgis excluded by!**/*.jpgpublic/assets/images/og.pngis 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 λ ΈμΆλ‘ μΈν 보μ μν
λ€μκ³Ό κ°μ κ°μ μ μ μλ립λλ€:
- S3 λ²ν· μ΄λ¦μ νκ²½ λ³μλ‘ κ΄λ¦¬
- 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)
| <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" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π‘ Codebase verification
Open Graph λ©ν νκ·Έ μ€μ μ΄ λΆλΆμ μΌλ‘ νμΈλμμ΅λλ€.
/assets/images/og.pngμ΄λ―Έμ§ νμΌμ΄publicλλ ν 리μ μ μμ μΌλ‘ μ‘΄μ¬ν¨μ νμΈνμ΅λλ€.og:urlμ νμ¬ νλμ½λ©λμ΄ μμΌλ©°, νκ²½ λ³μλ₯Ό ν΅ν URL μ€μ μ΄ μ΄λ£¨μ΄μ§μ§ μκ³ μμ΅λλ€. λ€μκ³Ό κ°μ κ°μ μ΄ νμν©λλ€:- λ°°ν¬ νκ²½μ λ°λΌ λ€λ₯Έ URLμ μ¬μ©ν μ μλλ‘ νκ²½ λ³μ κΈ°λ°μΌλ‘ μμ
NEXT_PUBLIC_API_BASE_URLκ³Ό κ°μ΄ νκ²½λ³ URL μ€μ λ°©μ νμ© κΆμ₯
π Analysis chain
Open Graph λ©ν νκ·Έ μ€μ μ νμΈν΄μ£ΌμΈμ.
λ€μ μ¬νλ€μ κ²μ¦ν΄μ£ΌμκΈ° λ°λλλ€:
/assets/images/og.pngμ΄λ―Έμ§ νμΌμ΄ μ€μ λ‘ μ‘΄μ¬νλμ§ νμΈ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
| <Image | ||
| alt="μ°Έμ¬ μΈμ" | ||
| src={person} | ||
| fill | ||
| sizes="(max-width: 744px) 100vw, (max-width: 1200px) 50vw, 33vw" | ||
| className="h-full w-full object-contain" | ||
| /> |
There was a problem hiding this comment.
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.
| <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" | |
| /> |
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-mberhoivtg.chromatic.com/ |
There was a problem hiding this 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λ₯Ό μ 리νλ κ²μ μ’μ μ κ·Όμ λλ€. λ€λ§, λ€μ μ¬νλ€μ κ³ λ €ν΄λ³΄μλ©΄ μ’μ κ² κ°μ΅λλ€:
- λΌμ°ν μ€ν¨ μμλ localStorage μ λ¦¬κ° νμν μ μμ΅λλ€.
- μλ¬ λ°μ μμλ λΆνμν λ°μ΄ν°κ° λ¨μ§ μλλ‘ μ 리νλ κ²μ κ³ λ €ν΄λ³΄μΈμ.
λ€μκ³Ό κ°μ΄ κ°μ ν΄λ³΄μλ 건 μ΄λ¨κΉμ?:
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 μ»΄ν¬λνΈμ μλ¬ μ²λ¦¬ κΈ°λ₯μ΄ κ΅¬νλμμ΅λλ€.νμ§λ§ λͺ κ°μ§ κ°μ μ¬νμ μ μλ립λλ€:
- μλ¬κ° λ°μνμ λ μ¬μ©μμκ² μκ°μ νΌλλ°±μ μ 곡νλ κ²μ΄ μ’μ κ² κ°μ΅λλ€
- μλ¬ μνμμ νμΌ μ ν 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
β Files ignored due to path filters (1)
package-lock.jsonis 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
src/_apis/image/get-image-url.ts
Outdated
| try { | ||
| if (!validateFile(file)) { | ||
| throw new Error('Invalid file'); | ||
| throw new Error(validateFile(file) as string); |
There was a problem hiding this comment.
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.
| localStorage.removeItem('createCrew'); | ||
|
|
There was a problem hiding this comment.
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.tsxsrc/_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'; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| import { Bounce, ToastContainer } from 'react-toastify'; | |
| import { Bounce, ToastContainer } from 'react-toastify'; | |
| import 'react-toastify/dist/ReactToastify.css'; |
| if (reader.result) { | ||
| setPreview(reader.result as string); | ||
| } |
There was a problem hiding this comment.
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
| useEffect(() => { | ||
| if (!isBlur && value) { | ||
| if (typeof value === 'string') { | ||
| setPreview(value); | ||
| } else { | ||
| handleFileLoad(value); | ||
| onChange(value); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
λ©λͺ¨λ¦¬ λμ κ°λ₯μ±μ΄ μλ μν κ΄λ¦¬ λ‘μ§μ μμ ν΄μ£ΌμΈμ.
νμ¬ κ΅¬νμλ λ€μκ³Ό κ°μ λ¬Έμ κ° μμ΅λλ€:
- λΆνμν μν μ λ°μ΄νΈκ° λ°μν μ μμ΅λλ€
- μ΄μ 미리보기 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.
| 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]); |
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-ihechhcqaz.chromatic.com/ |
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-vsvkimlkmg.chromatic.com/ |
ChoYenii
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μκ³ λ§μΌμ ¨μ΅λλ€!
* β¨ 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]>
* β¨ 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]>
* β¨ 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]>
* β¨ 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]>
* β¨ 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]>
* β¨ 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]>
* β¨ 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]>
π Issue Ticket
βοΈ Description
μμν μμ μ¬ν μμ ν΄μ μ¬λ¦¬κ² μ΅λλ€~!
β Checklist
PR
Test
Summary by CodeRabbit
λ¦΄λ¦¬μ€ λ ΈνΈ
μλ‘μ΄ κΈ°λ₯
CrewSkeletonListμ»΄ν¬λνΈλ₯Ό μΆκ°νμ΅λλ€.λ²κ·Έ μμ
λ¬Έμν
μ€νμΌ