-
Notifications
You must be signed in to change notification settings - Fork 3
Fix/152/storybook refactor #157
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
Conversation
Walkthrough์ด ๋ณ๊ฒฝ ์ฌํญ์ Storybook ๊ตฌ์ฑ ํ์ผ์์ ์ฌ๋ฌ ๊ฐ์ง ์์ ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Warning Rate limit exceeded@minkyung5x5 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 11 minutes and 33 seconds before requesting another review. โ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. ๐ฆ How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 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 (1.23.1)
src/components/my-page/reviewable-gatherings/reviewable-gathering-card.stories.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 (
|
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 (33)
.storybook/main.ts (1)
19-20: ์คํ ๋ฆฌ ์ ๋ ฌ ๊ท์น์ ์์ธํ ์ ์ํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.ํ์ฌ
storySort๊ฐ์ฒด๊ฐ ๋น์ด์์ต๋๋ค. ๋ ์ฒด๊ณ์ ์ธ ์คํ ๋ฆฌ ๊ตฌ์ฑ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์์ธ ์ ๋ ฌ ๊ท์น์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:storySort: {}, + storySort: { + order: [ + 'Introduction', + 'Components', + ['Atoms', 'Molecules', 'Organisms'], + 'Pages', + '*' + ], + },src/components/common/input/button/button.stories.tsx (2)
Line range hint
4-31: ์คํ ๋ฆฌ ์ ๋ ฌ์ ์ํ ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐ๋ฅผ ์ ์๋๋ฆฝ๋๋ค.์คํ ๋ฆฌ๋ถ์ ๊ตฌ์ฑ์ ๋์ฑ ๊ฐ์ ํ๊ธฐ ์ํด
parameters์์ฑ์ ์ถ๊ฐํ์ฌ ์คํ ๋ฆฌ ์ ๋ ฌ ๋ฐฉ์์ ์ง์ ํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ ํด๋ณด์ธ์:
const meta: Meta = { title: 'common/button/button', tags: ['autodocs'], component: Button, + parameters: { + controls: { sort: 'requiredFirst' }, + options: { + storySort: { + method: 'alphabetical', + order: ['Filled', 'Outlined', 'Disabled'], + }, + }, + }, argTypes: {
Line range hint
8-31: argTypes์ ํ์ ์์ฑ ํ์๋ฅผ ์ ์๋๋ฆฝ๋๋ค.์ฌ์ฉ์๊ฐ ํ์๋ก ์ ๋ฌํด์ผ ํ๋ props๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ ์ ์๋๋ก description์ ํ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํด๋ณด์ธ์:
argTypes: { className: { - description: 'ํด๋์ค๋ค์, ๊ธธ์ด (btn-filled, btn-outlined, btn-disabled)', + description: '[ํ์] ํด๋์ค๋ค์, ๊ธธ์ด (btn-filled, btn-outlined, btn-disabled)', control: 'text', }, children: { - description: '๋ฒํผ ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ์ฝํ ์ธ ', + description: '[ํ์] ๋ฒํผ ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ์ฝํ ์ธ ', control: 'text', },.storybook/preview.tsx (1)
32-40: ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค.ํ์ฌ ๊ตฌ์กฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
order: [ 'common', - ['button', 'calendar', 'image', 'input'], + ['button', 'calendar', 'image', 'input', 'typography', 'icon'], 'layout', + ['header', 'footer', 'sidebar', 'container'], 'auth', + ['login', 'signup', 'profile'], 'crew', + ['list', 'detail', 'form'], 'gathering', + ['list', 'detail', 'form'], 'review', + ['list', 'detail', 'form'], ],์ด๋ ๊ฒ ์์ ํ๋ฉด:
- ๊ณตํต ์ปดํฌ๋ํธ์ ์์ฃผ ์ฌ์ฉ๋๋ ํ์ดํฌ๊ทธ๋ํผ์ ์์ด์ฝ ํญ๋ชฉ์ด ์ถ๊ฐ๋ฉ๋๋ค
- ๊ฐ ์น์ ๋ณ๋ก ํ์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๋ช ํํด์ง๋๋ค
- ํฅํ ์ปดํฌ๋ํธ ์ถ๊ฐ ์ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ฌ์์ง๋๋ค
src/components/common/header/header.stories.tsx (1)
Line range hint
24-65: ํ ์คํธ ์ผ์ด์ค ๋ณด์ ์ ์ํ์ฌ ๊ตฌํ๋ ์คํ ๋ฆฌ๋ค์ ๊ธฐ๋ณธ์ ์ธ ๋ค๋น๊ฒ์ด์ ๊ฒฝ๋ก๋ง ํ ์คํธํ๊ณ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ ํ ์คํธ ์ผ์ด์ค ๊ตฌํ์ ๊ณ ๋ คํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค:
- ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํ์ ๋์ ๋์
- ๊ถํ์ด ์๋ ํ์ด์ง ์ ๊ทผ ์ ๋์
- ๋ก๋ฉ ์ํ์ผ ๋์ ํ๋ฉด
์์ ๊ตฌํ์ ์ํ์๋ฉด ์๋ ค์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
src/components/common/input/file-input-wrap/file-sample/file-sample.stories.tsx (1)
32-34: ํ์ผ ์ ํ ์ ์ํ ๊ด๋ฆฌ ๋ก์ง ๊ฐ์ ์ ์ํ์ฌ ๊ตฌํ์ ์ ์๋ํ์ง๋ง, ์ฝ๋์ ์๋๋ฅผ ๋ ๋ช ํํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค:
const handleFileChange = (file: string | null) => { if (file) { - setIsBlur(false); // ํ์ผ ์ ํ ์ ๋ธ๋ฌ ํด์ + setIsBlur(false); // ์๋ก์ด ์ด๋ฏธ์ง๊ฐ ์ ํ๋๋ฉด ๋ธ๋ฌ ํจ๊ณผ๋ฅผ ์ด๊ธฐํํฉ๋๋ค } };src/components/common/crew-list/crew-card-list.stories.tsx (1)
Line range hint
1-65: ์ปดํฌ๋ํธ ์ฌ์ฉ๋ฒ์ ๋ํ ๋ฌธ์ํ๊ฐ ํ์ํฉ๋๋ค.์คํ ๋ฆฌ๋ถ ๋ฌธ์์ ๋ค์ ๋ด์ฉ๋ค์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- ์ปดํฌ๋ํธ์ ์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช
- ๋ฌดํ ์คํฌ๋กค ์ฌ์ฉ๋ฒ
- ์๋ฌ ์ํ์ ๋ก๋ฉ ์ํ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์๋ฅผ ์ถ๊ฐํด๋ณด์ธ์:
const meta: Meta = { title: 'crew/crew-card-list', component: CrewCardList, + parameters: { + docs: { + description: { + component: ` + # CrewCardList + + ๋ฌดํ ์คํฌ๋กค์ ์ง์ํ๋ ํฌ๋ฃจ ์นด๋ ๋ชฉ๋ก ์ปดํฌ๋ํธ์ ๋๋ค. + + ## ์ฃผ์ ๊ธฐ๋ฅ + - ๋ฌดํ ์คํฌ๋กค + - ๋ก๋ฉ ์ํ ํ์ + - ์๋ฌ ์ฒ๋ฆฌ + + ## ์ฌ์ฉ๋ฒ + \`\`\`tsx + <CrewCardList data={crewListData} /> + \`\`\` + ` + } + }, + layout: 'fullscreen', ...src/components/common/input/drop-down/drop-down.stories.tsx (2)
Line range hint
35-48: ์ํ ๊ด๋ฆฌ ๋ก์ง ๊ฐ์ ์ ๊ณ ๋ คํด๋ณด์ธ์ํ์ฌ ๊ตฌํ์ ์ ์๋ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค:
- ์ด๊ธฐ๊ฐ์ props์์ ๋ฐ์์ค๋๋ก ์์
- ์ํ ๋ณ๊ฒฝ ๋ก์ง์ ๋ณ๋์ ํ ์ผ๋ก ๋ถ๋ฆฌ
const Template: StoryFn<DropDownProps> = function DropDownStory(args) { - const [value, setValue] = useState<string | null>('option1'); + const [value, setValue] = useState<string | null>(args.value ?? null);
Line range hint
50-74: ํ ์คํธ ์ผ์ด์ค ๋ณด์์ ์ ์๋๋ฆฝ๋๋คํ์ฌ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ์ ์ปค๋ฒํ๊ณ ์์ผ๋, ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ณ ๋ คํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- ๋น ๋ฐ์ดํฐ ๋ฐฐ์ด ์ผ์ด์ค
- ๊ธด ํ ์คํธ ๋ ์ด๋ธ ์ผ์ด์ค
- ์๋ฌ ์ํ ์ผ์ด์ค
์์ ๊ตฌํ์ ์ํ์๋ฉด ๋ง์ํด ์ฃผ์ธ์.
src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/create-gathering-form.stories.tsx (1)
Line range hint
24-28: ํผ ์ปดํฌ๋ํธ์ ๋ฌธ์ํ๋ฅผ ๋ณด์ํด์ฃผ์ธ์.ํ์ฌ ๋ฌธ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ค๋ช ๋ง ํฌํจ๋์ด ์์ต๋๋ค. ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- ๊ฐ ํ๋์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น
- ํ์ ์ ๋ ฅ ํ๋ ์๋ด
- ์ด๋ฏธ์ง ์ ๋ก๋ ์ ํ์ฌํญ
src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx (1)
Line range hint
31-73: ์คํ ๋ฆฌ ๊ตฌ์ฑ์ ๋ํ ์ ์์คํ ๋ฆฌ์ ๊ตฌ์กฐํ๊ฐ ์ ๋์ด์์ง๋ง, ๋ช ๊ฐ์ง ๊ฐ์ ์ฌํญ์ ์ ์๋๋ฆฝ๋๋ค:
- ๊ฐ ์คํ ๋ฆฌ์ ๋ํ ๋ ์์ธํ ์ค๋ช ์
parameters.docs.description์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.- ๋ฐ์ดํฐ์ ๊ฒฝ๊ณ๊ฐ ํ ์คํธ๋ฅผ ์ํ ์ถ๊ฐ ์คํ ๋ฆฌ ์ผ์ด์ค๋ฅผ ๊ณ ๋ คํด๋ณด์ธ์ (์: ์ต๋ ์ธ์์ ๋๋ฌํ ๊ฒฝ์ฐ).
์์ ์ฝ๋:
export const LikedEvent: Story = { args: { data: { id: 1, // ... existing data }, }, + parameters: { + docs: { + description: '์ฌ์ฉ์๊ฐ ์ฐํ ๋ชจ์ ์นด๋๋ฅผ ํ์ํ๋ ์ผ์ด์ค์ ๋๋ค. ์ฐํ๊ธฐ ๋ฒํผ์ด ํ์ฑํ๋ ์ํ๋ก ํ์๋ฉ๋๋ค.' + } + } };src/components/gathering-list/liked-list-presenter.tsx (1)
Line range hint
23-62: ์ปดํฌ๋ํธ ๊ฐ์ ์ ์ํ์ฌ ๊ตฌํ์ ์ ์๋ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ๋ค์ ๊ณ ๋ คํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- ๋น content ๋ฐฐ์ด์ ๋ํ ์ฒ๋ฆฌ
- ๋ก๋ฉ ์ํ ํ์
- ํ์ด์ง๋ค์ด์ ์ ๊ทผ์ฑ ๊ฐ์
๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ๋ ๊ตฌํ์ ์ ์๋๋ฆฝ๋๋ค:
export default function LikedListPresenter({ gatheringData, onPageChange, onLike, onUnlike, page, }: LikedListPresenterProps) { const { content, totalPages } = gatheringData; + + if (content.length === 0) { + return ( + <div className="flex justify-center items-center min-h-[400px]"> + <p>์ข์์ํ ๋ชจ์์ด ์์ต๋๋ค.</p> + </div> + ); + } return ( <div className="mx-auto max-w-[1200px] px-4"> <div className={cn( 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3', 'mx-auto place-content-start justify-items-center gap-4', 'md:min-h-[1064px] lg:min-h-[704px]', )} > {content.map((card) => ( <GatheringCard {...card} key={card.id} liked onLike={() => onLike(card.id)} onUnlike={() => onUnlike(card.id)} /> ))} </div> <div className="mt-8 flex justify-center"> <Pagination total={totalPages} value={page} onChange={onPageChange} + aria-label="๋ชจ์ ํ์ด์ง ๋ค๋น๊ฒ์ด์ " classNames={{ control: cn( 'data-[active="true"]:text-blue-500 data-[active="true"]:font-bold', 'border-none bg-transparent hover:bg-transparent', ), }} styles={{ control: { '&[data-active]': { backgroundColor: 'transparent', fontWeight: 'var(--pagination-active-font-weight)', color: 'var(--pagination-active-color)', boxShadow: 'none', }, }, }} size="sm" /> </div> </div> ); }src/components/my-page/reviewing-modal/review-form.tsx (3)
Line range hint
21-22: API ์ฐ๋ ๋ฐ ํผ ์ ์ถ ๋ก์ง์ด ๊ตฌํ๋์ง ์์์ต๋๋คํ์ฌ TODO ์ฃผ์์ผ๋ก ํ์๋ API ์ฐ๋ ๋ฐ ํผ ์ ์ถ ๋ก์ง์ด ๋๋ฝ๋์ด ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ฅ์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ฏ๋ก ์ฐ์ ์ ์ผ๋ก ๊ตฌํ์ด ํ์ํฉ๋๋ค.
API ์ฐ๋ ๋ฐ ํผ ์ ์ถ ๋ก์ง ๊ตฌํ์ ๋์์ด ํ์ํ์๋ค๋ฉด ์ ๊ฐ ๋์๋๋ฆด ์ ์์ต๋๋ค. GitHub ์ด์๋ฅผ ์์ฑํด๋๋ฆด๊น์?
Line range hint
32-65: ํผ ์ ์ถ ์ฒ๋ฆฌ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํฉ๋๋คํ์ฌ ํผ ์ ์ถ ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๊ตฌํ๋์ด ์์ง ์์ต๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํด ๋ค์ ์ฌํญ๋ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
- ๋ฆฌ๋ทฐ ํ ์คํธ์ ์ต์/์ต๋ ๊ธธ์ด ์ ํ
- ์ ์ ์ ํ ํ์ ์ฌ๋ถ
- ์ ์ถ ์ ํ์ธ ์ ์ฐจ
๋ค์๊ณผ ๊ฐ์ ๊ตฌํ์ ์ ์ํฉ๋๋ค:
+ const { register, handleSubmit, formState: { errors } } = useForm<FormValues>({ + defaultValues: { + reviewText: '', + score: 0 + }, + resolver: zodResolver(reviewSchema) + }); + const onSubmit = async (data: FormValues) => { + try { + // API ํธ์ถ ๋ก์ง + } catch (error) { + // ์๋ฌ ์ฒ๋ฆฌ + } + }; return ( - <form className="flex h-[308px] w-[472px] flex-col justify-between gap-[24px]"> + <form onSubmit={handleSubmit(onSubmit)} className="flex h-[308px] w-[472px] flex-col justify-between gap-[24px]">
Line range hint
41-54: ์คํ์ผ ๊ด๋ฆฌ ๊ฐ์ ์ด ํ์ํฉ๋๋คํ์ฌ ์ธ๋ผ์ธ ์คํ์ผ๊ณผ ํ๋์ฝ๋ฉ๋ ๊ฐ๋ค์ด ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค:
- ๊ณตํต ์คํ์ผ์ ์์ํ
- ํ ๋ง ์์คํ ํ์ฉ
- ๋ฐ์ํ ๋์์ธ ๊ณ ๋ ค
๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ ์ํฉ๋๋ค:
+ const textareaStyles = { + input: { + '::placeholder': { + color: 'var(--gray-400)', + fontWeight: 500, + fontSize: 'var(--font-size-base)', + }, + }, + label: { + fontWeight: 600, + fontSize: 'var(--font-size-base)', + }, + }; <Textarea ... - styles={{ - input: { - '::placeholder': { - color: 'gray - 400', - fontWeight: 500, - fontSize: '1rem', - }, - }, - label: { - fontWeight: 600, - fontSize: '1rem', - }, - }} + styles={textareaStyles} />src/app/(crew)/crew/detail/[id]/edit/page.tsx (2)
Line range hint
18-29: ๋ฐ์ดํฐ ๋ณํ ๋ก์ง ๊ฐ์ ์ด ํ์ํฉ๋๋ค๋ฐ์ดํฐ ๋ณํ ๊ณผ์ ์์ ๋ช ๊ฐ์ง ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ์ด ์์ต๋๋ค:
imageUrl์ ํ์ ์บ์คํ ์ด ์์ ํ์ง ์์ ์ ์์ต๋๋คsubLocation์กฐ๊ฑด๋ถ ๋ก์ง์ด ๋ณต์กํฉ๋๋ค๋ค์๊ณผ ๊ฐ์ ๋ฆฌํฉํ ๋ง์ ์ ์๋๋ฆฝ๋๋ค:
const newData: EditCrewRequestTypes = { title: editedData.title, mainCategory: editedData.mainCategory, subCategory: editedData.subCategory ?? '', - imageUrl: (editedData.imageUrl as string) ?? '', + imageUrl: typeof editedData.imageUrl === 'string' ? editedData.imageUrl : '', - subLocation: editedData.subLocation === '์ ์ฒด' ? '' : (editedData.subLocation ?? ''), + subLocation: editedData.subLocation === '์ ์ฒด' ? '' : editedData.subLocation || '', totalCount: editedData.totalCount, introduce: editedData.introduce, };
Line range hint
31-37: ๋ก๋ฉ ์ํ UI๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋คํ์ฌ ๋ก๋ฉ UI๊ฐ ์ธ๋ผ์ธ์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ฉด ์ฝ๋ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์๋๋ฆฝ๋๋ค:
// components/common/LoadingSpinner.tsx export const LoadingSpinner = () => ( <div className="fixed inset-0 flex items-center justify-center"> <Loader size="sm" /> </div> ); // ํ์ฌ ํ์ผ if (isLoading || isPending) return <LoadingSpinner />;src/components/common/review-list/review-card-list.stories.tsx (2)
Line range hint
31-47: ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋์ ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ฒํ ํด์ฃผ์ธ์.์ฃผ์ ์ฒ๋ฆฌ๋
RenderCrewReviewCardList๊ด๋ จ ์ฝ๋๊ฐ ํฅํ ์ฌ์ฉ๋ ์์ ์ด๋ผ๋ฉด TODO ์ฃผ์์ ์ถ๊ฐํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ถํ์ํ ์ฃผ์ ์ฝ๋๋ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.-// function RenderCrewReviewCardList({ isMine = false, clickable = false }) { -// const { data, ref, isFetchingNextPage } = useInfiniteScroll<ReviewInformResponse>({ -// queryKey: ['review'], -// queryFn: ({ pageParam = 0 }) => fetchCrewReviewData(pageParam, 3), -// getNextPageParam: (lastPage, allPages) => -// lastPage.hasNextPage ? allPages.length + 1 : undefined, -// }); -// return ( -// <ReviewCardList -// data={data} -// ref={ref} -// isMine={isMine} -// clickable={clickable} -// isFetchingNextPage={isFetchingNextPage} -// /> -// ); -// }
Line range hint
49-73: TypeScript ํ์ ์์ ์ฑ์ ๊ฐ์ ํด๋ณด์ธ์.
RenderMyReviewCardListํจ์์ ํ์ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํ ์ ์์ฌํญ์ ๋๋ค:-function RenderMyReviewCardList({ isMine = true, clickable = false }) { +interface RenderMyReviewCardListProps { + isMine?: boolean; + clickable?: boolean; +} + +function RenderMyReviewCardList({ + isMine = true, + clickable = false +}: RenderMyReviewCardListProps): JSX.Element {src/app/(crew)/my-page/_components/profile-card/container.tsx (1)
Line range hint
38-63: ์ฝ๋ ๊ตฌ์กฐ ๊ฐ์ ์ ์ํ์ฌ ํ์ผ ์ ๋ก๋ ๋ก์ง์ด ์ปดํฌ๋ํธ์ ์ง์ ๊ตฌํ๋์ด ์์ด ์ปดํฌ๋ํธ์ ์ฑ ์์ด ๋ค์ ๋ฌด๊ฒ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค:
- ํ์ผ ์ ๋ก๋ ๊ด๋ จ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌ
- ์๋ฌ ์ฒ๋ฆฌ ๋ก์ง ํตํฉ
์์ ๋ฆฌํฉํ ๋ง:
// useProfileImageUpload.ts export const useProfileImageUpload = () => { const { refetch: refetchUser } = useUser(); const uploadImage = async (file: File) => { if (file.size > 5 * 1024 * 1024) { throw new Error('FILE_SIZE_LIMIT'); } await updateUserProfile(file); await refetchUser(); return URL.createObjectURL(file); }; return { uploadImage }; }; // container.tsx const { uploadImage } = useProfileImageUpload(); const handleEdit = () => { const input = document.createElement('input'); input.type = 'file'; input.accept = '.png,.jpg,.jpeg'; input.onchange = async (event) => { const file = (event.target as HTMLInputElement)?.files?.[0]; if (!file) return; try { const tempUrl = await uploadImage(file); setProfileImageUrl(tempUrl); toast.success('ํ๋กํ ์ด๋ฏธ์ง๊ฐ ์ ๋ฐ์ดํธ๋์์ต๋๋ค.'); } catch (error) { if (error.message === 'FILE_SIZE_LIMIT') { toast.error('5MB ์ดํ์ ํ์ผ๋ง ์ ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.'); } else { toast.error('ํ์ผ ์ ๋ก๋์ ์คํจํ์ต๋๋ค.'); } } }; input.click(); };src/components/gathering-list/crew-gathering-list.stories.tsx (1)
Line range hint
58-60: layout ๋งค๊ฐ๋ณ์์ ์คํ๋ฅผ ํ์ธํด์ฃผ์ธ์.
'fulled'๋ ์ผ๋ฐ์ ์ธ Storybook layout ๊ฐ์ด ์๋๋๋ค. ์๋ง๋'fullscreen'๋๋'full'์ ์๋ํ์ ๊ฒ ๊ฐ์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
parameters: { - layout: 'fulled', + layout: 'fullscreen', },src/components/common/gathering-card/gathering-card.stories.tsx (1)
Line range hint
1-99: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ด ์ฒด๊ณ์ ์ผ๋ก ์ ๋์ด์์ต๋๋ค๋ง, ๋ฌธ์ํ๋ฅผ ์ ์๋๋ฆฝ๋๋ค.์๋ก์ด ๋ค์ด๋ฐ ์ปจ๋ฒค์ ๊ณผ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ ๊ฐ์ด๋๋ผ์ธ์ ํ ๋ฌธ์์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ README.md๋ ์คํ ๋ฆฌ๋ถ ๋ฌธ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
- ์คํ ๋ฆฌ๋ถ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ ์ค๋ช
- ์ปดํฌ๋ํธ ๋ค์ด๋ฐ ๊ท์น
- ์คํ ๋ฆฌ ๊ตฌ์ฑ ๋ฐฉ๋ฒ
ํ์ํ์๋ค๋ฉด ๋ฌธ์ ํ ํ๋ฆฟ์ ์ ๊ณตํด๋๋ฆด ์ ์์ต๋๋ค.
src/components/common/input/pop-over-calendar/index.tsx (1)
18-18: ์ํ ๊ด๋ฆฌ ๊ฐ์ ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค!
inputTheme์useState์์ ์์๋ก ๋ณ๊ฒฝํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค:
- ๋ถํ์ํ ์ํ ๊ด๋ฆฌ๊ฐ ์ ๊ฑฐ๋์ด ์ปดํฌ๋ํธ ๋ก์ง์ด ๋จ์ํ๋์์ต๋๋ค
opened์ํ์์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ๋ฅ์ฑ์ด ์ ๊ฑฐ๋์์ต๋๋ค- ์ถ๊ฐ์ ์ธ ๋ ๋๋ง์ด ๋ฐฉ์ง๋์ด ์ฑ๋ฅ์ด ๊ฐ์ ๋์์ต๋๋ค
์ถ๊ฐ์ ์ธ ๊ฐ์ ์ฌํญ์ผ๋ก, ์ด ์์๋ฅผ ์ปดํฌ๋ํธ ์ธ๋ถ๋ก ๋ถ๋ฆฌํ์ฌ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์:
+const getInputTheme = (opened: boolean) => opened ? 'dark' : 'light'; export default function PopOverCalendar({ value, onChange }: PopOverProps) { const [opened, { open, close }] = useDisclosure(); - const inputTheme = opened ? 'dark' : 'light'; + const inputTheme = getInputTheme(opened);src/components/common/input/file-input-wrap/file-input/index.tsx (3)
Line range hint
21-33: ๋๋ฐ์ด์ค ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.ํ์ฌ ์ปดํฌ๋ํธ ๋ด๋ถ์ ๊ตฌํ๋ ๋๋ฐ์ด์ค ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค:
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ํฅ์
- ์ปดํฌ๋ํธ ๋ก์ง ๋จ์ํ
- ํ ์คํธ ์ฉ์ด์ฑ ๊ฐ์
๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์์ต๋๋ค:
// hooks/useDebounce.ts export function useDebounce<T extends (...args: any[]) => void>( callback: T, delay: number ) { const timerRef = useRef<NodeJS.Timeout | null>(null); return useCallback( (...args: Parameters<T>) => { if (timerRef.current) clearTimeout(timerRef.current); timerRef.current = setTimeout(() => callback(...args), delay); }, [callback, delay] ); }
Line range hint
35-47: ํ์ผ ๋ก๋ฉ ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค.ํ์ฌ ํ์ผ ๋ก๋ฉ ์ค ๋ฐ์ํ ์ ์๋ ์๋ฌ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋๋ฝ๋์ด ์์ต๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ธฐ ์ํด ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ์ ์ ์ํฉ๋๋ค:
const handleFileLoad = (file: File) => { if (fileReader) { fileReader.abort(); } const reader = new FileReader(); setFileReader(reader); + reader.onerror = () => { + console.error('ํ์ผ ๋ก๋ฉ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค'); + setPreview(null); + }; + reader.onloadend = () => { setPreview(reader.result as string); }; reader.readAsDataURL(file); };
Line range hint
89-116: ์ ๊ทผ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ฅผ ์ํ ARIA ์์ฑ๊ณผ ํค๋ณด๋ ์ ๊ทผ์ฑ์ด ๋ณด์๋๋ฉด ์ข๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ์ ์ํฉ๋๋ค:
<div className="min-w-1/4 relative flex aspect-square w-1/4 gap-2"> <label htmlFor="item-file" className="flex h-full w-full cursor-pointer flex-col items-center justify-center rounded-xl bg-neutral-100" + role="button" + aria-label="์ด๋ฏธ์ง ํ์ผ ์ ํ" > <figure className="relative flex h-3.5 w-3.5 md:h-5 md:w-5"> <Image fill src={IcoPlus} alt="์ด๋ฏธ์ง ์ถ๊ฐ" + aria-hidden="true" style={{ width: '100%', height: '100%', objectFit: 'cover' }} /> </figure> <span className="text-xs font-medium text-gray-400 md:text-base lg:text-lg"> ์ด๋ฏธ์ง ๋ฑ๋ก </span> </label> <input type="file" accept="image/png, image/jpeg" ref={fileInput} onChange={handleChange} id="item-file" className="hidden" + aria-label="์ด๋ฏธ์ง ํ์ผ ์ ํ" />src/app/(crew)/page.tsx (3)
Line range hint
31-37: ๊ฒ์ ๊ธฐ๋ฅ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค.๊ฒ์ ๋ก์ง์ ๋ํ ๊ฐ์ ์ฌํญ์ ์ ์๋๋ฆฝ๋๋ค:
- ๋๋ฐ์ด์ฑ ์ถ๊ฐ๋ก ์ฑ๋ฅ ์ต์ ํ
- ์นดํ ๊ณ ๋ฆฌ ์ด๊ธฐํ ๋ก์ง์ ๋ณ๋ ํจ์๋ก ๋ถ๋ฆฌ
+const resetCategories = () => { + setMainCategory(''); + setSubCategory(''); +}; + +const debouncedSearch = useCallback( + debounce((value: string) => { + resetCategories(); + setSearch(value); + }, 300), + [] +); + const handleSearch = () => { if (searchRef.current) { - setMainCategory(''); - setSubCategory(''); - setSearch(searchRef.current.value); + debouncedSearch(searchRef.current.value); } };
Line range hint
128-128: ์๋ฌ ์ฒ๋ฆฌ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.ํ์ฌ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ๋จ์ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค:
- ๊ตฌ์ฒด์ ์ธ ์๋ฌ ๋ฉ์์ง ํ์
- ์ฌ์๋ ๋ฒํผ ์ถ๊ฐ
- ์๋ฌ ๋ก๊น ์ถ๊ฐ
-{error && <p className="py-10 text-center">์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.</p>} +{error && ( + <div className="flex flex-col items-center py-10"> + <p className="text-center text-red-500">๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.</p> + <button + onClick={() => window.location.reload()} + className="mt-4 rounded-md bg-primary px-4 py-2 text-white" + > + ๋ค์ ์๋ํ๊ธฐ + </button> + </div> +)}
Line range hint
108-122: ์ ๊ทผ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.๋๋กญ๋ค์ด ์ปดํฌ๋ํธ์ ์ ๊ทผ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ค์ ์ฌํญ์ ์ ์๋๋ฆฝ๋๋ค:
- aria-label ์ถ๊ฐ
- ํค๋ณด๋ ๋ค๋น๊ฒ์ด์ ์ง์
<DropDown name="region" variant="default" + aria-label="์ง์ญ ์ ํ" data={regionData.map((dataItem) => dataItem.main)} placeholder="์ง์ญ ์ ์ฒด" value={region} className="w-[130px]" onChange={(newValue) => { setRegion(newValue as string); }} />src/stories/Configure.mdx (4)
46-47: ์ด๋ฏธ์ง ์ ๊ทผ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.alt ํ ์คํธ๊ฐ ์ด๋ฏธ์ง์ ๋ด์ฉ์ ์ถฉ๋ถํ ์ค๋ช ํ์ง ๋ชปํ๊ณ ์์ต๋๋ค. ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ์์ธํ ์ค๋ช ์ ์ถ๊ฐํด์ฃผ์ธ์.
-alt="component based development" +alt="์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ" -alt="An abstraction representing the composition of data for a component" +alt="์ปจํ ์ด๋/ํ๋ ์ ํ ์ด์ ๋ ํจํด์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ ๋ค์ด์ด๊ทธ๋จ"Also applies to: 61-62
77-80: ๋งํฌ ์ ๊ทผ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.์ธ๋ถ ๋งํฌ์์ ๋ช ์์ ์ผ๋ก ํ์ํ๊ณ , ๋งํฌ ํ ์คํธ๋ฅผ ๋ ์ค๋ช ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ์ธ์.
-<a href="https://crewcrew.vercel.app/" target="_blank">https://crewcrew.vercel.app/<RightArrow /></a> +<a href="https://crewcrew.vercel.app/" target="_blank" rel="noopener noreferrer" aria-label="ํฌ๋ฃจํฌ๋ฃจ ์น์ฌ์ดํธ ๋ฐฉ๋ฌธํ๊ธฐ (์ ์ฐฝ์์ ์ด๋ฆผ)"> + ํฌ๋ฃจํฌ๋ฃจ ์น์ฌ์ดํธ ๋ฐฉ๋ฌธํ๊ธฐ <RightArrow /> +</a>
Line range hint
89-143: ๊ธฐ๋ฅ ์ค๋ช ์ฉ ์ด๋ฏธ์ง ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.ํ์ฌ Storybook ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ค์ ํฌ๋ฃจํฌ๋ฃจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๊ธฐ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์คํฌ๋ฆฐ์ท์ผ๋ก ๊ต์ฒดํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค.
๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ค์๊ณผ ๊ฐ์ ์ค์ ์คํฌ๋ฆฐ์ท์ ์ถ๊ฐํด์ฃผ์ธ์:
- ํฌ๋ฃจ ์ฐพ๊ธฐ ํ๋ฉด
- ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํ๋ฉด
- ํฌ๋ฃจ ์์ธ ํ์ด์ง
- ์ฝ์ ๋ง๋ค๊ธฐ ํ๋ฉด
- ๋ง์ด ํ์ด์ง
- ํ๋กํ ๊ด๋ฆฌ ํ๋ฉด
Line range hint
191-211: ์์ ๋งํฌ ๋ณด์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.์ธ๋ถ ๋งํฌ์ ๋ณด์ ์์ฑ์ ์ถ๊ฐํ๊ณ , ๋งํฌ ํ ์คํธ๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋ค์ด์ฃผ์ธ์.
-<a href="https://github.com/CodeitFESI4-Team1/Team-1-Codeit" target="_blank"> +<a + href="https://github.com/CodeitFESI4-Team1/Team-1-Codeit" + target="_blank" + rel="noopener noreferrer" + aria-label="ํฌ๋ฃจํฌ๋ฃจ GitHub ์ ์ฅ์ ๋ฐฉ๋ฌธํ๊ธฐ (์ ์ฐฝ์์ ์ด๋ฆผ)" +> -๋ฐ๋ก๊ฐ๊ธฐ<RightArrow /> +GitHub ์ ์ฅ์ ๋ฐฉ๋ฌธํ๊ธฐ<RightArrow /> </a> -<a href="https://www.youtube.com/watch?v=8qhzx36ljDM" target="_blank"> +<a + href="https://www.youtube.com/watch?v=8qhzx36ljDM" + target="_blank" + rel="noopener noreferrer" + aria-label="ํฌ๋ฃจํฌ๋ฃจ ๋ฐ๋ชจ ์์ ๋ณด๊ธฐ (์ ์ฐฝ์์ ์ด๋ฆผ)" +> -๋ฐ๋ก๊ฐ๊ธฐ<RightArrow /> +๋ฐ๋ชจ ์์ ๋ณด๊ธฐ<RightArrow /> </a>
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
๐ Files selected for processing (56)
.storybook/main.ts(1 hunks).storybook/preview.tsx(1 hunks)src/_apis/crew/crew.ts(0 hunks)src/_apis/image/get-image-url.ts(0 hunks)src/app/(auth)/login/_component/login-form.stories.tsx(1 hunks)src/app/(auth)/signup/_component/signup-form.stories.tsx(1 hunks)src/app/(crew)/_components/category/internal-category/internal-category.stories.tsx(1 hunks)src/app/(crew)/crew/create/_components/create-crew-form/create-crew-form.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/create-gathering-form.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/crew-review-list.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/detail-crew.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/gathering-detail-modal.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/rating-display.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/review-section.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/edit/page.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/page.tsx(1 hunks)src/app/(crew)/my-crew/hosted/page.tsx(0 hunks)src/app/(crew)/my-crew/joined/page.tsx(0 hunks)src/app/(crew)/my-page/_components/profile-card/container.tsx(2 hunks)src/app/(crew)/page.tsx(1 hunks)src/components/common/crew-list/crew-card-list.stories.tsx(1 hunks)src/components/common/crew-list/crew-card.tsx(0 hunks)src/components/common/crew-list/profiles.stories.tsx(1 hunks)src/components/common/gathering-card/gathering-card.stories.tsx(1 hunks)src/components/common/gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx(1 hunks)src/components/common/header/header.stories.tsx(1 hunks)src/components/common/input/button/button.stories.tsx(1 hunks)src/components/common/input/button/floating-btn.stories.tsx(1 hunks)src/components/common/input/button/like-btn.stories.tsx(1 hunks)src/components/common/input/calendar-filter/calendar-filter.stories.tsx(1 hunks)src/components/common/input/date-time-picker/date-time-picker.stories.tsx(1 hunks)src/components/common/input/drop-down/drop-down.stories.tsx(1 hunks)src/components/common/input/file-input-wrap/file-input/file-input.stories.tsx(1 hunks)src/components/common/input/file-input-wrap/file-input/index.tsx(1 hunks)src/components/common/input/file-input-wrap/file-sample/file-sample.stories.tsx(2 hunks)src/components/common/input/file-input-wrap/file-sample/index.tsx(1 hunks)src/components/common/input/password-input/password-input.stories.tsx(1 hunks)src/components/common/input/pop-over-calendar/index.tsx(1 hunks)src/components/common/input/text-input/text-input.stories.tsx(1 hunks)src/components/common/input/textarea/textarea.stories.tsx(1 hunks)src/components/common/profile/Profile.stories.tsx(1 hunks)src/components/common/progress-bar/progress-bar.stories.tsx(1 hunks)src/components/common/review-list/review-card-list.stories.tsx(1 hunks)src/components/common/tab/tab.stories.tsx(1 hunks)src/components/common/toast/toast.stories.tsx(1 hunks)src/components/common/writable-gathering-card/writable-gathering-card-list.stories.tsx(1 hunks)src/components/gathering-list/crew-gathering-list.stories.tsx(1 hunks)src/components/gathering-list/gathering-list.stories.tsx(1 hunks)src/components/gathering-list/liked-list-presenter.tsx(1 hunks)src/components/my-page/reviewing-modal/review-form.tsx(1 hunks)src/components/my-page/reviewing-modal/reviewing-modal.stories.tsx(1 hunks)src/stories/Configure.mdx(11 hunks)src/types/create-crew.d.ts(0 hunks)src/types/gathering-data.d.ts(0 hunks)
๐ค Files with no reviewable changes (9)
- src/_apis/crew/crew.ts
- src/_apis/image/get-image-url.ts
- src/app/(crew)/my-crew/hosted/page.tsx
- src/app/(crew)/my-crew/joined/page.tsx
- src/components/common/crew-list/crew-card.tsx
- src/components/common/gathering-card/presenter.tsx
- src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx
- src/types/create-crew.d.ts
- src/types/gathering-data.d.ts
โ Files skipped from review due to trivial changes (21)
- src/app/(auth)/login/_component/login-form.stories.tsx
- src/app/(auth)/signup/_component/signup-form.stories.tsx
- src/app/(crew)/_components/category/internal-category/internal-category.stories.tsx
- src/app/(crew)/crew/create/_components/create-crew-form/create-crew-form.stories.tsx
- src/app/(crew)/crew/detail/[id]/_components/detail-crew.stories.tsx
- src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/gathering-detail-modal.stories.tsx
- src/app/(crew)/crew/detail/[id]/_components/review-section.tsx
- src/app/(crew)/crew/detail/[id]/page.tsx
- src/components/common/crew-list/profiles.stories.tsx
- src/components/common/input/button/floating-btn.stories.tsx
- src/components/common/input/button/like-btn.stories.tsx
- src/components/common/input/file-input-wrap/file-sample/index.tsx
- src/components/common/input/password-input/password-input.stories.tsx
- src/components/common/input/text-input/text-input.stories.tsx
- src/components/common/input/textarea/textarea.stories.tsx
- src/components/common/profile/Profile.stories.tsx
- src/components/common/progress-bar/progress-bar.stories.tsx
- src/components/common/tab/tab.stories.tsx
- src/components/common/toast/toast.stories.tsx
- src/components/common/writable-gathering-card/writable-gathering-card-list.stories.tsx
- src/components/my-page/reviewing-modal/reviewing-modal.stories.tsx
๐ Additional comments (32)
.storybook/main.ts (1)
16-18: ์ํ๋ฒณ์ ์ ๋ ฌ ๋ฐฉ์์ด ์ ์ ํ ์ ์ฉ๋์์ต๋๋ค.
์คํ ๋ฆฌ๋ถ์ ์คํ ๋ฆฌ๋ค์ ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌํ๋ ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
src/components/common/input/date-time-picker/date-time-picker.stories.tsx (1)
7-7: ์ปดํฌ๋ํธ ์นดํ
๊ณ ๋ฆฌ ๋ณ๊ฒฝ์ด ์ ์ ํด ๋ณด์
๋๋ค.
์ปดํฌ๋ํธ์ ์ฑ๊ฒฉ์ ๊ณ ๋ คํ ๋ 'common/calendar' ์นดํ ๊ณ ๋ฆฌ๋ก์ ์ด๋์ด ๋ ์ง๊ด์ ์ ๋๋ค.
๋ค๋ฅธ ์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์นดํ ๊ณ ๋ฆฌ๋ ์ผ๊ด์ฑ ์๊ฒ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค:
โ Verification successful
์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์นดํ ๊ณ ๋ฆฌ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ์ ์ฉ๋์์ต๋๋ค
์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค(date-time-picker์ calendar-filter)์ด ๋ชจ๋ common/calendar ์นดํ
๊ณ ๋ฆฌ๋ก ํต์ผ๋์ด ์์ด ์ผ๊ด์ฑ์ด ์ ์ ์ง๋๊ณ ์์ต๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ์บ๋ฆฐ๋ ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ ์นดํ
๊ณ ๋ฆฌ ํ์ธ
# ์บ๋ฆฐ๋ ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ํ์ผ ๊ฒ์
rg -l "title.*calendar" --type ts
Length of output: 181
Script:
#!/bin/bash
# Check the actual title values in the found story files
rg "title:.*" src/components/common/input/calendar-filter/calendar-filter.stories.tsx src/components/common/input/date-time-picker/date-time-picker.stories.tsx
Length of output: 396
src/components/common/input/button/button.stories.tsx (1)
5-5: ์คํ ๋ฆฌ๋ถ ํ์ดํ ๊ตฌ์กฐ๊ฐ ๊ฐ์ ๋์์ต๋๋ค.
์ปดํฌ๋ํธ์ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋ช ํํด์ ธ ์คํ ๋ฆฌ๋ถ ์ฌ์ด๋๋ฐ์์ ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ๋์์ต๋๋ค.
.storybook/preview.tsx (1)
28-43: ์คํ ๋ฆฌ๋ถ ์ ๋ ฌ ๊ตฌ์ฑ์ด ์ ๋์ด์์ต๋๋ค!
์ํ๋ฒณ์ ์ ๋ ฌ๊ณผ ์นดํ ๊ณ ๋ฆฌ๋ณ ๊ตฌ๋ถ์ด ๋ช ํํ๊ฒ ์ค์ ๋์ด ์์ด ์คํ ๋ฆฌ๋ถ ๋ค๋น๊ฒ์ด์ ์ด ๋์ฑ ์ง๊ด์ ์ผ ๊ฒ ๊ฐ์ต๋๋ค.
src/components/common/header/header.stories.tsx (2)
1-3: ๋ถํ์ํ ์ํฌํธ ์ ๊ฑฐ ์น์ธ
์ฌ์ฉํ์ง ์๋ useState์ useAuth ์ํฌํธ๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋๊ฐ ๋ ๊น๋ํด์ก์ต๋๋ค.
6-6: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ์ผ๊ด์ฑ ํ์ธ ํ์
'layout/header'๋ก์ ํ์ดํ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ๊ณผ ์ผ์นํ๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
โ Verification successful
Based on the search results, I can now generate the final response as we have sufficient information about the Storybook title patterns in the codebase.
์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค
'layout/header' ํ์ดํ์ ๋ค๋ฅธ ๋ ์ด์์ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ๋ค์ด๋ฐ ํจํด๊ณผ ์ผ์นํฉ๋๋ค:
- 'layout/category'
- 'layout/tabs'
- 'layout/header'
๋ํ ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์คํ ๋ฆฌ๋ถ ํ์ดํ์ด ์ผ๊ด๋ ํจํด์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค:
- common/* (๊ณตํต ์ปดํฌ๋ํธ)
- layout/* (๋ ์ด์์ ์ปดํฌ๋ํธ)
- crew/* (ํฌ๋ฃจ ๊ด๋ จ ์ปดํฌ๋ํธ)
- gathering/* (๋ชจ์ ๊ด๋ จ ์ปดํฌ๋ํธ)
- auth/* (์ธ์ฆ ๊ด๋ จ ์ปดํฌ๋ํธ)
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ๋ค๋ฅธ ์คํ ๋ฆฌ ํ์ผ๋ค์ ํ์ดํ ํจํด ํ์ธ
# ๋ชจ๋ ์คํ ๋ฆฌ ํ์ผ์์ title ํจํด ๊ฒ์
rg "title: '[^']*'" -g "*.stories.tsx"
Length of output: 6853
src/app/(crew)/crew/detail/[id]/_components/crew-review-list.stories.tsx (1)
9-9: ์คํ ๋ฆฌ๋ถ ํ์ดํ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ๋์์ต๋๋ค!
์คํ ๋ฆฌ ํ์ดํ์ 'crew/crew-review-list'๋ก ๋ณ๊ฒฝํ ๊ฒ์ด ์ ์ฒด์ ์ธ ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ๋ฐฉํฅ๊ณผ ์ ๋ง์ต๋๋ค. ์ด๋ฌํ ๊ฐ๋จํ๊ณ ์ผ๊ด๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์
์ ์คํ ๋ฆฌ๋ถ ๋ค๋น๊ฒ์ด์
์ ๋์ฑ ์ง๊ด์ ์ผ๋ก ๋ง๋ค์ด์ค ๊ฒ ๊ฐ์ต๋๋ค.
src/components/common/input/file-input-wrap/file-sample/file-sample.stories.tsx (1)
8-8: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ๋์์ต๋๋ค.
์ปดํฌ๋ํธ์ ์ฑ๊ฒฉ์ ๋ง๊ฒ 'common/image' ์นดํ ๊ณ ๋ฆฌ๋ก ์ด๋ํ ๊ฒ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๋ค๋ฅธ ์ด๋ฏธ์ง ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์นดํ ๊ณ ๋ฆฌ๋ ์ผ๊ด์ฑ ์๊ฒ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค:
โ Verification successful
์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ์ ๋ฆฌ๋์์ต๋๋ค
์ด๋ฏธ์ง ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ๋ชจ๋ 'common/image' ์นดํ ๊ณ ๋ฆฌ๋ก ํต์ผ๋์ด ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค:
- image-sample: common/image/image-sample
- image-input: common/image/image-input
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ์ด๋ฏธ์ง ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ title ํ์ธ
rg "title.*image" -g "*.stories.tsx"
Length of output: 271
Script:
#!/bin/bash
# Description: ์ด๋ฏธ์ง ๊ด๋ จ ์ปดํฌ๋ํธ์ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ ๋ชจ๋ ์ฐพ์์ title ๊ตฌ์กฐ ํ์ธ
fd -e stories.tsx -x cat {} | rg "title:"
# Description: ํ์ผ ๊ตฌ์กฐ ํ์ธ์ ์ํด ์ด๋ฏธ์ง ๊ด๋ จ ์ปดํฌ๋ํธ ๋๋ ํ ๋ฆฌ ๊ฒ์
fd -t d "image|file" -d 3
Length of output: 2225
src/components/common/input/file-input-wrap/file-input/file-input.stories.tsx (1)
7-7: ์ปดํฌ๋ํธ ๋ถ๋ฅ์ ์ด๋ฆ์ ์ผ๊ด์ฑ ๊ฒํ ํ์
์ปดํฌ๋ํธ์ ๋ฌผ๋ฆฌ์ ์์น(input ๋๋ ํ ๋ฆฌ), ์ด๋ฆ(FileInput), ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ์คํ ๋ฆฌ๋ถ ์นดํ ๊ณ ๋ฆฌ(image) ๊ฐ์ ๋ถ์ผ์น๊ฐ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์๊ฒ ํผ๋์ ์ค ์ ์์ต๋๋ค.
๋ค์ ์ฌํญ๋ค์ ๊ณ ๋ คํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค:
- ์ปดํฌ๋ํธ๊ฐ ์ค์ ๋ก ์ด๋ฏธ์ง ๊ด๋ จ ๊ธฐ๋ฅ์ ํนํ๋์ด ์๋ค๋ฉด, ์ปดํฌ๋ํธ ์ด๋ฆ์
ImageInput์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ ์ ์์ต๋๋ค. - ํน์ ์ด๋ฏธ์ง ๊ด๋ จ ์ปดํฌ๋ํธ๋ผ๋ฉด ๋ฌผ๋ฆฌ์ ์์น๋
src/components/common/image๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ ์ ์์ต๋๋ค.
src/components/common/crew-list/crew-card-list.stories.tsx (1)
9-9: ์คํ ๋ฆฌ๋ถ ํ์ดํ ๋ณ๊ฒฝ์ด ์ ์ ํฉ๋๋ค.
์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋จ์ํ๋์ด ๋ ๋ช ํํด์ก์ผ๋ฉฐ, ์ผ๊ด๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
src/components/common/input/drop-down/drop-down.stories.tsx (1)
7-7: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค!
์ปดํฌ๋ํธ ๊ฒฝ๋ก๊ฐ ๋จ์ํ๋์ด ๋ ๋ช ํํ๊ณ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
src/app/(crew)/crew/detail/[id]/_components/create-gathering/create-gathering-form/create-gathering-form.stories.tsx (1)
17-17: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค.
์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฅ ์ค์ฌ์ผ๋ก ๋ถ๋ฅํ ๊ฒ์ด ๋ ์ง๊ด์ ์ ๋๋ค. ๋ค๋ฅธ gathering ๊ด๋ จ ์ปดํฌ๋ํธ๋ค๋ ๋์ผํ ์นดํ ๊ณ ๋ฆฌ๋ก ์ด๋ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค๋ฅธ gathering ๊ด๋ จ ์คํ ๋ฆฌ์ ์ผ๊ด์ฑ์ ํ์ธํ๊ธฐ ์ํด ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค:
โ Verification successful
์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋ชจ๋ gathering ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด 'gathering/' ๋ค์์คํ์ด์ค ์๋ ์ ์ ๋ฆฌ๋์ด ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค:
- gathering/create-gathering-form
- gathering/gathering-detail-modal
- gathering/gathering-card
- gathering/scheduled-gathering-card
- gathering/writable-gathering-card-list
- gathering/liked-gathering-card
๋จ, crew-gathering-list๋ง 'crew/' ๋ค์์คํ์ด์ค์ ์์ง๋ง, ์ด๋ crew ์น์ ์ ํนํ๋ ์ปดํฌ๋ํธ์ด๋ฏ๋ก ํ์ฌ ์์น๊ฐ ์ ์ ํฉ๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: gathering ๊ด๋ จ ์คํ ๋ฆฌ์ title ๊ตฌ์กฐ ํ์ธ
# gathering ๊ด๋ จ ์คํ ๋ฆฌ ํ์ผ ๊ฒ์
rg -l "title: ['|\"].*gathering.*['|\"]" "*.stories.tsx"
Length of output: 116
Script:
#!/bin/bash
# Search for all .stories.tsx files in the repository
fd ".stories.tsx$"
# Then search for gathering-related story titles
rg -l "title: ['|\"].*gathering.*['|\"]" $(fd ".stories.tsx$")
Length of output: 5266
Script:
#!/bin/bash
# Get content of files containing gathering in their story titles
rg "title: ['|\"].*gathering.*['|\"]" -A 5 $(fd ".stories.tsx$")
Length of output: 7006
src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx (1)
6-6: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค! ๐
์ปดํฌ๋ํธ ์นดํ ๊ณ ๋ฆฌ๋ฅผ 'gathering'์ผ๋ก ์ด๋์ํจ ๊ฒ์ด ์ข์ ํ๋จ์ด์์ต๋๋ค. ์ด๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ํด์ฃผ๊ณ , ์ ์ฒด์ ์ธ ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ๋ฅผ ๋ ์ง๊ด์ ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.
src/components/common/input/calendar-filter/calendar-filter.stories.tsx (2)
Line range hint 1-67: ์ ๋ฐ์ ์ธ ๊ตฌํ์ด ์ ๋์ด์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฐ์ํ ๊ตฌํ ์ฌํญ๋ค์ด ํ์ธ๋ฉ๋๋ค:
- ํ ์คํธ๋ฅผ ์ํ ๋ชฉ ๋ฐ์ดํฐ๊ฐ ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค
- ์ํ ๊ด๋ฆฌ๊ฐ ์ ์ ํ ๊ตฌํ๋์ด ์์ต๋๋ค
- ํ๋ ์ด ํจ์์์ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ์ ๋์ด ์์ต๋๋ค
- ๋ฌธ์ํ๊ฐ ๋ช ํํ๊ฒ ๋์ด ์์ต๋๋ค
15-15: ์ปดํฌ๋ํธ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ์ ์ ํด ๋ณด์
๋๋ค.
์คํ ๋ฆฌ๋ถ ์ปดํฌ๋ํธ์ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ 'common/calendar'๋ก ๋ณ๊ฒฝํ ๊ฒ์ด ๋ ์ง๊ด์ ์ด๊ณ ๋ ผ๋ฆฌ์ ์ ๋๋ค.
๋ค๋ฅธ ์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ๊ตฌ์กฐ๋ ์ผ๊ด์ฑ ์๊ฒ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค:
โ Verification successful
์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
๊ฒ์ฆ ๊ฒฐ๊ณผ, ๋ชจ๋ ์บ๋ฆฐ๋ ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ์ปดํฌ๋ํธ๋ค์ด 'common/calendar' ์นดํ ๊ณ ๋ฆฌ ์๋์ ์ผ๊ด๋๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค:
- date-time-picker:
common/calendar/date-time-picker - calendar-filter:
common/calendar/calendar-filter
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ์บ๋ฆฐ๋ ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ title ์์ฑ ํ์ธ
# ๋ชจ๋ ์คํ ๋ฆฌ๋ถ ํ์ผ์์ calendar ๊ด๋ จ title ๊ฒ์
rg "title.*calendar" -g "*.stories.tsx"
Length of output: 276
src/app/(crew)/crew/detail/[id]/_components/rating-display.stories.tsx (3)
6-6: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ด ์ผ๊ด์ฑ์๊ฒ ๊ฐ์ ๋์์ต๋๋ค.
์คํ ๋ฆฌ ์ ๋ชฉ์ด 'crew/crew-rating-display'๋ก ๋ณ๊ฒฝ๋์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค๊ณผ ์ผ๊ด๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
Line range hint 21-25: Template ํจ์์ ํ์
์์ ์ฑ์ด ํฅ์๋์์ต๋๋ค.
StoryFn<RatingDisplayStoryProps> ํ์
์ ๋ช
์์ ์ผ๋ก ์ ์ํ์ฌ ํ์
์์ ์ฑ์ด ๊ฐ์ ๋์์ต๋๋ค. ์ด๋ TypeScript์ ์ฅ์ ์ ์ ํ์ฉํ ์ข์ ์ฌ๋ก์
๋๋ค.
-const Template = function Template(args) {
+const Template: StoryFn<RatingDisplayStoryProps> = function Template(args) {6-6: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ ์ผ๊ด์ฑ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค.
๋ค๋ฅธ ์คํ ๋ฆฌ ํ์ผ๋ค๋ ๊ฐ์ ๋ค์ด๋ฐ ํจํด์ ๋ฐ๋ฅด๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
โ Verification successful
์คํ ๋ฆฌ๋ถ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์คํ ๋ฆฌ๋ถ์ title ํจํด์ ๋ถ์ํ ๊ฒฐ๊ณผ, ๋ค์๊ณผ ๊ฐ์ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ํ์ธํ์ต๋๋ค:
- ๊ณตํต ์ปดํฌ๋ํธ:
common/*(์:common/button/button,common/input/text-input) - ํฌ๋ฃจ ๊ด๋ จ:
crew/*(์:crew/crew-profiles,crew/crew-detail) - ๋ชจ์ ๊ด๋ จ:
gathering/*(์:gathering/gathering-card,gathering/scheduled-gathering-card) - ์ธ์ฆ ๊ด๋ จ:
auth/*(์:auth/login-form,auth/signup-form) - ๋ ์ด์์ ๊ด๋ จ:
layout/*(์:layout/header,layout/tabs) - ๋ฆฌ๋ทฐ ๊ด๋ จ:
review/*(์:review/review-modal,review/review-card-list)
ํด๋น ํ์ผ์ crew/crew-rating-display ๋ค์ด๋ฐ๋ ์ด ํจํด์ ์ ํํ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ์คํ ๋ฆฌ๋ถ ํ์ผ์ title ์์ฑ ๊ฒ์ฌ
# crew ๊ด๋ จ ์คํ ๋ฆฌ ํ์ผ๋ค์ title ํจํด ํ์ธ
rg -l "title:" . | grep "stories\.[jt]sx\?$" | xargs rg "title: '.*?'"
Length of output: 7018
src/components/gathering-list/liked-list-presenter.tsx (1)
21-21: ๋ถํ์ํ pageSize ์ ๊ฑฐ ์น์ธ
์ฌ์ฉ๋์ง ์๋ pageSize ์์ฑ์ ์ ๊ฑฐํ ๊ฒ์ ์ฝ๋ ์ ๋ฆฌ ์ธก๋ฉด์์ ์ ์ ํ ๋ณ๊ฒฝ์
๋๋ค. ์ปดํฌ๋ํธ ๋ก์ง์์ ํด๋น ์์ฑ์ด ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก, ์ด๋ ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ฒ ๋ง๋ญ๋๋ค.
src/app/(crew)/crew/detail/[id]/edit/page.tsx (1)
Line range hint 38-52: ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค
์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ props ์ ๋ฌ์ด ๊น๋ํ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค. CreateCrewForm์ ์ฌ์ฌ์ฉํ์ฌ edit ๋ชจ๋๋ก ํ์ฉํ๋ ๋ฐฉ์์ด ํจ์จ์ ์ ๋๋ค.
src/components/common/review-list/review-card-list.stories.tsx (1)
9-9: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ด ๊ฐ์ ๋์์ต๋๋ค!
์ปดํฌ๋ํธ ์นดํ ๊ณ ๋ฆฌ๊ฐ 'components/ReviewCardList'์์ 'review/review-card-list'๋ก ๋ณ๊ฒฝ๋์ด ๋ ๋ช ํํ๊ณ ์ฒด๊ณ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
src/app/(crew)/my-page/_components/profile-card/container.tsx (2)
Line range hint 6-10: ๋ถํ์ํ import ์ ๊ฑฐ์ ๋ํ ์น์ธ
fetchUpdatedUser import๋ฅผ ์ ๊ฑฐํ๊ณ useUser ์ฟผ๋ฆฌ์ refetch ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ธ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. ์บ์ ๊ด๋ฆฌ๊ฐ ๋ ์ ์ด๋ฃจ์ด์ง ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
49-49: ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์ ๊ฐ์ ์ ๋ํ ์น์ธ
alert ๋์ toast ์๋ฆผ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ์ผ๊ด์ฑ์ด ์ ์ง๋๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์ ๋์์ต๋๋ค.
src/components/gathering-list/crew-gathering-list.stories.tsx (1)
56-56: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ ์ผ๊ด์ฑ ๊ฐ์ ์ด ํ์ธ๋์์ต๋๋ค.
์ปดํฌ๋ํธ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ ๋ช ํํ๊ณ ์ผ๊ด๋ ํํ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
src/components/common/gathering-card/gathering-card.stories.tsx (1)
8-8: ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ ๊ฐ์ ์ด ์ ์ด๋ฃจ์ด์ก์ต๋๋ค.
์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ 'gathering' ์นดํ ๊ณ ๋ฆฌ๋ก ๋ช ํํ๊ฒ ์ ๋ฆฌ๋์์ต๋๋ค.
๋ค๋ฅธ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ ์ผ๊ด์ฑ์ ํ์ธํ๊ธฐ ์ํด ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค:
โ Verification successful
์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ๊ฐ ์ผ๊ด๋๊ฒ ์ ๋ฆฌ๋์์์ ํ์ธํ์ต๋๋ค.
๊ฒ์ฆ ๊ฒฐ๊ณผ, ๋ชจ๋ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ด ์๋ก์ด ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค:
- ๊ณตํต ์ปดํฌ๋ํธ:
common/* - ๋ชจ์ ๊ด๋ จ:
gathering/* - ํฌ๋ฃจ ๊ด๋ จ:
crew/* - ๋ ์ด์์:
layout/* - ์ธ์ฆ:
auth/* - ๋ฆฌ๋ทฐ:
review/*
'gathering-card' ์ปดํฌ๋ํธ์ ํ์ดํ ๋ณ๊ฒฝ์ด ์ ์ฒด ์คํ ๋ฆฌ๋ถ ๊ตฌ์กฐ์ ์ ์ด์ธ๋ฆฝ๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# ์คํ ๋ฆฌ๋ถ ํ์ดํ ๋ค์ด๋ฐ ์ปจ๋ฒค์
์ผ๊ด์ฑ ํ์ธ
rg -t typescript "title: ['\"](Components|gathering)/" "src/**/*.stories.tsx"
Length of output: 116
Script:
#!/bin/bash
# Search for title patterns in stories files without file type restriction
rg "title: ['\"].*['\"]" "src/**/*.stories.tsx"
Length of output: 114
Script:
#!/bin/bash
# First find story files then search for title patterns
fd ".stories.tsx$" | xargs rg "title: ['\"].*['\"]"
Length of output: 6861
src/components/common/input/file-input-wrap/file-input/index.tsx (1)
Line range hint 1-6: ์ํฌํธ ๊ตฌ๋ฌธ์ด ๊น๋ํ๊ฒ ์ ๋ฆฌ๋์์ต๋๋ค!
๋ถํ์ํ ํ์ ์ํฌํธ๊ฐ ์ ๊ฑฐ๋์ด ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ก์ต๋๋ค.
src/app/(crew)/page.tsx (2)
Line range hint 5-15: ์ํฌํธ ๊ตฌ์กฐ๊ฐ ๊ฐ์ ๋์์ต๋๋ค!
์ผ๋ฐ์ ์ธ Loader์ Skeleton ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๊ณ ํนํ๋ CrewSkeletonList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ช
ํํ๊ณ ์ผ๊ด๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค.
Line range hint 123-127: ๋ก๋ฉ ์ํ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์์ต๋๋ค!
CrewSkeletonList๋ฅผ ์ฌ์ฉํ ๋ก๋ฉ ์ํ ์ฒ๋ฆฌ๊ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ๋ฌดํ ์คํฌ๋กค๊ณผ ์ด๊ธฐ ๋ก๋ฉ ์ํ๋ฅผ ๋ชจ๋ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค.
src/components/gathering-list/gathering-list.stories.tsx (2)
Line range hint 31-206: ํ
์คํธ ๋ฐ์ดํฐ๊ฐ ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋ค์ํ ์ผ์ด์ค(1๊ฐ, 3๊ฐ, 5๊ฐ, 7๊ฐ ์์ดํ )์ ๋ํ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์ปดํฌ๋ํธ์ ๋ค์ํ ์ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ ์คํธํ ์ ์์ต๋๋ค.
10-10: ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ ์ผ๊ด์ฑ ํ์ธ์ด ํ์ํฉ๋๋ค.
์ปดํฌ๋ํธ title์ 'gathering/liked-gathering-card'๋ก ๋ณ๊ฒฝํ ๊ฒ์ ์ ์ ํด ๋ณด์ ๋๋ค. ๋ค๋ง, ๋ค๋ฅธ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ๊ณผ ์ผ๊ด์ฑ์ด ์ ์ง๋๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ๋ค๋ฅธ gathering ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ ํ์ธํด๋ณด์ธ์:
โ Verification successful
์คํ ๋ฆฌ๋ถ ๊ตฌ์ฑ์ด ์ผ๊ด์ฑ ์๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค.
๋ชจ๋ gathering ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ ์คํ ๋ฆฌ๋ถ title์ด 'gathering/' ๋ค์์คํ์ด์ค ์๋ ์ผ๊ด๋๊ฒ ๊ตฌ์ฑ๋์ด ์์์ ํ์ธํ์ต๋๋ค:
- gathering/liked-gathering-card
- gathering/gathering-card
- gathering/scheduled-gathering-card
- gathering/writable-gathering-card-list
- gathering/create-gathering-form
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ๋ค๋ฅธ gathering ๊ด๋ จ ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ title ๊ตฌ์ฑ ํ์ธ
# gathering ๊ด๋ จ ์คํ ๋ฆฌ ํ์ผ ๊ฒ์
rg -l "title.*gathering" "src/**/*.stories.tsx"
# title ์ค์ ํจํด ํ์ธ
rg "title:.*gathering.*'" "src/**/*.stories.tsx"
Length of output: 225
Script:
#!/bin/bash
# Let's try a different approach to find story files and their titles
# First, find all story files
fd ".stories.tsx$"
# Then check for title patterns in these files
rg "title:" --type tsx
Length of output: 2359
Script:
#!/bin/bash
# Let's check the content of gathering related story files we found
# Check content of the gathering-list stories
cat src/components/gathering-list/gathering-list.stories.tsx
# Check content of gathering card stories
cat src/components/common/gathering-card/gathering-card.stories.tsx
cat src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx
cat src/components/common/writable-gathering-card/writable-gathering-card-list.stories.tsx
# Check content of gathering form stories
cat src/app/\(crew\)/crew/detail/\[id\]/_components/create-gathering/create-gathering-form/create-gathering-form.stories.tsx
Length of output: 14911
src/stories/Configure.mdx (2)
36-36: ๋ฉํ ํ์ดํ์ด ์ ์ ํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค.
์คํ ๋ฆฌ๋ถ ๋ฌธ์์ ์ ๋ชฉ์ด ํ๋ก์ ํธ์ ์ฑ๊ฒฉ์ ์ ๋ฐ์ํ๊ณ ์์ต๋๋ค.
Line range hint 217-371: ์คํ์ผ๋ง์ด ์ ๊ตฌํ๋์ด ์์ต๋๋ค.
๋ฐ์ํ ๋์์ธ์ด ์ ์ ํ๊ฒ ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์คํ์ผ ๊ตฌ์กฐ๊ฐ ์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
| const { register } = useForm<FormValues>(); | ||
| const [textReview, setTextReview] = useState<string>(''); | ||
| const [point, setPoint] = useState<number>(0); |
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
ํผ ์ํ ๊ด๋ฆฌ ๊ฐ์ ์ด ํ์ํฉ๋๋ค
ํ์ฌ React Hook Form์ ์ํ์ ๋ก์ปฌ ์ํ(useState)๋ฅผ ๋์์ ์ฌ์ฉํ๊ณ ์์ด ์ํ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. React Hook Form์ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ์ฌ ์ํ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
- const { register } = useForm<FormValues>();
- const [textReview, setTextReview] = useState<string>('');
- const [point, setPoint] = useState<number>(0);
+ const { register, watch, setValue } = useForm<FormValues>({
+ defaultValues: {
+ reviewText: '',
+ score: 0
+ }
+ });๐ 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 { register } = useForm<FormValues>(); | |
| const [textReview, setTextReview] = useState<string>(''); | |
| const [point, setPoint] = useState<number>(0); | |
| const { register, watch, setValue } = useForm<FormValues>({ | |
| defaultValues: { | |
| reviewText: '', | |
| score: 0 | |
| } | |
| }); |
| export default function EditCrewPage() { | ||
| const { id } = useParams(); | ||
| const { data, isLoading, error } = useGetCrewDetailQuery(Number(id)); | ||
| const { data, isLoading } = useGetCrewDetailQuery(Number(id)); |
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.
์๋ฌ ์ฒ๋ฆฌ ๋ก์ง์ด ๋๋ฝ๋์์ต๋๋ค
useGetCrewDetailQuery์์ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค. ๋ฐ์ดํฐ fetching ์คํจ ์ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ง ๋ชปํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์๋๋ฆฝ๋๋ค:
- const { data, isLoading } = useGetCrewDetailQuery(Number(id));
+ const { data, isLoading, error } = useGetCrewDetailQuery(Number(id));
+ if (error) {
+ return (
+ <div className="fixed inset-0 flex items-center justify-center">
+ <p className="text-red-500">๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ์คํจํ์ต๋๋ค. ๋ค์ ์๋ํด ์ฃผ์ธ์.</p>
+ </div>
+ );
+ }๐ 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 { data, isLoading } = useGetCrewDetailQuery(Number(id)); | |
| const { data, isLoading, error } = useGetCrewDetailQuery(Number(id)); | |
| if (error) { | |
| return ( | |
| <div className="fixed inset-0 flex items-center justify-center"> | |
| <p className="text-red-500">๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ์คํจํ์ต๋๋ค. ๋ค์ ์๋ํด ์ฃผ์ธ์.</p> | |
| </div> | |
| ); | |
| } |
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.
์๊ณ ๋ง์ผ์ จ์ต๋๋ค!
yulrang
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.
์๊ณ ํ์ จ์ต๋๋ค~!
|
๐storybook: https://67206cc6ff9d7a05a3528ff8-aszonddrrs.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: 1
๐งน Outside diff range and nitpick comments (3)
src/stories/Configure.mdx (3)
Line range hint
93-155: ๊ธฐ๋ฅ ์ค๋ช ์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง ์์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.ํ์ฌ Storybook ๊ธฐ๋ณธ ์ด๋ฏธ์ง(Docs, Share, Testing ๋ฑ)๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด๋ ์ค๋ช ํ๋ ๊ธฐ๋ฅ(ํฌ๋ฃจ ์ฐพ๊ธฐ, ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๋ฑ)๊ณผ ์ผ์นํ์ง ์์ต๋๋ค. ์ค์ ์๋น์ค์ ์คํฌ๋ฆฐ์ท์ด๋ ๊ด๋ จ ์ด๋ฏธ์ง๋ก ๊ต์ฒดํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค.
Line range hint
189-211: ์ธ๋ถ ๋งํฌ์ ๋ณด์ ์์ฑ ์ถ๊ฐ๊ฐ ํ์ํฉ๋๋ค.์ธ๋ถ ๋งํฌ(
target="_blank"์ฌ์ฉ)์rel="noopener noreferrer"๋ฅผ ์ถ๊ฐํ์ฌ ๋ณด์์ ๊ฐํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.- target="_blank" + target="_blank" rel="noopener noreferrer"
Line range hint
249-271: ์คํ์ผ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ๊ฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.๋ฐ๋ณต๋๋ ๊ฐ๋ค(์์, ์ฌ๋ฐฑ ๋ฑ)์ CSS ์ปค์คํ ํ๋กํผํฐ๋ก ๋ถ๋ฆฌํ๋ฉด ์ ์ง๋ณด์๊ฐ ๋์ฑ ์ฉ์ดํด์ง ๊ฒ ๊ฐ์ต๋๋ค.
์์:
:root { --sb-spacing-lg: 48px; --sb-spacing-md: 32px; --sb-spacing-sm: 20px; --sb-bg-color: #EEF3F8; }
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
๐ Files selected for processing (10)
src/app/(crew)/crew/detail/[id]/_components/detail-crew.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/gathering-detail-modal.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/page.tsx(1 hunks)src/components/common/crew-list/crew-card.tsx(0 hunks)src/components/common/gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx(1 hunks)src/components/gathering-list/liked-list-presenter.tsx(1 hunks)src/stories/Configure.mdx(11 hunks)src/types/gathering-data.d.ts(0 hunks)
๐ค Files with no reviewable changes (4)
- src/components/common/crew-list/crew-card.tsx
- src/components/common/gathering-card/presenter.tsx
- src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx
- src/types/gathering-data.d.ts
๐ง Files skipped from review as they are similar to previous changes (5)
- src/app/(crew)/crew/detail/[id]/_components/detail-crew.stories.tsx
- src/app/(crew)/crew/detail/[id]/_components/gathering-detail-modal/gathering-detail-modal.stories.tsx
- src/app/(crew)/crew/detail/[id]/page.tsx
- src/components/common/gathering-card/scheduled-gathering-card/scheduled-gathering.stories.tsx
- src/components/gathering-list/liked-list-presenter.tsx
๐ Additional comments (2)
src/stories/Configure.mdx (2)
36-41: ๋ฉํ ์ ๋ณด์ ์ ๋ชฉ์ด ์ ์ ํ๊ฒ ์
๋ฐ์ดํธ๋์์ต๋๋ค.
์คํ ๋ฆฌ๋ถ์ ๋ฉํ ์ ๋ณด๊ฐ ํ๋ก์ ํธ์ ์ฑ๊ฒฉ์ ๋ง๊ฒ ์ ์์ ๋์์ผ๋ฉฐ, ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋ํ ์ค๋ช ์ด ๋ช ํํฉ๋๋ค.
73-80: ํ๋ก์ ํธ ์๊ฐ๊ฐ ๋ช
ํํ๊ฒ ์์ฑ๋์์ต๋๋ค.
์๋น์ค์ ๋ชฉ์ ๊ณผ ์ฃผ์ ๊ธฐ๋ฅ์ด ๊ฐ๋จ๋ช ๋ฃํ๊ฒ ์ค๋ช ๋์ด ์์ผ๋ฉฐ, ๋ฐฐํฌ๋ ์ฌ์ดํธ๋ก์ ๋งํฌ๊ฐ ์ ์ ํ ํฌํจ๋์ด ์์ต๋๋ค.
src/stories/Configure.mdx
Outdated
| src="https://github.com/user-attachments/assets/95d20bd3-5fe5-461c-b5d7-50fbe006bf42" | ||
| alt="component based development" | ||
| width={0} | ||
| height={0} | ||
| style={{ width: '100%', height: 'auto' }} | ||
| style={{ width: '100%', height: '250px', borderRadius: '15px'}} |
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
์ด๋ฏธ์ง URL์ ์์ ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
GitHub user-attachments URL์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ธ ๊ด์ ์์ ๋ถ์์ ํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ๋ด๋ถ assets ํด๋๋ ์์ ์ ์ธ CDN ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณด์ธ์.
Also applies to: 61-62
|
๐storybook: https://67206cc6ff9d7a05a3528ff8-pqkjpajsks.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: 0
๐งน Outside diff range and nitpick comments (1)
.storybook/preview.tsx (1)
36-42: ์คํ ๋ฆฌ ์นดํ ๊ณ ๋ฆฌ ๊ตฌ์กฐ ๊ฐ์ ์ ์ ์๋๋ฆฝ๋๋ค.ํ์ฌ ๊ตฌ์กฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค:
- 'common' ์นดํ ๊ณ ๋ฆฌ์ ๋ ๋ง์ ๊ธฐ๋ณธ UI ์ปดํฌ๋ํธ ์ถ๊ฐ ๊ฒํ (์: select, checkbox, radio ๋ฑ)
- 'layout' ํ์์ ๊ตฌ์ฒด์ ์ธ ์ปดํฌ๋ํธ ๋ช ์
- ๊ธฐ๋ฅ๋ณ ๊ทธ๋ฃนํ ์ถ๊ฐ (์: 'navigation', 'form' ๋ฑ)
๋ค์๊ณผ ๊ฐ์ด ์์ ํด๋ณด์๋ ๊ฑด ์ด๋จ๊น์?:
order: [ 'common', - ['button', 'calendar', 'image', 'input'], + ['button', 'calendar', 'checkbox', 'image', 'input', 'radio', 'select'], 'layout', + ['header', 'footer', 'sidebar'], + 'navigation', + ['menu', 'tabs'], 'auth', 'crew', 'gathering', 'review', + 'form', + ['input-group', 'validation'], ],
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
๐ Files selected for processing (9)
.storybook/preview.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/_components/rating-display.stories.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/edit/page.tsx(1 hunks)src/app/(crew)/my-page/_components/profile-card/container.tsx(1 hunks)src/app/(crew)/page.tsx(1 hunks)src/components/common/crew-list/crew-card.tsx(0 hunks)src/components/common/gathering-card/presenter.tsx(0 hunks)src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx(0 hunks)src/components/common/review-list/review-card-list.stories.tsx(1 hunks)
๐ค Files with no reviewable changes (3)
- src/components/common/crew-list/crew-card.tsx
- src/components/common/gathering-card/presenter.tsx
- src/components/common/gathering-card/scheduled-gathering-card/presenter.tsx
๐ง Files skipped from review as they are similar to previous changes (5)
- src/app/(crew)/crew/detail/[id]/_components/rating-display.stories.tsx
- src/app/(crew)/crew/detail/[id]/edit/page.tsx
- src/app/(crew)/my-page/_components/profile-card/container.tsx
- src/app/(crew)/page.tsx
- src/components/common/review-list/review-card-list.stories.tsx
๐ Additional comments (2)
.storybook/preview.tsx (2)
32-45: ์คํ ๋ฆฌ ์ ๋ ฌ ๊ตฌ์ฑ์ด ์ ๊ตฌํ๋์์ต๋๋ค!
์ํ๋ฒณ์ ์ ๋ ฌ๊ณผ ํจ๊ป ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ ์์๋ฅผ ์ง์ ํ ๊ฒ์ด ์ข์ต๋๋ค.
34-34: ์ํ๋ฒณ ์ ๋ ฌ ๋ฐฉ์ ์ ์ฉ ํ์ธ์ด ํ์ํฉ๋๋ค.
method: 'alphabetical' ์ค์ ์ด ๊ฐ ์นดํ
๊ณ ๋ฆฌ ๋ด๋ถ์ ์ปดํฌ๋ํธ๋ค์ ์ ๋๋ก ์ ์ฉ๋๋์ง ํ์ธํด์ฃผ์ธ์.
โ Verification successful
์คํ ๋ฆฌ๋ถ ์ปดํฌ๋ํธ์ ์ํ๋ฒณ ์ ๋ ฌ์ด ์ ์์ ์ผ๋ก ์ ์ฉ๋์ด ์์ต๋๋ค.
์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ์คํ ๋ฆฌ ํ์ผ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ํ๋ฒณ์์ผ๋ก ์ ์ ๋ ฌ๋์ด ์์์ ํ์ธํ ์ ์์ต๋๋ค:
- (auth) ๊ด๋ จ ์ปดํฌ๋ํธ (login, signup)
- (crew) ๊ด๋ จ ์ปดํฌ๋ํธ (category, create, detail)
- common ์ปดํฌ๋ํธ (button, input, profile ๋ฑ)
- gathering-list ์ปดํฌ๋ํธ
- my-page ๊ด๋ จ ์ปดํฌ๋ํธ
๋ฐ๋ผ์ .storybook/preview.tsx์ method: 'alphabetical' ์ค์ ์ด ์๋ํ ๋๋ก ์ ์๋ํ๊ณ ์์ต๋๋ค.
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: ์คํ ๋ฆฌ๋ถ ํ์ผ๋ค์ ์ค์ ๊ตฌ์กฐ์ ์ ๋ ฌ ์ค์ ์ด ์ผ์นํ๋์ง ํ์ธ
# ์คํ ๋ฆฌ ํ์ผ๋ค์ ํ์ฌ ๊ตฌ์กฐ ํ์ธ
fd -e stories.tsx -e stories.ts | sort
Length of output: 2324
|
๐storybook: https://67206cc6ff9d7a05a3528ff8-mdvwdojelz.chromatic.com/ |
|
๐storybook: https://67206cc6ff9d7a05a3528ff8-bbytifmkda.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: 1
๐งน Outside diff range and nitpick comments (3)
src/stories/Configure.mdx (3)
7-8: ์ด๋ฏธ์ง import ๊ตฌ๋ฌธ์ ๋ค์ด๋ฐ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
Cbd์Pattern๋ณ์๋ช ์ด ๋๋ฌด ์ถ์ฝ๋์ด ์์ด ์๋ฏธ ์ ๋ฌ์ด ๋ช ํํ์ง ์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ ๋ช ํํ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
-import Cbd from './assets/development-cbd.png'; -import Pattern from './assets/development-pattern.png'; +import ComponentBasedDevelopment from './assets/development-cbd.png'; +import ContainerPresentationalPattern from './assets/development-pattern.png';
75-82: ๋งํฌ๋ค์ด ๋ฌธ๋ฒ๊ณผ HTML์ด ํผ์ฉ๋์ด ์์ต๋๋ค.์ผ๊ด์ฑ ์๋ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ์ํด ํ๋์ ์คํ์ผ๋ก ํต์ผํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ฒด์ ์ผ๋ก HTML ๋งํฌ์ ์ผ๋ก ํต์ผํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
- # Crew Crew - ### ์ฝ์ํ๊ณ ๋ง๋๋ ์ด๋ ์๋ชจ์ ์น์ฌ์ดํธ + <h1>Crew Crew</h1> + <h3>์ฝ์ํ๊ณ ๋ง๋๋ ์ด๋ ์๋ชจ์ ์น์ฌ์ดํธ</h3>
273-274: ์์ ๋งํฌ ๊ทธ๋ฆฌ๋ ๋ ์ด์์ ๊ฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.ํ์ฌ ๊ณ ์ ๋ 2์ด ๊ทธ๋ฆฌ๋๋ ๋ฐ์ํ ๋์์ธ์์ ์ ์ฐํ์ง ์์ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด auto-fit์ ์ฌ์ฉํ์ฌ ๋ ์ ์ฐํ ๋ ์ด์์์ ๊ตฌํํ ์ ์์ต๋๋ค:
.sb-socials { display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
โ Files ignored due to path filters (2)
src/stories/assets/development-cbd.pngis excluded by!**/*.pngsrc/stories/assets/development-pattern.pngis excluded by!**/*.png
๐ Files selected for processing (2)
src/components/my-page/reviewable-gatherings/reviewable-gathering-card.stories.tsx(1 hunks)src/stories/Configure.mdx(12 hunks)
โ Files skipped from review due to trivial changes (1)
- src/components/my-page/reviewable-gatherings/reviewable-gathering-card.stories.tsx
๐ Additional comments (1)
src/stories/Configure.mdx (1)
80-80: ์ธ๋ถ ๋งํฌ์ ์ ํจ์ฑ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค.
ํ๋ก์ ํธ URL๊ณผ ์์ ๋ฏธ๋์ด ๋งํฌ๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
Also applies to: 194-194, 211-211
โ Verification successful
๋ชจ๋ ์ธ๋ถ ๋งํฌ๊ฐ ์ ์์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํจ์ ํ์ธํ์ต๋๋ค.
๊ฒ์ฆ๋ URL ๋ชฉ๋ก:
- crewcrew.vercel.app
- github.com/CodeitFESI4-Team1/Team-1-Codeit
- youtube.com/watch?v=8qhzx36ljDM
๐ Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that all external URLs are accessible
echo "Checking external URLs..."
urls=(
"https://crewcrew.vercel.app/"
"https://github.com/CodeitFESI4-Team1/Team-1-Codeit"
"https://www.youtube.com/watch?v=8qhzx36ljDM"
)
for url in "${urls[@]}"; do
if curl --output /dev/null --silent --head --fail "$url"; then
echo "โ $url is accessible"
else
echo "โ $url is not accessible"
fi
done
Length of output: 921
| src={Cbd} | ||
| alt="component based development" | ||
| width={0} | ||
| height={0} | ||
| style={{ width: '100%', height: 'auto' }} | ||
| style={{ width: '100%', height: '250px', borderRadius: '15px'}} |
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
์ด๋ฏธ์ง ์ ๊ทผ์ฑ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
width์ height๋ฅผ 0์ผ๋ก ์ค์ ํ๊ณ style๋ก ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์ ๊ทผ์ฑ ์ธก๋ฉด์์ ์ข์ง ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค:
<Image
src={Cbd}
alt="component based development"
- width={0}
- height={0}
- style={{ width: '100%', height: '250px', borderRadius: '15px'}}
+ width={500}
+ height={250}
+ style={{ width: '100%', borderRadius: '15px'}}
/>๐ 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.
| src={Cbd} | |
| alt="component based development" | |
| width={0} | |
| height={0} | |
| style={{ width: '100%', height: 'auto' }} | |
| style={{ width: '100%', height: '250px', borderRadius: '15px'}} | |
| src={Cbd} | |
| alt="component based development" | |
| width={500} | |
| height={250} | |
| style={{ width: '100%', borderRadius: '15px'}} |
๐ Issue Ticket
Ticket
โ๏ธ Description
โ Checklist
PR
Test
Summary by CodeRabbit
๋ฆด๋ฆฌ์ค ๋ ธํธ
์๋ก์ด ๊ธฐ๋ฅ
๋ฌธ์ํ
๋ฒ๊ทธ ์์
์คํ์ผ
ํ ์คํธ