-
Notifications
You must be signed in to change notification settings - Fork 3
Feat/96/form #97
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
Feat/96/form #97
Conversation
|
Caution Review failedThe pull request is closed. Walkthroughμ΄ ν 리νμ€νΈλ μ¬λ¬ μ»΄ν¬λνΈμ νΌ μ²λ¦¬ λ° μ ν¨μ± κ²μ¬ λ‘μ§μ κ°μ νλ λ³κ²½ μ¬νμ ν¬ν¨νκ³ μμ΅λλ€. Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Warning There were issues while running the following tools: π§ eslintnext.config.mjsOops! Something went wrong! :(
ESLint: 8.57.1
ESLint couldn't determine the plugin "react-hooks" uniquely.
- /node_modules/eslint-plugin-react-hooks/index.js (loaded in ".eslintrc.js")
- /git/node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks/index.js (loaded in ".eslintrc.js Β» eslint-config-next/core-web-vitals Β» /home/jailuser/git/node_modules/eslint-config-next/index.js Β» plugin:react-hooks/recommended")
Please remove the "plugins" setting from either config or remove either plugin installation.
If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? πͺ§ 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-hqggidpeeb.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 (10)
src/app/_components/hero/hero-crew.tsx (1)
24-29: Link μ»΄ν¬λνΈλ‘μ μ νμ΄ μ μ΄λ£¨μ΄μ‘μ΅λλ€.Buttonμ Linkλ‘ κ΅μ²΄ν κ²μ λ€μκ³Ό κ°μ μ₯μ μ΄ μμ΅λλ€:
- μλ§¨ν± HTML ꡬ쑰 κ°μ
- μΈμ¦ μνμ λ°λ₯Έ μ‘°κ±΄λΆ λΌμ°ν
- μ€νμΌλ§ μΌκ΄μ± μ μ§
νλμ κ°μ μ¬νμ μ μλ립λλ€:
Link μ»΄ν¬λνΈμ aria-labelμ μΆκ°νμ¬ μ κ·Όμ±μ λμ± ν₯μμν¬ μ μμ΅λλ€:
<Link href={isAuth ? '/crew/create' : '/login'} className="btn-filled -translate-y-1 items-center rounded-xl px-4 py-2 text-sm font-semibold md:h-11 md:text-lg md:font-bold" + aria-label={isAuth ? 'μλ‘μ΄ ν¬λ£¨ λ§λ€κΈ°' : 'λ‘κ·ΈμΈνμ¬ ν¬λ£¨ λ§λ€κΈ°'} > ν¬λ£¨ λ§λ€κΈ° </Link>src/components/common/input/drop-down/index.tsx (3)
Line range hint
16-32: μ»΄ν¬λνΈ propsμ λν λ¬Έμνκ° νμν©λλ€.κ° propμ λͺ©μ κ³Ό μ¬μ©λ²μ μ€λͺ νλ JSDoc λ¬Έμλ₯Ό μΆκ°νλ©΄ μ»΄ν¬λνΈμ μ¬μ¬μ©μ±μ΄ ν₯μλ κ² κ°μ΅λλ€.
μμ:
/** * @param variant - λλ‘λ€μ΄μ μ€νμΌ λ³ν('default' λλ 'sort') * @param data - λλ‘λ€μ΄μ νμλ μ΅μ λ°μ΄ν° * @param name - νΌ μ μΆ μ μ¬μ©λ νλ μ΄λ¦ * ... */
33-52: μ€νμΌ λ‘μ§ μ΅μ νκ° νμν©λλ€.νμ¬ μ€νμΌ λ‘μ§μ μ€λ³΅λ μ½λκ° μμ΅λλ€. μμλ₯Ό νμ©νμ¬ λ€μκ³Ό κ°μ΄ κ°μ ν μ μμ΅λλ€:
const STYLE_VARIANTS = { default: { focused: 'bg-black text-white placeholder:text-white', normal: 'bg-white text-gray-800 placeholder-gray-800' }, sort: { focused: 'bg-black text-white placeholder:text-white sort-bg-on pl-10', normal: 'bg-white text-gray-800 placeholder-gray-800 sort-bg pl-10' } } as const; const getFocusStyle = () => { const styles = STYLE_VARIANTS[variant]; return isFocused ? styles.focused : styles.normal; };
Line range hint
60-102: μ κ·Όμ± κ°μ μ΄ νμν©λλ€.νμ¬ κ΅¬νμ λ€μκ³Ό κ°μ μ κ·Όμ± κ΄λ ¨ μμ±λ€μ΄ λλ½λμ΄ μμ΅λλ€:
aria-labelλλaria-labelledbyμμ± μΆκ°aria-invalidμμ±μ error propκ³Ό μ°λ- μλ¬ λ©μμ§λ₯Ό μν
aria-describedbyμμ± μΆκ°<Select error={error} + aria-label={placeholder} + aria-invalid={!!error} + aria-describedby={error ? `${name}-error` : undefined} // ... κΈ°μ‘΄ props />src/components/common/input/file-input-wrap/file-input/index.tsx (1)
Line range hint
1-124: μ κ·Όμ± λ° μ€λ₯ μ²λ¦¬ κ°μ μ΄ νμν©λλ€.λ€μ μ¬νλ€μ κ°μ μ κ³ λ €ν΄ μ£ΌμΈμ:
- νμΌ ν¬κΈ° μ ν λ° κ²μ¦
- μ΄λ―Έμ§ μ λ‘λ μ€ν¨ μ μ¬μ©μ νΌλλ°±
- μ€ν¬λ¦° 리λλ₯Ό μν aria-label μΆκ°
- λ‘λ© μν νμ
λ€μκ³Ό κ°μ΄ κ°μ ν μ μμ΅λλ€:
export interface FileInputProps { value: File | StaticImageData | null; onChange: (value: File | StaticImageData | null) => void; isBlur: boolean; + maxSizeInMB?: number; + onError?: (error: string) => void; } -export default function FileInput({ value, isBlur, onChange }: FileInputProps) { +export default function FileInput({ + value, + isBlur, + onChange, + maxSizeInMB = 5, + onError +}: FileInputProps) { const [preview, setPreview] = useState<string | null>(null); const [fileReader, setFileReader] = useState<FileReader | null>(null); + const [isLoading, setIsLoading] = useState(false); const handleChange = (e: ChangeEvent<HTMLInputElement>) => { if (e.target.files && e.target.files.length > 0) { const file = e.target.files[0]; + if (file.size > maxSizeInMB * 1024 * 1024) { + onError?.(`νμΌ ν¬κΈ°λ ${maxSizeInMB}MB μ΄νμ¬μΌ ν©λλ€.`); + return; + } + setIsLoading(true); onChange(file); e.target.value = ''; debouncedHandleFileLoad(file); } }; const handleFileLoad = (file: File) => { if (fileReader) { fileReader.abort(); } const reader = new FileReader(); setFileReader(reader); reader.onloadend = () => { setPreview(reader.result as string); + setIsLoading(false); }; + + reader.onerror = () => { + setIsLoading(false); + onError?.('μ΄λ―Έμ§ λ‘λ μ€ μ€λ₯κ° λ°μνμ΅λλ€.'); + }; reader.readAsDataURL(file); }; return ( <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" + aria-label="μ΄λ―Έμ§ μ λ‘λ" > {/* ... */} </label> {/* ... */} + {isLoading && ( + <div className="absolute inset-0 flex items-center justify-center bg-neutral-100/50"> + <span className="text-sm text-gray-500">λ‘λ©μ€...</span> + </div> + )} </div> ); }src/app/(crew)/crew/_components/gathering-detail-modal/presenter.tsx (2)
45-50: μ΄λ―Έμ§ μ΅μ νλ₯Ό μν μ μNext.jsμ Image μ»΄ν¬λνΈ μ¬μ©μ΄ μ μ νλ, μ±λ₯ μ΅μ νλ₯Ό μν΄ λͺ κ°μ§ μμ±μ μΆκ°νλ©΄ μ’μ κ² κ°μ΅λλ€.
λ€μκ³Ό κ°μ΄ μμ μ μ μλ립λλ€:
<Image src={data?.imageUrl} alt="λͺ¨μ μ΄λ―Έμ§" fill style={{ width: '100%', height: '100%', objectFit: 'cover' }} + priority={false} + sizes="(max-width: 520px) 100vw, 520px" + quality={75} />
120-146: μ‘°κ±΄λΆ λ λλ§ λ‘μ§ κ°μ νμνμ¬ λ²νΌλ€μ μ‘°κ±΄λΆ λ λλ§μ΄ μ€μ²©λ 쑰건문μΌλ‘ ꡬνλμ΄ μμ΄ κ°λ μ±μ΄ λ¨μ΄μ§λλ€.
λ€μκ³Ό κ°μ 리ν©ν λ§μ μ μλ립λλ€:
-{!data?.isParticipant && ( - <Button /* ... */ >μ°Έμ¬νκΈ°</Button> -)} -{data?.isParticipant && !data?.isGatherCaptain && ( - <Button /* ... */ >νν΄νκΈ°</Button> -)} -{data?.isGatherCaptain && ( - <Button /* ... */ >μμ νκΈ°</Button> -)} +{renderActionButton()} +function renderActionButton() { + if (data?.isGatherCaptain) { + return <Button onClick={onDelete}>μμ νκΈ°</Button>; + } + if (data?.isParticipant) { + return <Button onClick={onExit}>νν΄νκΈ°</Button>; + } + return <Button onClick={onJoin}>μ°Έμ¬νκΈ°</Button>; +}src/app/(crew)/crew/_components/create-gathering-form/index.tsx (2)
29-39: νΌ μ΄κΈ°ν λ° μν κ΄λ¦¬ κ°μ νμ
useFormμ μ€μ μ΄ μ μ νλ, λ€μ μ¬νλ€μ κ³ λ €ν΄λ³΄μκΈ° λ°λλλ€:
defaultValuesκ° λλ½λ νλκ° μμ κ²½μ° controlled/uncontrolled μ»΄ν¬λνΈ κ²½κ³ κ° λ°μν μ μμ΅λλ€.mode: 'onBlur'λ μ¬μ©μ κ²½ν μΈ‘λ©΄μμ μ¦κ°μ μΈ νΌλλ°±μ΄ λΆμ‘±ν μ μμ΅λλ€.λ€μκ³Ό κ°μ΄ κ°μ ν΄λ³΄μΈμ:
const { control, handleSubmit, trigger, formState: { errors, isValid }, } = useForm<CreateGatheringRequestType>({ defaultValues: { + title: data.title || '', + location: data.location || '', + introduce: data.introduce || '', + imageUrl: data.imageUrl || '', + dateTime: data.dateTime || '', + totalCount: data.totalCount || 4, }, - mode: 'onBlur', + mode: 'onChange', });
175-194: μΈμ μ μ λ ₯ νλμ UX κ°μ νμνμ¬ κ΅¬νμμ λ€μ μ¬νλ€μ΄ κ°μ λμ΄μΌ ν©λλ€:
- μλ¬ λ©μμ§κ° μ¬μ©μμκ² νμλμ§ μμ΅λλ€.
- μ΅μ/μ΅λ μΈμμμ λν μλ΄κ° μμ΅λλ€.
λ€μκ³Ό κ°μ΄ κ°μ ν΄λ³΄μΈμ:
<NumberInput {...field} id="gathering-totalCount" variant="filled" min={4} max={20} + error={errors.totalCount?.message} + description="μ΅μ 4λͺ , μ΅λ 20λͺ κΉμ§ μ€μ κ°λ₯ν©λλ€." classNames={{ input: 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl', + error: 'text-red-500 text-sm mt-1', + description: 'text-gray-500 text-sm mt-1' }} - placeholder="μμΈν λͺ¨μ§ μ μμ μ λ ₯ν΄μ£ΌμΈμ." + placeholder="4-20λͺ " />src/app/(crew)/crew/_components/create-crew-form/index.tsx (1)
86-91: μ λͺ© μ ν¨μ± κ²μ¬ λ‘μ§ κ°μ μ μ μλ립λλ€.νμ¬ κ³΅λ°± μ κ±° λ° μ€μκ° κ²μ¦μ΄ μ ꡬνλμ΄ μμΌλ, λ€μκ³Ό κ°μ μΆκ° κ²μ¦μ κ³ λ €ν΄λ³΄μλ©΄ μ’μ κ² κ°μ΅λλ€:
- μ΅μ κΈΈμ΄ μ ν (μ: 2μ μ΄μ)
- νΉμλ¬Έμ μ ν
λ€μκ³Ό κ°μ΄ μμ ν΄λ³΄μλ 건 μ΄λ¨κΉμ?:
rules={{ required: 'νμ μ λ ₯μ¬νμ λλ€.', validate: (value) => { if (value && value.trim().length > 0) { + if (value.trim().length < 2) { + return 'μ΅μ 2μ μ΄μ μ λ ₯ν΄μ£ΌμΈμ.'; + } + if (!/^[κ°-ν£a-zA-Z0-9\s]+$/.test(value)) { + return 'νΉμλ¬Έμλ μ¬μ©ν μ μμ΅λλ€.'; + } return true; } return 'νμ μ λ ₯μ¬νμ λλ€.'; }, }}Also applies to: 98-101
π Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
π Files selected for processing (14)
src/app/(crew)/crew/_components/create-crew-form/index.tsx(6 hunks)src/app/(crew)/crew/_components/create-gathering-form/create-gathering-form.stories.tsx(2 hunks)src/app/(crew)/crew/_components/create-gathering-form/index.tsx(5 hunks)src/app/(crew)/crew/_components/create-gathering-modal/presenter.tsx(1 hunks)src/app/(crew)/crew/_components/gathering-detail-modal/presenter.tsx(1 hunks)src/app/(crew)/crew/create/page.tsx(2 hunks)src/app/(crew)/crew/detail/[id]/page.tsx(1 hunks)src/app/(crew)/page.tsx(2 hunks)src/app/_components/hero/hero-crew.tsx(2 hunks)src/components/common/input/drop-down/index.tsx(5 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(1 hunks)src/components/common/input/file-input-wrap/file-sample/index.tsx(0 hunks)tailwind.config.ts(1 hunks)
π€ Files with no reviewable changes (1)
- src/components/common/input/file-input-wrap/file-sample/index.tsx
β Files skipped from review due to trivial changes (1)
- src/app/(crew)/crew/detail/[id]/page.tsx
π Additional comments (16)
src/app/(crew)/crew/_components/create-gathering-modal/presenter.tsx (2)
25-25: LGTM! νμ΄ν λ³κ²½ λ° κ΅¬μ‘° κ°μ μ΄ μ λμμ΅λλ€.
"μ½μ μ‘κΈ°"μμ "μ½μ λ§λ€κΈ°"λ‘μ νμ΄ν λ³κ²½κ³Ό μ»΄ν¬λνΈ κ΅¬μ‘°μ λ¨μνκ° μ μ΄λ£¨μ΄μ‘μ΅λλ€.
Also applies to: 40-41
31-31: μ€ν¬λ‘€ λμ κ°μ μ΄ ν¨κ³Όμ μΌλ‘ ꡬνλμμ΅λλ€.
overflow: 'hidden'κ³Ό ScrollArea.Autosize μ»΄ν¬λνΈλ₯Ό νμ©ν μ€ν¬λ‘€ μ²λ¦¬ λ°©μμ΄ μ΄μ€ μ€ν¬λ‘€λ° λ¬Έμ λ₯Ό ν¨κ³Όμ μΌλ‘ ν΄κ²°νμ΅λλ€. νΉν:
- Modal contentμ
overflow: 'hidden'μ΄ μΈλΆ μ€ν¬λ‘€μ μ ν ScrollArea.Autosizeκ° λ΄λΆ μ½ν μΈ μ λ§μΆ° μλμΌλ‘ ν¬κΈ° μ‘°μ
Also applies to: 38-38
src/app/_components/hero/hero-crew.tsx (2)
4-4: λ‘컬 Button μ»΄ν¬λνΈλ‘μ λ§μ΄κ·Έλ μ΄μ
μ΄ μ μ ν©λλ€.
Mantine μ»΄ν¬λνΈμμ λ‘컬 μ»΄ν¬λνΈλ‘μ μ νμ΄ μΌκ΄μ± μκ² μ΄λ£¨μ΄μ‘μ΅λλ€.
11-11: cursor-default μ€νμΌ μ μ©μ΄ μ μ ν©λλ€.
μΉμ μ 체μ cursor-defaultλ₯Ό μ μ©νμ¬ μ¬μ©μ κ²½νμ΄ κ°μ λμμ΅λλ€.
src/app/(crew)/crew/create/page.tsx (3)
4-4: μ μ ν λΌμ°ν° μν¬νΈ μΆκ°
Next.jsμ ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ€λΉκ²μ΄μ
μ μν useRouter μν¬νΈκ° μ¬λ°λ₯΄κ² μΆκ°λμμ΅λλ€.
10-10: λΌμ°ν° μ΄κΈ°ν νμΈ
μ»΄ν¬λνΈ μ΅μμ λ 벨μμ useRouter ν
μ΄ μ¬λ°λ₯΄κ² μ΄κΈ°νλμμ΅λλ€.
23-24: π οΈ Refactor suggestion
API μ°λ λ° μλ¬ μ²λ¦¬ κ°μ νμ
νμ¬ κ΅¬νμμ λ€μ μ¬νλ€μ κ°μ νλ©΄ μ’κ² μ΅λλ€:
- νλμ½λ©λ ID κ°μ μ€μ API μ°λ μ μ κ±°λμ΄μΌ ν©λλ€.
- λΌμ°ν μ€ν¨ μμ μλ¬ μ²λ¦¬κ° νμν©λλ€.
- API μλ΅ μ±κ³΅/μ€ν¨μ λ°λ₯Έ μ¬μ©μ νΌλλ°±μ΄ νμν©λλ€.
λ€μκ³Ό κ°μ΄ κ°μ νλ κ²μ μ μλ립λλ€:
- const handleSubmit = () => {
+ const handleSubmit = async () => {
// TODO : POST API μ°κ²°
- const response = { id: 1 };
- router.push(`/crew/detail/${response?.id}`);
+ try {
+ // const response = await createCrew(formData);
+ const response = { id: 1 }; // μμ μλ΅
+ await router.push(`/crew/detail/${response?.id}`);
+ } catch (error) {
+ console.error('ν¬λ£¨ μμ± μ€ μ€λ₯ λ°μ:', error);
+ // μλ¬ μ²λ¦¬ λ‘μ§ μΆκ° νμ
+ }
};API μ°λ μ λ€μ μ€ν¬λ¦½νΈλ‘ κ΄λ ¨ μ½λλ₯Ό νμΈν μ μμ΅λλ€:
β Verification successful
API ꡬν ν¨ν΄ νμΈ λ° λ¦¬ν©ν λ§ μ μ κ²μ¦ μλ£
κΈ°μ‘΄ μ½λλ² μ΄μ€ λΆμ κ²°κ³Ό:
fetchApiκΈ°λ°μ API ꡬν ν¨ν΄μ΄ νμΈλ¨ (get-crew-list.ts,get-crew-detail.ts)- μλ¬ μ²λ¦¬κ° ν¬ν¨λ API νΈμΆ ν¨ν΄ μ‘΄μ¬ (
get-crew-list.tsμ try-catch ꡬ문) - ν¬λ£¨ μμ± APIλ μμ§ κ΅¬νλμ§ μμ
μ μλ 리ν©ν λ§μ μ μ νλ©° λ€μκ³Ό κ°μ΄ 보μμ΄ νμν©λλ€:
+ const handleSubmit = async () => {
+ try {
+ const response = await fetchApi('/crews', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(formData)
+ });
+ await router.push(`/crew/detail/${response.id}`);
+ } catch (error) {
+ console.error('ν¬λ£¨ μμ± μ€ μ€λ₯ λ°μ:', error);
+ // TODO: ν μ€νΈ λλ μλ¦ΌμΌλ‘ μ¬μ©μμκ² μλ¬ νΌλλ°± μ 곡
+ }
+ };π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: API κ΄λ ¨ νμΌ κ²μ
echo "API κ΄λ ¨ νμΌ κ²μ μ€..."
rg -t typescript -t javascript "createCrew|postCrew"
Length of output: 134
Script:
#!/bin/bash
# Search for API-related patterns in all files
echo "Searching for API-related patterns..."
rg "createCrew|postCrew|api.*crew" --type-add 'ts:*.{ts,tsx}' --type ts
# Check for any existing API utility files
echo -e "\nSearching for API utility files..."
fd -e ts -e tsx "api"
# Look for router.push usage patterns
echo -e "\nSearching for router navigation patterns..."
rg "router\.push.*crew" --type-add 'ts:*.{ts,tsx}' --type ts -A 2
Length of output: 882
Script:
#!/bin/bash
# Check the API structure and implementation patterns
echo "Checking API implementation patterns..."
rg -t typescript "get-crew" -A 5
# Look for existing error handling patterns
echo -e "\nChecking error handling patterns..."
ast-grep --pattern 'try {
$$$
router.push($$$)
$$$
} catch (error) {
$$$
}'
# Check existing API response handling
echo -e "\nChecking API response handling..."
rg "getCrewDetail|getCrewList" -A 5 --type-add 'ts:*.{ts,tsx}' --type ts
Length of output: 3398
src/app/(crew)/crew/_components/create-gathering-form/create-gathering-form.stories.tsx (2)
12-12: μ΄κΈ°κ°μΌλ‘ λ μ μ ν μΈμ μλ‘ λ³κ²½λμμ΅λλ€.
λͺ¨μμ totalCount μ΄κΈ°κ°μ 0μμ 2λ‘ λ³κ²½ν κ²μ΄ λ νμ€μ μ
λλ€. λͺ¨μμ μ΅μ 2λͺ
μ΄μμ΄μ΄μΌ νλ―λ‘ μ΄ λ³κ²½μ μ μ ν©λλ€.
44-44: μ©μ΄ ν΅μΌμ± νμΈμ΄ νμν©λλ€.
"μ½μ μ‘κΈ°"μμ "μ½μ λ§λ€κΈ°"λ‘μ λ³κ²½μ΄ PR λͺ©νμ μΌμΉνλ©° μ μ ν©λλ€. λ€λ§, λ€λ₯Έ μ»΄ν¬λνΈλ€μμλ λμΌνκ² λ³κ²½λμλμ§ νμΈμ΄ νμν©λλ€.
β Verification successful
μ©μ΄κ° μΌκ΄λκ² λ³κ²½λμμμ νμΈνμ΅λλ€.
κ²μ κ²°κ³Όλ₯Ό ν΅ν΄ "μ½μ μ‘κΈ°"κ° λ μ΄μ μ½λλ² μ΄μ€μ μ‘΄μ¬νμ§ μμΌλ©°, "μ½μ λ§λ€κΈ°"λ‘ λͺ¨λ κ΄λ ¨ μ»΄ν¬λνΈμμ μΌκ΄λκ² μ¬μ©λκ³ μμμ νμΈνμ΅λλ€. λ³κ²½μ΄ λ€μ νμΌλ€μμ μ¬λ°λ₯΄κ² μ΄λ£¨μ΄μ‘μ΅λλ€:
src/app/(crew)/crew/detail/[id]/page.tsxsrc/app/(crew)/crew/_components/create-gathering-form/create-gathering-form.stories.tsxsrc/app/(crew)/crew/detail/[id]/_components/create-gathering.tsxsrc/app/(crew)/crew/_components/create-gathering-modal/presenter.tsxsrc/app/(crew)/crew/_components/create-gathering-modal/container.tsx
π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: λͺ¨λ νμΌμμ "μ½μ μ‘κΈ°"κ° "μ½μ λ§λ€κΈ°"λ‘ μ¬λ°λ₯΄κ² λ³κ²½λμλμ§ νμΈ
# "μ½μ μ‘κΈ°"λΌλ ν
μ€νΈκ° λ¨μμλμ§ νμΈ
echo "κ²μ: μμ§ λ³κ²½λμ§ μμ 'μ½μ μ‘κΈ°' ν
μ€νΈ"
rg "μ½μ μ‘κΈ°"
# "μ½μ λ§λ€κΈ°"λ‘ λ³κ²½λ λΆλΆ νμΈ
echo -e "\nκ²μ: μλ‘ λ³κ²½λ 'μ½μ λ§λ€κΈ°' ν
μ€νΈ"
rg "μ½μ λ§λ€κΈ°"
Length of output: 795
src/components/common/input/drop-down/index.tsx (1)
Line range hint 1-15: μΈν°νμ΄μ€ λ³κ²½μ¬νμ΄ μ μ ν΄ λ³΄μ
λλ€!
νΌ κ²μ¦μ μν error propμ μΆκ°λ PRμ λͺ©νμ μ λΆν©ν©λλ€. νμ
μ μλ λͺ
ννκ² λμ΄μμ΅λλ€.
src/app/(crew)/page.tsx (2)
49-51: κ²μ νλμ μ¬μ©μ±μ΄ κ°μ λμμ΅λλ€!
κ²μ placeholder ν μ€νΈκ° λ ꡬ체μ μΌλ‘ λ³κ²½λμ΄ μ¬μ©μκ° μ΄λ€ λ΄μ©μ κ²μν μ μλμ§ λͺ ννκ² μ΄ν΄ν μ μκ² λμμ΅λλ€.
53-53: λ μ΄μμ λ° λλ‘λ€μ΄ UI κ°μ μ΄ μ μ ν©λλ€.
- md:basis-67λ‘μ λ³κ²½μ tailwind.config.tsμ μ λ°μ΄νΈμ μΌμΉνλ©° λ°μν λ μ΄μμμ κ°μ ν©λλ€.
- λλ‘λ€μ΄ λλΉλ₯Ό 130pxλ‘ μ¦κ°μν¨ κ²μ μ΅μ ν μ€νΈλ₯Ό λ μ νμν μ μκ² ν΄μ€λλ€.
Also applies to: 60-60, 72-72
src/components/common/input/file-input-wrap/file-input/index.tsx (1)
80-82: 미리보기 μν κ΄λ¦¬ λ‘μ§μ΄ κ°μ λμμ΅λλ€.
μ΄μ μλ isBlurκ° trueμΌ λ νμ 미리보기λ₯Ό μ κ±°νμ§λ§, μ΄μ λ valueκ° μ‘΄μ¬ν λλ§ μ κ±°νλλ‘ μμ λμ΄ λ μμ μ μΈ λμμ΄ κ°λ₯ν΄μ‘μ΅λλ€.
tailwind.config.ts (1)
60-60: flexBasis κ° λ³κ²½μ΄ λ μ΄μμμ λ―ΈμΉλ μν₯μ νμΈν΄μ£ΌμΈμ.
flexBasis κ°μ΄ 228pxμμ 268pxλ‘ 40px μ¦κ°νμ΅λλ€. μ΄ λ³κ²½μ΄ μλλ κ²μ΄λΌλ©΄ λ¬Έμ μμ΄ λ³΄μ΄λ, λ€μ μ¬νλ€μ νμΈν΄μ£Όμλ©΄ μ’κ² μ΅λλ€:
- λͺ¨λ λ°μν λ μ΄μμμμ μ μμ μΌλ‘ νμλλμ§
- λλ‘λ€μ΄μ΄λ λͺ¨λ¬ λ± κ΄λ ¨ μ»΄ν¬λνΈλ€μ μ λ ¬μ΄ κΉ¨μ§μ§ μλμ§
λ€μ μ€ν¬λ¦½νΈλ‘ μ΄ κ°μ μ¬μ©νλ μ»΄ν¬λνΈλ€μ νμΈν μ μμ΅λλ€:
κ°λ₯νλ€λ©΄ μ΄ νΉμ κ°(268px)μ μ νν μ΄μ λ₯Ό μ£ΌμμΌλ‘ λ¬Έμννλ©΄ μ’μ κ² κ°μ΅λλ€.
β Verification successful
The previous command failed because the typescript type wasn't recognized. Let's try a broader search to find any usage of this class or the specific pixel value, and also list UI files to understand what file extensions we should be looking at.
μ΄μ κ²μμμ basis-67 ν΄λμ€κ° src/app/(crew)/page.tsxμμ μ¬μ©λλ κ²μ νμΈνμ΅λλ€. μ΄ μ»΄ν¬λνΈμ λ μ΄μμ 컨ν
μ€νΈλ₯Ό λ μμΈν νμ
νκΈ° μν΄ μΆκ° κ²μμ μ€ννκ² μ΅λλ€.
flexBasis κ° λ³κ²½μ΄ μμ ν κ²μΌλ‘ νμΈλμμ΅λλ€.
κ²μ κ²°κ³Όλ₯Ό λΆμν κ²°κ³Ό, basis-67 ν΄λμ€λ λλ‘λ€μ΄ μ»΄ν¬λνΈλ₯Ό ν¬ν¨νλ 컨ν
μ΄λμμ μ¬μ©λλ©°, λͺ¨λ°μΌ(md: λ―Έλμ΄ μΏΌλ¦¬ μ΄μ)μμλ§ μ μ©λ©λλ€. μ΄ μ»¨ν
μ΄λλ λ€μκ³Ό κ°μ μμ ν λ μ΄μμ ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€:
- λΆλͺ¨ μμκ°
flex-colμμmd:flex-rowλ‘ μ νλλ λ°μν ꡬ쑰 - νμ μμκ°
flex-1μ μ¬μ©νμ¬ λ¨μ 곡κ°μ μλμΌλ‘ μ‘°μ
λ°λΌμ 268pxλ‘μ λ³κ²½μ΄ μ 체 λ μ΄μμμ λΆμ μ μΈ μν₯μ λ―ΈμΉμ§ μμ κ²μΌλ‘ νλ¨λ©λλ€.
π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Find components using basis-67 class
# Expected: List of files using this Tailwind class
rg "basis-67" --type=typescript --type=tsx
Length of output: 77
Script:
#!/bin/bash
# Search for basis-67 class usage in all files
rg "basis-67"
# Also search for the specific pixel value
rg "268px"
# List all potential UI files to ensure we don't miss any file types
fd -e tsx -e jsx -e vue -e svelte
Length of output: 6640
Script:
#!/bin/bash
# Let's check the context of the basis-67 usage in page.tsx
rg "basis-67" src/app/\(crew\)/page.tsx -B 2 -A 2
# Check the parent component structure
rg "flex|grid" src/app/\(crew\)/page.tsx -B 2 -A 2
Length of output: 899
src/app/(crew)/crew/_components/gathering-detail-modal/presenter.tsx (1)
41-41: μ€ν¬λ‘€ μμ ꡬμ±μ΄ κ°μ λμμ΅λλ€.
Modal μ»΄ν¬λνΈμ ScrollArea.Autosizeλ₯Ό μ μ©νμ¬ μ½ν μΈ ν¬κΈ°μ λ°λΌ μλμΌλ‘ μ‘°μ λλ μ€ν¬λ‘€ μμμ ꡬνν κ²μ΄ μ’μ΅λλ€.
src/app/(crew)/crew/_components/create-crew-form/index.tsx (1)
34-35: νΌ κ²μ¦ λ‘μ§μ΄ μ μ ν κ°μ λμμ΅λλ€.
triggerμ clearErrors λ©μλλ₯Ό μΆκ°νμ¬ μΈλ°ν νΌ κ²μ¦ μ μ΄κ° κ°λ₯ν΄μ‘μ΅λλ€.
|
|
||
| const Template: StoryFn<FileSampleProps> = function FileInputStory(args: FileSampleProps) { | ||
| const [selectedFile, setSelectedFile] = useState<File | StaticImageData | null>(null); | ||
| const [setSelectedFile] = useState<File | StaticImageData | null>(null); |
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.
μν κ΄λ¦¬ λ‘μ§μ μ¬κ°ν μ€λ₯κ° μμ΅λλ€.
useState μ μΈμμ selectedFile μν λ³μκ° λλ½λμ΄ μμ΄ νμΌ μ ν κΈ°λ₯μ΄ μ λλ‘ λμνμ§ μμ΅λλ€. handleFileChange ν¨μμμ setSelectedFileμ νΈμΆνκ³ μμ§λ§, μ νλ νμΌμ μνκ° μΆμ λμ§ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ μμ ν΄μ£ΌμΈμ:
- const [setSelectedFile] = useState<File | StaticImageData | null>(null);
+ const [selectedFile, setSelectedFile] = useState<File | StaticImageData | null>(null);π 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 [setSelectedFile] = useState<File | StaticImageData | null>(null); | |
| const [selectedFile, setSelectedFile] = useState<File | StaticImageData | null>(null); |
| const handleChange = (newValue: string | null) => { | ||
| onChange(newValue); | ||
| setIsFocused(false); | ||
| inputRef.current?.blur(); | ||
| }; |
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
μ΄λ²€νΈ νΈλ€λ¬μ μλ¬ μ²λ¦¬ λ‘μ§ μΆκ°κ° νμν©λλ€.
handleChange ν¨μμμ inputRef.currentκ° nullμΌ κ²½μ°μ λν μ²λ¦¬κ° νμν©λλ€. λν onChange νΈμΆ μ€ν¨ μμ μλ¬ μ²λ¦¬λ κ³ λ €ν΄μΌ ν©λλ€.
const handleChange = (newValue: string | null) => {
try {
onChange(newValue);
setIsFocused(false);
inputRef.current?.blur();
} catch (error) {
console.error('λλ‘λ€μ΄ κ° λ³κ²½ μ€ μ€λ₯ λ°μ:', error);
// μλ¬ μ²λ¦¬ λ‘μ§ μΆκ°
}
};| <ScrollArea h={152}> | ||
| <ul className="grid grid-cols-2 gap-4"> | ||
| {data?.participants.map((participant) => ( | ||
| <li key={participant.id} className="flex items-center gap-2"> | ||
| <figure className="relative h-10 w-10 overflow-hidden rounded-full"> | ||
| <Profile imageUrl={participant?.profileImageUrl} /> | ||
| </figure> | ||
| <span className="text-base font-medium">{participant?.nickname}</span> | ||
| </li> | ||
| ))} | ||
| </ul> | ||
| </ScrollArea> |
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
μ°Έμ¬μ λͺ©λ‘μ μ±λ₯ μ΅μ ν μ μ
νμ¬ κ΅¬νμ μλνμ§λ§, μ°Έμ¬μ μκ° λ§μ κ²½μ° μ±λ₯ μ΄μκ° λ°μν μ μμ΅λλ€.
λ€μκ³Ό κ°μ μ΅μ νλ₯Ό μ μλ립λλ€:
-<ScrollArea h={152}>
+<ScrollArea h={152} type="always">
<ul className="grid grid-cols-2 gap-4">
- {data?.participants.map((participant) => (
+ {data?.participants.slice(0, 20).map((participant) => (
<li key={participant.id} className="flex items-center gap-2">μΆκ°λ‘ 무ν μ€ν¬λ‘€ ꡬνμ κ³ λ €ν΄λ³΄μλ©΄ μ’μ κ² κ°μ΅λλ€.
π 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.
| <ScrollArea h={152}> | |
| <ul className="grid grid-cols-2 gap-4"> | |
| {data?.participants.map((participant) => ( | |
| <li key={participant.id} className="flex items-center gap-2"> | |
| <figure className="relative h-10 w-10 overflow-hidden rounded-full"> | |
| <Profile imageUrl={participant?.profileImageUrl} /> | |
| </figure> | |
| <span className="text-base font-medium">{participant?.nickname}</span> | |
| </li> | |
| ))} | |
| </ul> | |
| </ScrollArea> | |
| <ScrollArea h={152} type="always"> | |
| <ul className="grid grid-cols-2 gap-4"> | |
| {data?.participants.slice(0, 20).map((participant) => ( | |
| <li key={participant.id} className="flex items-center gap-2"> | |
| <figure className="relative h-10 w-10 overflow-hidden rounded-full"> | |
| <Profile imageUrl={participant?.profileImageUrl} /> | |
| </figure> | |
| <span className="text-base font-medium">{participant?.nickname}</span> | |
| </li> | |
| ))} | |
| </ul> | |
| </ScrollArea> |
| {isToday(data?.dateTime) && ( | ||
| <strong className="absolute right-0 top-0 flex items-center gap-2 bg-blue-600 px-4 py-2 text-base font-medium text-white"> | ||
| <Image src={IcoClock} width={15} height={13} alt="μμ΄μ½" /> | ||
| <span>μ€λ {new Date(data?.dateTime).getHours()}μ λ§κ°</span> | ||
| </strong> | ||
| )} |
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
μκ°λ μ²λ¦¬ κ΄λ ¨ μ μ¬μ λ¬Έμ μ λ°κ²¬
νμ¬ κ΅¬νμμ λ€μκ³Ό κ°μ μκ°λ κ΄λ ¨ λ¬Έμ κ° μμ΅λλ€:
isTodayν¨μλ λ¨μνDateκ°μ²΄μ κΈ°λ³Έ λ©μλλ§ μ¬μ©νμ¬ λ μ§λ₯Ό λΉκ΅ν©λλ€.- DateTimePicker μ»΄ν¬λνΈμμλ 'UTC' νμμ‘΄μ λͺ μμ μΌλ‘ μ€μ νκ³ μμ΅λλ€.
- λ μ§ ν¬λ§·ν
μ νΈλ¦¬ν°λ€λ νμμ‘΄μ κ³ λ €νμ§ μμ μ± κΈ°λ³Έ
Dateκ°μ²΄ λ©μλλ§ μ¬μ©ν©λλ€.
μ΄λ‘ μΈν΄:
- μ¬μ©μμ λ‘컬 μκ°κ³Ό μλ² μκ° μ¬μ΄μ λΆμΌμΉκ° λ°μν μ μμ΅λλ€.
- μμ λ¬΄λ ΅μλ "μ€λ" νλ¨μ΄ μλͺ»λ μ μμ΅λλ€.
π Analysis chain
μ€λμ λͺ¨μ νμ λ‘μ§ κ²μ¦ νμ
isToday ν¨μλ₯Ό ν΅ν λ μ§ νμΈμ μ μ νλ, μκ°λ(timezone) μ²λ¦¬μ λν κ²μ¦μ΄ νμν΄ λ³΄μ λλ€.
Let me gather more information about the timezone handling in the codebase.
Let me check the format-date utility and other date-related implementations.
π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify timezone handling in isToday function
rg -A 5 "isToday" src/utils/
Length of output: 352
Script:
#!/bin/bash
# Search for any timezone related configurations or utilities
rg -i "timezone|getTimezoneOffset|toLocaleString"
# Search for date utility functions
fd "date" --type f --exec rg -l "new Date"
Length of output: 613
Script:
#!/bin/bash
# Check format-date utility implementation
cat src/utils/format-date.ts
# Check date-time-picker implementation for timezone handling
cat src/components/common/input/date-time-picker/index.tsx
Length of output: 4779
| <Button | ||
| type="submit" | ||
| disabled={!isFormValid} | ||
| disabled={!isValid} |
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
νΌ μ μΆ λ²νΌμ λΉνμ±ν 쑰건 κ°μ νμ
νμ¬ isValid μνλ§μΌλ‘ λ²νΌμ λΉνμ±ννλ κ²μ μΆ©λΆνμ§ μμ μ μμ΅λλ€. νΌμ΄ μ μΆ μ€μΌ λλ λ²νΌμ λΉνμ±νν΄μΌ ν©λλ€.
<Button
type="submit"
- disabled={!isValid}
+ disabled={!isValid || formState.isSubmitting}
className="btn-filled h-11 flex-1 text-base font-medium disabled:bg-gray-200"
>π 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.
| disabled={!isValid} | |
| disabled={!isValid || formState.isSubmitting} |
| variant="filled" | ||
| onChange={(e) => { | ||
| field.onChange(e); | ||
| if (errors.location) trigger('title'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° |
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.
μ€ν μμ νμ
trigger('title')μ΄ trigger('location')μΌλ‘ μμ λμ΄μΌ ν©λλ€.
-if (errors.location) trigger('title');
+if (errors.location) trigger('location');π 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.
| if (errors.location) trigger('title'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° | |
| if (errors.location) trigger('location'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° |
| onChange={(date) => { | ||
| const formattedDate = date.toLocaleString(); | ||
| onChange(formattedDate); | ||
| trigger('imageUrl'); // μ ν¨μ± κ²μ¬ μ€ν |
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.
μλͺ»λ νΈλ¦¬κ±° λμ
trigger('imageUrl')μ΄ trigger('dateTime')μΌλ‘ μμ λμ΄μΌ ν©λλ€.
-trigger('imageUrl');
+trigger('dateTime');π 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.
| trigger('imageUrl'); // μ ν¨μ± κ²μ¬ μ€ν | |
| trigger('dateTime'); // μ ν¨μ± κ²μ¬ μ€ν |
| <Controller | ||
| name="imageUrl" | ||
| control={control} | ||
| rules={{ required: 'μ΄λ―Έμ§λ₯Ό μ νν΄μ£ΌμΈμ.' }} | ||
| render={({ field }) => ( | ||
| <FileInputWrap | ||
| {...field} | ||
| sample={ImgGatheringSamples} | ||
| onChange={(e) => { | ||
| field.onChange(e); | ||
| trigger('imageUrl'); // μ ν¨μ± κ²μ¬ μ€ν | ||
| }} | ||
| /> | ||
| )} |
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.
μ΄λ―Έμ§ μ λ‘λ μ»΄ν¬λνΈμ μλ¬ μ²λ¦¬ κ°μ νμ
νμ¬ μ΄λ―Έμ§ μ λ‘λ μ λ°μν μ μλ λ€μν μλ¬ μν©(νμΌ ν¬κΈ°, νμ λ±)μ λν μ²λ¦¬κ° λλ½λμ΄ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ μλ¬ μ²λ¦¬λ₯Ό μΆκ°ν΄λ³΄μΈμ:
rules={{
- required: 'μ΄λ―Έμ§λ₯Ό μ νν΄μ£ΌμΈμ.'
+ required: 'μ΄λ―Έμ§λ₯Ό μ νν΄μ£ΌμΈμ.',
+ validate: {
+ fileSize: (file) =>
+ file.size <= 5000000 || 'νμΌ ν¬κΈ°λ 5MB μ΄νμ¬μΌ ν©λλ€.',
+ fileType: (file) =>
+ ['image/jpeg', 'image/png'].includes(file.type) ||
+ 'JPG, PNG νμΌλ§ μ
λ‘λ κ°λ₯ν©λλ€.',
+ }
}}Committable suggestion skipped: line range outside the PR's diff.
| <span className="text-blue-500">{title.length}</span>/20 | ||
| </span> | ||
| </div> | ||
| <TextInput | ||
| id="gathering-title" | ||
| variant="filled" | ||
| value={values.title} | ||
| register={{ | ||
| ...register('title', { | ||
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | ||
| pattern: /^[γ±-γ |γ -γ £|κ°-ν£|a-z|A-Z|0-9| ]{1,20}$/, | ||
| onBlur: () => trigger('title'), | ||
| }), | ||
| }} | ||
| error={errors.title?.message?.toString()} | ||
| onChange={(e) => | ||
| setValues((prevValues) => { | ||
| if (e.target.value.length <= 20) { | ||
| return { ...prevValues, title: e.target.value }; | ||
| <Controller | ||
| name="title" | ||
| control={control} | ||
| rules={{ | ||
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | ||
| validate: (value) => { | ||
| if (value && value.trim().length > 0) { | ||
| return true; // μ λ ₯μ΄ μμ κ²½μ° μλ¬ ν΄μ | ||
| } | ||
| return prevValues; | ||
| }) | ||
| } | ||
| placeholder="μ½μ μ΄λ¦μ 20μ μ΄λ΄λ‘ μ λ ₯ν΄μ£ΌμΈμ." | ||
| maxLength={20} | ||
| classNames={{ | ||
| input: | ||
| 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl aria-[invalid=true]:border-none', | ||
| return 'νμ μ λ ₯μ¬νμ λλ€.'; // μ λ ₯μ΄ λΉμ΄μμ κ²½μ° μλ¬ λ©μμ§ νμ | ||
| }, | ||
| }} | ||
| render={({ field }) => ( | ||
| <TextInput | ||
| {...field} | ||
| id="gathering-title" | ||
| variant="filled" | ||
| onChange={(e) => { | ||
| field.onChange(e); | ||
| if (errors.title) trigger('title'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° | ||
| }} | ||
| error={errors.title?.message} | ||
| placeholder="μ½μλͺ μ 20μ μ΄λ΄λ‘ μ λ ₯ν΄μ£ΌμΈμ." | ||
| maxLength={20} | ||
| classNames={{ | ||
| input: | ||
| 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl aria-[invalid=true]:border-none', | ||
| }} | ||
| /> | ||
| )} |
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
μ λͺ© μ λ ₯ νλμ μ ν¨μ± κ²μ¬ λ‘μ§ κ°μ νμ
νμ¬ κ΅¬νμμ λͺ κ°μ§ κ°μ μ΄ νμν λΆλΆμ΄ μμ΅λλ€:
- κ³΅λ°±λ§ μ λ ₯λ κ²½μ°μ λν μ²λ¦¬κ° μ€λ³΅λμ΄ μμ΅λλ€.
- μ΅μ κΈΈμ΄ μ νμ΄ λλ½λμ΄ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ μ ν¨μ± κ²μ¬ λ‘μ§μ κ°μ ν΄λ³΄μΈμ:
rules={{
required: 'νμ μ
λ ₯μ¬νμ
λλ€.',
validate: (value) => {
- if (value && value.trim().length > 0) {
- return true;
- }
- return 'νμ μ
λ ₯μ¬νμ
λλ€.';
+ if (value.trim().length < 2) {
+ return 'μ΅μ 2μ μ΄μ μ
λ ₯ν΄μ£ΌμΈμ.';
+ }
+ return 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.
| <span className="text-blue-500">{title.length}</span>/20 | |
| </span> | |
| </div> | |
| <TextInput | |
| id="gathering-title" | |
| variant="filled" | |
| value={values.title} | |
| register={{ | |
| ...register('title', { | |
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | |
| pattern: /^[γ±-γ |γ -γ £|κ°-ν£|a-z|A-Z|0-9| ]{1,20}$/, | |
| onBlur: () => trigger('title'), | |
| }), | |
| }} | |
| error={errors.title?.message?.toString()} | |
| onChange={(e) => | |
| setValues((prevValues) => { | |
| if (e.target.value.length <= 20) { | |
| return { ...prevValues, title: e.target.value }; | |
| <Controller | |
| name="title" | |
| control={control} | |
| rules={{ | |
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | |
| validate: (value) => { | |
| if (value && value.trim().length > 0) { | |
| return true; // μ λ ₯μ΄ μμ κ²½μ° μλ¬ ν΄μ | |
| } | |
| return prevValues; | |
| }) | |
| } | |
| placeholder="μ½μ μ΄λ¦μ 20μ μ΄λ΄λ‘ μ λ ₯ν΄μ£ΌμΈμ." | |
| maxLength={20} | |
| classNames={{ | |
| input: | |
| 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl aria-[invalid=true]:border-none', | |
| return 'νμ μ λ ₯μ¬νμ λλ€.'; // μ λ ₯μ΄ λΉμ΄μμ κ²½μ° μλ¬ λ©μμ§ νμ | |
| }, | |
| }} | |
| render={({ field }) => ( | |
| <TextInput | |
| {...field} | |
| id="gathering-title" | |
| variant="filled" | |
| onChange={(e) => { | |
| field.onChange(e); | |
| if (errors.title) trigger('title'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° | |
| }} | |
| error={errors.title?.message} | |
| placeholder="μ½μλͺ μ 20μ μ΄λ΄λ‘ μ λ ₯ν΄μ£ΌμΈμ." | |
| maxLength={20} | |
| classNames={{ | |
| input: | |
| 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl aria-[invalid=true]:border-none', | |
| }} | |
| /> | |
| )} | |
| <span className="text-blue-500">{title.length}</span>/20 | |
| </span> | |
| </div> | |
| <Controller | |
| name="title" | |
| control={control} | |
| rules={{ | |
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | |
| validate: (value) => { | |
| if (value.trim().length < 2) { | |
| return 'μ΅μ 2μ μ΄μ μ λ ₯ν΄μ£ΌμΈμ.'; | |
| } | |
| return true; | |
| }, | |
| }} | |
| render={({ field }) => ( | |
| <TextInput | |
| {...field} | |
| id="gathering-title" | |
| variant="filled" | |
| onChange={(e) => { | |
| field.onChange(e); | |
| if (errors.title) trigger('title'); // μ λ ₯ μ€μΌ λ μ ν¨μ± κ²μ¬ νΈλ¦¬κ±° | |
| }} | |
| error={errors.title?.message} | |
| placeholder="μ½μλͺ μ 20μ μ΄λ΄λ‘ μ λ ₯ν΄μ£ΌμΈμ." | |
| maxLength={20} | |
| classNames={{ | |
| input: | |
| 'h-11 py-2.5 px-4 bg-gray-100 placeholder:text-gray-400 font-pretendard text-base font-medium rounded-xl aria-[invalid=true]:border-none', | |
| }} | |
| /> | |
| )} |
| <Controller | ||
| name="subLocation" | ||
| control={control} | ||
| rules={{ required: 'μ/κ΅°/ꡬλ₯Ό μ νν΄μ£ΌμΈμ.' }} |
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
μλ¬ λ©μμ§ νμ λ°©μμ μΌκ΄μ± κ°μ μ΄ νμν©λλ€.
νμ¬ μμΉ κ΄λ ¨ νλλ€μ μλ¬ λ©μμ§ νμ λ°©μμ΄ μΌκ΄μ μ΄μ§ μμ΅λλ€:
mainLocationμ νλ¨μ λ³λλ‘ νμsubLocationμ λλ‘λ€μ΄ λ΄λΆμ νμ
λ€μκ³Ό κ°μ΄ ν΅μΌλ λ°©μμΌλ‘ μμ νλ κ²μ μ μλ립λλ€:
- {errors.mainLocation && <p className="text-red-500">{errors.mainLocation.message}</p>}
+ <div className="flex flex-col gap-1">
+ {errors.mainLocation && <p className="text-red-500 text-sm">{errors.mainLocation.message}</p>}
+ {errors.subLocation && <p className="text-red-500 text-sm">{errors.subLocation.message}</p>}
+ </div>Also applies to: 219-219
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-ceyzmeiacf.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: 6
π§Ή Outside diff range and nitpick comments (8)
src/components/common/input/drop-down/index.tsx (2)
42-52: μ€νμΌ λ‘μ§ λ¨μνκ° νμν©λλ€.
getFocusStyleν¨μμ 쑰건문μ λ¨μννμ¬ κ°λ μ±μ κ°μ ν μ μμ΅λλ€.λ€μκ³Ό κ°μ΄ κ°μ ν΄λ³΄μΈμ:
- const getFocusStyle = () => { - if (variant === 'default') { - return isFocused - ? 'focus:bg-black focus:text-white focus:placeholder:text-white' - : 'bg-white text-gray-800 placeholder-gray-800'; - } - - return isFocused - ? 'focus:bg-black focus:text-white focus:placeholder:text-white sort-bg-on pl-10' - : 'bg-white text-gray-800 placeholder-gray-800 sort-bg pl-10'; - }; + const getFocusStyle = () => { + const baseStyle = isFocused + ? 'focus:bg-black focus:text-white focus:placeholder:text-white' + : 'bg-white text-gray-800 placeholder-gray-800'; + + return variant === 'default' + ? baseStyle + : `${baseStyle} ${isFocused ? 'sort-bg-on' : 'sort-bg'} pl-10`; + };
Line range hint
81-87: μ€νμΌ ν΄λμ€ κ΄λ¦¬ κ°μ μ΄ νμν©λλ€.볡μ‘ν classNames λ‘μ§μ μμλ‘ λΆλ¦¬νμ¬ κ΄λ¦¬νλ©΄ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλ κ² κ°μ΅λλ€.
λ€μκ³Ό κ°μ΄ κ°μ ν΄λ³΄μΈμ:
const BASE_INPUT_CLASSES = 'font-pretendard h-10 md:h-11 text-base font-medium rounded-xl border-0 py-2.5 px-3'; const BASE_OPTION_CLASSES = 'py-1 m-1 px-2 mr-0 rounded-xl font-pretendard text-gray-800 text-base font-medium hover:bg-blue-100'; // μ»΄ν¬λνΈ λ΄λΆ classNames={{ root: className, input: `${getFocusStyle()} ${formStyle} ${BASE_INPUT_CLASSES}`, section: `end-1 ${variant === 'sort' && 'data-[position=right]:hidden start-1'}`, dropdown: 'rounded-xl shadow-xl p-0 border-0 mt-2', option: `${BASE_OPTION_CLASSES} ${variant === 'sort' && 'justify-center'}`, }}src/app/(crew)/crew/_components/create-gathering-form/index.tsx (2)
37-39: μ±λ₯ μ΅μ ν μ μ
useWatchλ₯Ό μ¬μ©νμ¬ λ¬Έμ μλ₯Ό κ³μ°νλ λ°©μμ λΆνμν 리λ λλ§μ μ λ°ν μ μμ΅λλ€. λμ λ€μκ³Ό κ°μ μ΅μ νλ λ°©λ²μ κ³ λ €ν΄λ³΄μΈμ:-const title = useWatch({ control, name: 'title' }); -const location = useWatch({ control, name: 'location' }); -const introduce = useWatch({ control, name: 'introduce' }); +const CharacterCount = ({ control, name }: { control: Control<any>; name: string }) => { + const value = useWatch({ control, name }); + return <span className="text-blue-500">{value.length}</span>; +};μ΄λ κ² νλ©΄ κ°λ³ νλμ λ¬Έμ μκ° λ³κ²½λ λλ§ ν΄λΉ μΉ΄μ΄ν° μ»΄ν¬λνΈκ° 리λ λλ§λ©λλ€.
168-170: λͺ¨μ§ μ μμ μλ¬ λ©μμ§ κ°μ νμνμ¬ μλ¬ λ©μμ§κ° λ무 λ¨μν©λλ€. μ΅μ/μ΅λ μΈμμ λν μλ΄λ ν¬ν¨λμ΄μΌ ν©λλ€.
rules={{ required: 'λͺ¨μ§ μ μμ μ λ ₯ν΄μ£ΌμΈμ.', + min: { + value: 4, + message: 'μ΅μ 4λͺ μ΄μ μ λ ₯ν΄μ£ΌμΈμ.' + }, + max: { + value: 20, + message: 'μ΅λ 20λͺ κΉμ§ μ λ ₯ κ°λ₯ν©λλ€.' + } }}mock.json (4)
375-376: λ μ§ νμμ λ―Έλ μμ μ€μ λ¬Έμ λͺ¨λ
createdDateμupdatedDateκ° 2024λ 11μλ‘ μ€μ λμ΄ μμ΅λλ€. ν μ€νΈ λ°μ΄ν°μ νμ€μ±μ μν΄ λ€μκ³Ό κ°μ΄ μμ μ΄ νμν©λλ€:
- νμ¬ μμ κΈ°μ€μΌλ‘ κ³Όκ±° λ μ§ μ¬μ©
createdDateμupdatedDateκ°μ λ Όλ¦¬μ μκ° μμ μ μ§Also applies to: 395-396, 415-416, 435-436, 455-456, 475-476, 495-496, 515-516, 535-536, 555-556
391-391: μ΄λ―Έμ§ URLμ μμ μ± λ¬Έμ μΈλΆ μ΄λ―Έμ§ URLμ μ§μ μ°Έμ‘°νκ³ μμ΅λλ€. λ€μκ³Ό κ°μ κ°μ μ΄ κΆμ₯λ©λλ€:
- ν μ€νΈμ© λ‘컬 μ΄λ―Έμ§ μ¬μ©
- CDNμ ν΅ν μ΄λ―Έμ§ μ 곡
- μ΄λ―Έμ§ URLμ μ ν¨μ± κ²μ¦ λ‘μ§ μΆκ°
Also applies to: 411-411, 431-431, 451-451, 471-471, 491-491, 511-511, 531-531, 551-551
575-578: λΆμμ ν μ¬μ©μ νλ‘ν λ°μ΄ν°CrewMembers λ°μ΄ν°μμ 첫 λ²μ§Έ λ©€λ²μ νλ‘ν μ΄λ―Έμ§κ° λλ½λμμ΅λλ€. λ°μ΄ν° μΌκ΄μ±μ μν΄ λ€μ μ¬νμ νμΈν΄μ£ΌμΈμ:
- λͺ¨λ λ©€λ²μ λν΄ λμΌν λ°μ΄ν° ꡬ쑰 μ μ§
- νμ νλμ λν κΈ°λ³Έκ° μ€μ
695-695: 리뷰 λ°μ΄ν°μ μκ° μ λ ¬ λ¬Έμ 리뷰 λ°μ΄ν°μ
createdAtνμμ€ν¬νκ° μκ° μμλλ‘ μ λ ¬λμ΄ μμ§ μμ΅λλ€. λ°μ΄ν°μ μΌκ΄μ±μ μν΄ λ€μμ μ μν©λλ€:
- μκ° μμλλ‘ λ¦¬λ·° λ°μ΄ν° μ λ ¬
- 리뷰 IDμ μμ± μκ°μ μ°κ΄μ± μ μ§
Also applies to: 707-707, 719-719, 731-731, 743-743, 755-755, 767-767
π Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
π Files selected for processing (8)
mock.json(17 hunks)src/app/(crew)/crew/_components/create-crew-form/index.tsx(9 hunks)src/app/(crew)/crew/_components/create-gathering-form/index.tsx(5 hunks)src/app/(crew)/crew/_components/gathering-detail-modal/presenter.tsx(1 hunks)src/app/(crew)/crew/detail/[id]/page.tsx(1 hunks)src/components/common/input/drop-down/index.tsx(5 hunks)src/mock/review-data.ts(27 hunks)src/utils/is-today.ts(1 hunks)
π§ Files skipped from review as they are similar to previous changes (3)
- src/app/(crew)/crew/_components/create-crew-form/index.tsx
- src/app/(crew)/crew/_components/gathering-detail-modal/presenter.tsx
- src/app/(crew)/crew/detail/[id]/page.tsx
π Additional comments (5)
src/utils/is-today.ts (1)
4-8: νκ΅ μκ°λ μ²λ¦¬κ° μ¬λ°λ₯΄κ² ꡬνλμμ΅λλ€.
UTC κΈ°μ€μΌλ‘ λ³ν ν νκ΅ μκ°λ(UTC+9)λ‘ μ‘°μ νλ λ‘μ§μ΄ μ νν©λλ€.
src/components/common/input/drop-down/index.tsx (2)
14-15: Props μΈν°νμ΄μ€ κ°μ μ΄ μ λμμ΅λλ€!
νΌ μ ν¨μ± κ²μ¬λ₯Ό μν error propκ³Ό μ
λ ₯ μμ μ°Έμ‘°λ₯Ό μν ref propμ΄ μ μ νκ² μΆκ°λμμ΅λλ€.
Line range hint 1-101: νΌ μ ν¨μ± κ²μ¬ ν΅ν© νμΈμ΄ νμν©λλ€.
μ»΄ν¬λνΈκ° react-hook-formμ μ ν¨μ± κ²μ¬μ μ¬λ°λ₯΄κ² ν΅ν©λλμ§ νμΈν΄μ£ΌμΈμ.
β Verification successful
νΌ μ ν¨μ± κ²μ¬κ° μ¬λ°λ₯΄κ² ꡬνλμ΄ μμμ νμΈνμ΅λλ€.
κ²μ κ²°κ³Όλ₯Ό ν΅ν΄ λ€μ μ¬νλ€μ νμΈνμ΅λλ€:
create-crew-formμμreact-hook-formκ³Ό ν¨κ»DropDownμ»΄ν¬λνΈκ° μ¬μ©λκ³ μμΌλ©°,errorpropμ ν΅ν΄ μ ν¨μ± κ²μ¬ μ€λ₯λ₯Ό νμνκ³ μμ΅λλ€.Controllerμ»΄ν¬λνΈλ₯Ό ν΅ν΄ νΌ μ»¨νΈλ‘€μ΄ μ μ ν μ°λλμ΄ μμ΅λλ€.- μΈλΆ μΉ΄ν κ³ λ¦¬μ μμΉ μ νμμ μ€λ₯ λ©μμ§κ° μ¬λ°λ₯΄κ² νμλλλ‘ κ΅¬νλμ΄ μμ΅λλ€.
π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check integration with react-hook-form
# Test: Search for DropDown usage within form components
rg -A 5 "DropDown.*error=" src/
Length of output: 33
Script:
#!/bin/bash
# Search for any usage of DropDown component in form contexts
rg -A 10 "<DropDown" src/
# Search for form validation related imports
rg "import.*react-hook-form" src/
# Search for form components that might use DropDown
fd -e tsx -e ts -e jsx -e js --full-path ".*form.*" src/
Length of output: 10511
src/app/(crew)/crew/_components/create-gathering-form/index.tsx (1)
213-213: νΌ μ μΆ λ²νΌ μν μ²λ¦¬κ° μ μ ν©λλ€
isValidμ isSubmitting μνλ₯Ό λͺ¨λ κ³ λ €νμ¬ λ²νΌμ λΉνμ±ν μνλ₯Ό κ΄λ¦¬νκ³ μμ΅λλ€.
src/mock/review-data.ts (1)
14-14: νμμ€ν¬ν νμμ΄ μ¬λ°λ₯΄κ² μ
λ°μ΄νΈλμμ΅λλ€!
ISO 8601 νμκ³Ό νμμ‘΄ μ 보λ₯Ό ν¬ν¨νλλ‘ μΌκ΄λκ² λ³κ²½λμ΄ μμ΅λλ€.
Also applies to: 26-26, 38-38, 50-50, 62-62, 74-74, 86-86, 98-98, 110-110, 122-122, 134-134, 146-146, 158-158, 170-170, 182-182, 194-194, 206-206
src/utils/is-today.ts
Outdated
| date.getDate() === koreaNow.getDate() && | ||
| date.getMonth() === koreaNow.getMonth() && | ||
| date.getFullYear() === koreaNow.getFullYear() && | ||
| date.getHours() >= koreaNow.getHours() && | ||
| date.getMinutes() >= koreaNow.getMinutes() |
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.
μκ° λΉκ΅ λ‘μ§μ μ¬κ°ν μ€λ₯κ° μμ΅λλ€.
νμ¬ κ΅¬νλ μκ° λΉκ΅ λ°©μμλ λ€μκ³Ό κ°μ λ¬Έμ κ° μμ΅λλ€:
- μκ°κ³Ό λΆμ κ°λ³μ μΌλ‘ λΉκ΅νλ©΄ μλͺ»λ κ²°κ³Όκ° λ°μν μ μμ΅λλ€.
- μ: νμ¬ μκ°μ΄ 14:30μ΄κ³ μ λ ₯ μκ°μ΄ 15:20μΈ κ²½μ°, λΆ λΉκ΅μμ falseλ₯Ό λ°νν©λλ€.
λ€μκ³Ό κ°μ΄ μμ νλ κ²μ μ μν©λλ€:
return (
date.getDate() === koreaNow.getDate() &&
date.getMonth() === koreaNow.getMonth() &&
date.getFullYear() === koreaNow.getFullYear() &&
- date.getHours() >= koreaNow.getHours() &&
- date.getMinutes() >= koreaNow.getMinutes()
+ date.getTime() >= koreaNow.getTime()
);π 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.
| date.getDate() === koreaNow.getDate() && | |
| date.getMonth() === koreaNow.getMonth() && | |
| date.getFullYear() === koreaNow.getFullYear() && | |
| date.getHours() >= koreaNow.getHours() && | |
| date.getMinutes() >= koreaNow.getMinutes() | |
| date.getDate() === koreaNow.getDate() && | |
| date.getMonth() === koreaNow.getMonth() && | |
| date.getFullYear() === koreaNow.getFullYear() && | |
| date.getTime() >= koreaNow.getTime() |
| rules={{ | ||
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | ||
| }} |
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
μ λͺ© νλμ μ ν¨μ± κ²μ¬ κ°ν νμ
νμ¬ νμ μ λ ₯ κ²μ¬λ§ λμ΄μμ΅λλ€. μ΅μ κΈΈμ΄ μ νλ μΆκ°νλ κ²μ΄ μ’κ² μ΅λλ€.
rules={{
required: 'νμ μ
λ ₯μ¬νμ
λλ€.',
+ minLength: {
+ value: 2,
+ message: 'μ΅μ 2μ μ΄μ μ
λ ₯ν΄μ£ΌμΈμ.'
+ },
+ validate: {
+ notOnlyWhitespace: (value) =>
+ value.trim().length > 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.
| rules={{ | |
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | |
| }} | |
| rules={{ | |
| required: 'νμ μ λ ₯μ¬νμ λλ€.', | |
| minLength: { | |
| value: 2, | |
| message: 'μ΅μ 2μ μ΄μ μ λ ₯ν΄μ£ΌμΈμ.' | |
| }, | |
| validate: { | |
| notOnlyWhitespace: (value) => | |
| value.trim().length > 0 || '곡백λ§μΌλ‘λ μ λͺ©μ μμ±ν μ μμ΅λλ€.' | |
| } | |
| }} |
| rules={{ required: 'λ μ§μ μκ°μ μ νν΄μ£ΌμΈμ.' }} | ||
| render={({ field: { onChange, ...field } }) => ( | ||
| <DateTimePicker | ||
| {...field} | ||
| fullDate={new Date()} | ||
| onChange={(date) => { | ||
| const formattedDate = date.toLocaleString(); | ||
| onChange(formattedDate); | ||
| trigger('dateTime'); // μ ν¨μ± κ²μ¬ μ€ν | ||
| }} |
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
λ μ§ μ νμ μ ν¨μ± κ²μ¬ κ°ν νμ
νμ¬ κ΅¬νμμλ κ³Όκ±° λ μ§ μ νμ λ°©μ§νλ λ‘μ§μ΄ μμ΅λλ€.
rules={{
required: 'λ μ§μ μκ°μ μ νν΄μ£ΌμΈμ.',
+ validate: {
+ isFuture: (value) => {
+ const selectedDate = new Date(value);
+ return selectedDate > new Date() || 'νμ¬ μκ° μ΄νλ‘ μ νν΄μ£ΌμΈμ.';
+ }
+ }
}}π 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.
| rules={{ required: 'λ μ§μ μκ°μ μ νν΄μ£ΌμΈμ.' }} | |
| render={({ field: { onChange, ...field } }) => ( | |
| <DateTimePicker | |
| {...field} | |
| fullDate={new Date()} | |
| onChange={(date) => { | |
| const formattedDate = date.toLocaleString(); | |
| onChange(formattedDate); | |
| trigger('dateTime'); // μ ν¨μ± κ²μ¬ μ€ν | |
| }} | |
| rules={{ | |
| required: 'λ μ§μ μκ°μ μ νν΄μ£ΌμΈμ.', | |
| validate: { | |
| isFuture: (value) => { | |
| const selectedDate = new Date(value); | |
| return selectedDate > new Date() || 'νμ¬ μκ° μ΄νλ‘ μ νν΄μ£ΌμΈμ.'; | |
| } | |
| } | |
| }} | |
| render={({ field: { onChange, ...field } }) => ( | |
| <DateTimePicker | |
| {...field} | |
| fullDate={new Date()} | |
| onChange={(date) => { | |
| const formattedDate = date.toLocaleString(); | |
| onChange(formattedDate); | |
| trigger('dateTime'); // μ ν¨μ± κ²μ¬ μ€ν | |
| }} |
| rate: 3, | ||
| comment: '리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰리뷰', | ||
| createdAt: '2024-10-31T00:56', | ||
| createdAt: '2024-11-09T10:09:12.306+09:00', |
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.
νμμ€ν¬ν νμμ λΆμΌμΉλ₯Ό μμ ν΄ μ£ΌμΈμ
MyReviewData λ΄μ μΌλΆ νμμ€ν¬νκ° μλ‘ λ€λ₯Έ νμμ μ¬μ©νκ³ μμ΅λλ€:
- μΌλΆλ ISO 8601 νμ μ¬μ©:
2024-10-31T10:09:12.306+09:00 - μΌλΆλ μ΄μ νμ μ¬μ©:
2024-10-31T00:56
μ΄λ¬ν λΆμΌμΉλ λ€μκ³Ό κ°μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€:
- λ μ§ νμ± μ€λ₯
- μκ°λ μ²λ¦¬ λ¬Έμ
- μ λ ¬ λ° νν°λ§ μ€μλ
λͺ¨λ νμμ€ν¬νλ₯Ό λ€μ ISO 8601 νμμΌλ‘ ν΅μΌν΄ μ£ΌμΈμ:
- createdAt: '2024-10-31T00:56',
+ createdAt: '2024-10-31T00:56:00.000+09:00',Also applies to: 236-236, 246-246, 276-276, 286-286, 296-296, 306-306, 316-316, 326-326, 336-336
| }, | ||
| { | ||
| "nickname": "γ γ΄γ γΉ", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 8 | ||
| }, | ||
| { | ||
| "nickname": "γ γ΄γ γΉ", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 9 | ||
| }, | ||
| { | ||
| "nickname": "μ¨μ¨", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 10 | ||
| }, | ||
| { | ||
| "nickname": "μ¨μ¨", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 11 | ||
| }, | ||
| { | ||
| "nickname": "μ¨μ¨", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 12 | ||
| }, | ||
| { | ||
| "nickname": "μ¨μ¨", | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "confirmPassword": "asdfasdf", | ||
| "id": 13 | ||
| }, | ||
| { | ||
| "nickname": "νΈνΈ", | ||
| "email": "[email protected]", | ||
| "password": "hohohoho1", | ||
| "confirmPassword": "hohohoho1", | ||
| "id": 14 | ||
| }, | ||
| { | ||
| "nickname": "minha", | ||
| "email": "[email protected]", | ||
| "password": "test1234", | ||
| "confirmPassword": "test1234", | ||
| "id": 15 | ||
| }, | ||
| { | ||
| "nickname": "lemon", | ||
| "email": "[email protected]", | ||
| "password": "password1234!", | ||
| "confirmPassword": "password1234!", | ||
| "id": 16 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 17 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 18 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 19 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 20 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 21 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 22 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 23 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 24 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 25 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 26 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 27 | ||
| }, | ||
| { | ||
| "nickname": "dddd", | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "confirmPassword": "@@a1a2a3", | ||
| "id": 28 |
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.
λ―Όκ°ν μ¬μ©μ λ°μ΄ν° λ ΈμΆ λ¬Έμ
νμκ°μ λ°μ΄ν°μ μ€μ μ΄λ©μΌ μ£Όμμ λΉλ°λ²νΈκ° νλ¬ΈμΌλ‘ μ μ₯λμ΄ μμ΅λλ€. 보μμμ μνμ΄ μμΌλ―λ‘ λ€μκ³Ό κ°μ΄ κ°μ μ΄ νμν©λλ€:
- μ€μ μ΄λ©μΌ μ£Όμ λμ κ°μμ μ΄λ©μΌ μ¬μ©
- λΉλ°λ²νΈλ ν΄μ μ²λ¦¬λ ννλ‘ μ μ₯
- ν μ€νΈ λ°μ΄ν°μ κ²½μ° μΌκ΄λ ν¨ν΄ μ¬μ© (μ: [email protected], [email protected])
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 2 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 3 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 4 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdf123456", | ||
| "id": 5 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdf123456", | ||
| "id": 6 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "γ γ΄dfasdf", | ||
| "id": 7 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 8 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 9 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdf12345", | ||
| "id": 10 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfggjk", | ||
| "id": 11 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 12 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 13 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdf123456", | ||
| "id": 14 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 15 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 16 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 17 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 18 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "password", | ||
| "id": 19 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 20 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 21 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 22 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 23 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 24 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "qwerty1234", | ||
| "id": 25 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "fakepassword^^", | ||
| "id": 26 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 27 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdf12345", | ||
| "id": 28 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 29 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "fakepassword^^", | ||
| "id": 30 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 31 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdf", | ||
| "id": 32 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "id": 33 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "@@a1a2a3", | ||
| "id": 34 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfasdfasdfsd", | ||
| "id": 35 | ||
| }, | ||
| { | ||
| "email": "[email protected]", | ||
| "password": "asdfafsd", | ||
| "id": 36 |
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
λ‘κ·ΈμΈ λ°μ΄ν°μ μ€λ³΅ μνΈλ¦¬ λ°κ²¬
λμΌν μ΄λ©μΌ μ£Όμλ‘ μ¬λ¬ κ°μ λ‘κ·ΈμΈ κΈ°λ‘μ΄ μ‘΄μ¬ν©λλ€. ν μ€νΈ λ°μ΄ν°μ νμ§ ν₯μμ μν΄ λ€μμ μ μν©λλ€:
- μ€λ³΅ μνΈλ¦¬ μ κ±°
- κ° μ¬μ©μλΉ νλμ λ‘κ·ΈμΈ κΈ°λ‘λ§ μ μ§
- ν μ€νΈ μλ리μ€λ³λ‘ ꡬλΆλ λ°μ΄ν°μ ꡬμ±
|
πstorybook: https://67206cc6ff9d7a05a3528ff8-gwqjglisdm.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)
src/components/common/input/date-time-picker/index.tsx (1)
Line range hint
29-33: λΉμΌ κ³Όκ±° μκ° μ ν λ°©μ§ λ‘μ§ νμνμ¬ λ μ§κ° μ νλ κ²½μ°, νμ¬ μκ° μ΄μ μ μκ°μ μ νν μ μλλ‘ μ²λ¦¬κ° νμν©λλ€.
μκ° μ ν λ‘μ§μ λ€μκ³Ό κ°μ΄ κ°μ νλ κ²μ μ μν©λλ€:
const handleTime = () => { + const now = dayjs(); + const selectedDateTime = dayjs(selected).hour(Number(hour)).minute(Number(minute)); + + if (dayjs(selected).isSame(now, 'day') && selectedDateTime.isBefore(now)) { + // νμ¬ μκ°λ³΄λ€ μ΄μ μκ°μ μ νν κ²½μ° μ²λ¦¬ + return; + } - const newDate = dayjs(selected).hour(Number(hour)).minute(Number(minute)).toDate(); + const newDate = selectedDateTime.toDate(); setSelected(newDate); onChange(newDate); };
π Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
π Files selected for processing (3)
src/components/common/input/date-time-picker/index.tsx(1 hunks)src/mock/review-data.ts(28 hunks)src/utils/is-today.ts(1 hunks)
π§ Files skipped from review as they are similar to previous changes (2)
- src/mock/review-data.ts
- src/utils/is-today.ts
π Additional comments (1)
src/components/common/input/date-time-picker/index.tsx (1)
58-58: κ³Όκ±° λ μ§ μ ν λ°©μ§ λ‘μ§ κ²ν νμ
κ³Όκ±° λ μ§ μ νμ λ°©μ§νλ κΈ°λ₯μ΄ μΆκ°λ κ²μ μ’μ κ°μ μ¬νμ λλ€. νμ§λ§ λͺ κ°μ§ κ³ λ €ν΄μΌ ν μ¬νμ΄ μμ΅λλ€:
- νμμ‘΄ μ°¨μ΄λ‘ μΈν λ μ§ λΉκ΅ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
- μλ² μΈ‘μμλ λμΌν μ ν¨μ± κ²μ¬κ° νμν©λλ€.
λ€μκ³Ό κ°μ΄ νμμ‘΄μ λͺ μμ μΌλ‘ μ²λ¦¬νλ κ²μ κ³ λ €ν΄λ³΄μΈμ:
-excludeDate={(date) => dayjs(date).isBefore(dayjs().startOf('day'))}
+excludeDate={(date) => {
+ const localDate = dayjs(date).local();
+ const today = dayjs().local().startOf('day');
+ return localDate.isBefore(today);
+}}β Verification successful
Let's analyze the validation patterns across the codebase to better understand how dates are validated both on client and server side.
λ μ§ μ ν μ ν κΈ°λ₯ κ²ν μλ£
ν΄λΌμ΄μΈνΈ μΈ‘ λ μ§ μ ν¨μ± κ²μ¬κ° μ μ ν ꡬνλμ΄ μμ΅λλ€. μ½λλ² μ΄μ€ λΆμ κ²°κ³Ό, νμ¬ κ΅¬νλ excludeDate λ‘μ§μ΄ κ³Όκ±° λ μ§ μ νμ ν¨κ³Όμ μΌλ‘ λ°©μ§νκ³ μμΌλ©°, μ΄λ μ¬μ©μ κ²½ν μΈ‘λ©΄μμ μ μ ν μ κ·Ό λ°©μμ
λλ€.
νμμ‘΄ κ΄λ ¨ μ μμ¬νμ μ² νν©λλ€. dayjs().startOf('day')λ μ΄λ―Έ λ‘컬 μκ°μ κΈ°μ€μΌλ‘ μ²λ¦¬νλ―λ‘ μΆκ°μ μΈ νμμ‘΄ μ²λ¦¬κ° νμνμ§ μμ΅λλ€.
μλ² μΈ‘ μ ν¨μ± κ²μ¬λ λ³λμ PRμμ λ€λ£¨μ΄μ ΈμΌ ν μ¬νμΌλ‘ νλ¨λ©λλ€.
π Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Check if server-side validation exists
rg -A 5 "validateDate|dateValidation"
Length of output: 39
Script:
#!/bin/bash
# Search for date validation patterns in the codebase
rg -A 5 "startOf\('day'\)|isBefore\(|isAfter\("
# Search for form validation related to dates
ast-grep --pattern 'const $_ = z.object({
$$$
date: $_,
$$$
})'
# Look for API validation or schema definitions
rg -A 5 "date.*required|date.*validation"
Length of output: 846
Script:
#!/bin/bash
# Look for API endpoints or handlers that process dates
rg -A 5 "POST.*gathering|PUT.*gathering|PATCH.*gathering"
# Search for date-related schema or type definitions
ast-grep --pattern 'interface $_ {
$$$
date: $_
$$$
}'
# Check for date validation in form submissions
rg -A 5 "handleSubmit.*date|onSubmit.*date"
Length of output: 168
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.
λͺ¨λ₯΄κ³ λ΅λ³μ μμ ν΄λ²λ Έλ€μ μ£μ‘ν©λλΉ π₯Ή
ν΄λ¦ ν λΈλ¬μ νμλ©λ΄κ° μμ¬λΌμ§λ€κ³ νμ ¨λλ°
μ΄λ¨ λ μμ¬λΌμ§λκ±΄μ§ μμΈνκ² λ§μν΄μ£Όμκ² μ΄μ? λ¬Έμ κ° μ보μ λλ€ γ
User850413
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.
μ λ§μκ³ λ§μΌμ ¨μ΅λλ€π₯Ίπ
HaeJungg
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-mehiuvehaw.chromatic.com/ |
* π docs: ν리ν°μ΄, tsconfig order μΆκ° * β¨ feat: λͺ© api λ³κ²½, μμ μ½λ μΆκ° * β¨ feat: μλ¬μ²λ¦¬ μΆκ° * β¨ feat: suspenseκ° κ°λ₯νλλ‘ μμ * π¨ style: eslint changed * β¨ Feat: auth store μΆκ°, π style: prettier import order μΆκ° * π style: import order μμ * π design: λͺ¨λ¬ μμ * π§ wip: μ΄μ μΌλ‘ λλλ¦Ό * π Fix: svgr μ¬μ©μΌλ‘ srcμ λ£μ svg νμΌμ νμΌ μ£Όμλ‘ λ°κΏ * π design: μ’μμ μ»΄ν¬λνΈ λμμΈλ³κ²½ * β¨ feat: ννΈ μ»΄ν¬λνΈ μ°κ²°, id μΆκ° * ποΈ chore: νμΌ μμΉλ³κ²½ * π¨ style: κΈμ¨μ²΄ μ μΈ λ³κ²½ * π fix: λν μΌ νμ΄μ§μμ ν΄λ¦ μλκ² λ³κ²½, μ½μ λ°μ΄ν° λ³κ²½, μΊμ¬ κΈ°λ₯μμ (μμ ν μμ λλ λ°©μ) * π fix: λ°μ΄ν° λ³κ²½ * π test: μλ ν μ€νΈ μμ * π· Chore: svgr.d.ts νμΌμ ?url νμ μ€μ λ³κ²½ ν Imageμ μ°μΈ svgνμΌ μ£Όμ λͺ¨λ μμ * π Fix: svgr μ κ±° * π· Chore: storybookμ main.ts νμΌμμ svgr κ΄λ ¨ μ€μ μ§μ * β»οΈ refactor: 리뷰 λ°μ΄ν° λ° λ¦¬λ·° νμ λΉΌκΈ° * β¨ feat: mock api * β¨ Feat: login API μΆκ° * π fix: λ¬λΌμ§ λ°μ΄ν° νμ μ λ°λ₯Έ prop μμ * π§ͺ test: storybook μμ * β¨ Feat: getUser API μΆκ° * β¨ Feat: ν€λμ ν ν° μΆκ° * π¦ chore: add μΌλ°₯ μμ΄μ½ * π design: νλ‘ν μ΄λ―Έμ§, νλ‘ν λͺ¨μ μ»΄ν¬λνΈ λμμΈ μμ * π design: ν¬λ£¨μΉ΄λ λμμΈ λ³κ²½ * π fix: λ°μ΄ν° λ³κ²½ * π fix: μ€ν λ¦¬λΆ μ€λ₯ μμ * β¨ Feat: ν€λμ λ‘κ·Έμμ κΈ°λ₯ μΆκ° * π fix: storybookμμ isauth arg μμ * β¨ feat: format-date ν¨μ μΆκ° * π design: λ°λ λμμΈ ui μ μ© * π¦ package: merge ν νμ ν¨ν€μ§ μ€μΉ * β¨ Feat: Signup νμ΄μ§ μΆκ°, λ΄λΆμ useFormμ μΈλΆμμ μ μΈ νλλ‘ λ³κ²½ * Feat/cr 70/my page (#43) * β¨ Feat: calendar-filter μ»΄ν¬λνΈ μμ± * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° * π CI: λΉλ μ€λ₯ μμ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½, ν¨ν€μ§ μΆκ° * π Design : λ°μν μ€νμΌ μ μ© * π Chore: ν΄λ μμΉ λ³κ²½ * β¨ Feat: λ§μ΄νμ΄μ§ μλ¨ μμ± * π¨ Style: ν리ν°μ΄ μ μ© * π Fix: data type μμ * π Fix: data type μμ * π Fix: data type μμ * π design: λ§μ΄νμ΄μ§μ 리뷰 리μ€νΈ μ½μ * π docs: μ΄μ λ΄μ© μμ * β¨ Feat: νμκ°μ API μΆκ° * β¨ feat: 리뷰 μ μ λ° κ·Έλν μΆκ° * π Style: μ 체νμ΄μ§ λ μ΄μμ μμ * π Style: headerμ container μΆκ° * π Style: mantine font pretendard μ€μ , β»οΈ Refactor: font 리ν©ν λ§ * π Style: font-pretendard μμ * β»οΈ Refactor: theme /styleλ‘ νμΌ μμΉ μ΄λ * β¨ feat: env μ€μ μΆκ° * π fix: νμ μμ * π fix: λ°μ΄ν° μ΄λ¦ μμ * β¨ feat: λͺ© api μΆκ° * π₯ chore: μ¬μ©νμ§μλ λ μ΄μμ μμ * π fix: λ°μ΄ν°μ λ§κ² μμ , λΆκΈ°μ²λ¦¬ * β»οΈ refactor: profile μ»΄ν¬λνΈλ‘ λ체 * β¨ feat: μΊλ¬μ μ§μ ꡬν * π fix: eslint error * β¨ feat: λν μΌ νμ΄μ§ 쑰립 * π fix: λ²νΌμΌλ‘ λ³κ²½ #53 * β»οΈ Refactor: auth folder μΆκ° * Feat/cr 58/create crew page (#41) * β¨ Feat: calendar-filter μ»΄ν¬λνΈ μμ± * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° * π CI: λΉλ μ€λ₯ μμ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½, ν¨ν€μ§ μΆκ° * π Design : λ°μν μ€νμΌ μ μ© * π Chore: ν΄λ μμΉ λ³κ²½ * Update and rename deploy.yml to trigger.yml * Update dispatch.yml * Update and rename trigger.yml to deploy.yml * Update dispatch.yml * Create dispatch_develop.yml * Create deploy_develop.yml * Update dispatch_develop.yml * Update deploy_develop.yml * Update deploy.yml * Update deploy_develop.yml * Update dispatch.yml * Update dispatch_develop.yml * β¨ Feat: ν μ€νΈμΈν, λλ‘λ€μ΄, νμΌμΈν μΆκ° * β»οΈ Refactor: λλ‘λ€μ΄ μμ λ°μ * β¨ Feat: νμ΄μ§ μ΄μ μμ± * π Style: ν리ν°μ΄ μ μ© * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ°κ° * π Fix: λΉλ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π Chore: νμΌ μ΄λ * β¨ Feat: μ ν¨μ± κ²μ¬ μΆκ° * π§ Chore: μ€ν λ¦¬λΆ λΉλ μ€λ₯ λλ¬Έμ μ€μ μμ * π§ Chore: μ€μ μ κ±° * π Fix: dropdown λ€λ₯Έ κ³³μ μν₯ μκ°λλ‘ μμ * π Fix: onBlur λΉΌλ΄κΈ° * π Chore: νμΌ μ΄λ, CSRλ‘ μ ν * π¨ Style : λ¦°νΈν리ν°μ΄ μ μ© * π Fix: μ€λ₯ μμ * π Fix: λ²νΌ κ΅μ²΄ * π Fix: TextInput κ΅μ²΄ * π§ Chore: config λ³κ²½ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Chore: νμΌ μ΄λ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π Fix: κ°μ νμΌ μ λ‘λμ μ λ‘λ λμ§ μλ λ¬Έμ ν΄κ²° * π Fix: νκΈμ λ ₯μ 21μμμ λλμκ°λ λ¬Έμ μμ * π Fix: λΈλ¬μ ν¨μ μΆ©λλ¬Έμ ν΄κ²° * β¨ feat: λ°μ€ μλμ° config μΆκ° * β¨ feat: μ½μνμ΄μ§μμ μ¬μ©νλ μΉ΄λ μΆκ° #53 * π§ͺ test: μ€ν λ¦¬λΆ μμ± #53 * β»οΈ Refactor: (crew) folder μΆκ° * π design: ν¬λ£¨μΉ΄λμμ λͺ© λ³κ²½ * π fix: λ²νΌ type μμ * β¨ feat: cn ν μΆκ° * π design: ui μμ * π Style: auth layout ui μμ , β»οΈ Refactor: layout 리ν©ν λ§ * β¨ feat: μ½μ λν μΌ λͺ¨λ¬ μ°κ²° * π design: νλ‘ν μ»΄ν¬λνΈλ‘ κ΅μ²΄ * β¨ feat: ν¬λ£¨ 리뷰λΆλΆ 쑰립 * π Style: λμμΈμ λ§κ² λ μ΄μμ UI μμ * β¨ Feat: λ‘κ·ΈμΈ/νμκ°μ νμ΄μ§ μ°κ²°λ§ν¬ μΆκ° * π fix: λ μ΄μμ md λ°μν μλλ λ¬Έμ μμ * π chore: νμΌ μμΉ λ³κ²½ * π design: λ μ΄μμμ λ°λΌ μμ * π design: λ μ΄μμμ λ°λΌ μμ * β¨ feat: κΈ°λ³Έ ꡬ쑰 μμ± #57 * π design: ν€λ λ°μν λμμΈ μμ * π design: my κ°κ²© μΆκ° * π design: mx κ°κ²© μΆκ° * π fix: responseκ°μ λ°λ₯Έ νμ , κ°λ³κ²½ * π fix: responseκ°μ λ°λ₯Έ νμ , κ°λ³κ²½ * π docs: mockλ°μ΄ν° μΆκ° #57 * π fix: νμ μλ¬ μμ * β¨ feat: mock API μΆκ° #57 * β¨ feat: notification μΆκ° * β¨ feat: λ°μ΄ν° μ½μ #57 * Feat/cr 76/index page (#51) * β¨ Feat: calendar-filter μ»΄ν¬λνΈ μμ± * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° * π CI: λΉλ μ€λ₯ μμ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½, ν¨ν€μ§ μΆκ° * π Design : λ°μν μ€νμΌ μ μ© * π Chore: ν΄λ μμΉ λ³κ²½ * Squashed commit of the following: commit d7c6625 Author: Lee Youl <[email protected]> Date: Mon Nov 4 12:02:47 2024 +0900 π Fix: λμ μ€λ₯ μμ commit 0f8c22d Author: Lee Youl <[email protected]> Date: Mon Nov 4 11:21:24 2024 +0900 β»οΈ Refactor: μ€λ³΅ μ κ±° commit 16bd2be Author: Lee Youl <[email protected]> Date: Mon Nov 4 11:13:03 2024 +0900 π¨ Fix: μ€ν λ¦¬λΆ λΉλ μ€λ₯ μμ commit 0deef07 Author: Lee Youl <[email protected]> Date: Mon Nov 4 11:07:42 2024 +0900 π¨ Style: μ£Όμ μΆκ°, μν¬νΈ μ 리 commit e5c916b Author: Lee Youl <[email protected]> Date: Mon Nov 4 10:59:13 2024 +0900 π Fix: μΉ΄ν κ³ λ¦¬ λ³κ²½ prop μΆκ°, μ¬λΌμ΄λ ν λΆλ¦¬ commit 1deb038 Merge: f152eb7 bd30e0f Author: Lee Youl <[email protected]> Date: Mon Nov 4 10:00:04 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit f152eb7 Author: Lee Youl <[email protected]> Date: Sun Nov 3 20:11:47 2024 +0900 π Design: μ¬λ°± μμ commit d63b562 Author: Lee Youl <[email protected]> Date: Sun Nov 3 14:06:18 2024 +0900 π Design : λ©μΈ μΉ΄ν κ³ λ¦¬ μ λλ©μ΄μ μΆκ° commit 7a1270a Merge: a8b962a 1806a4a Author: Lee Youl <[email protected]> Date: Sun Nov 3 12:44:48 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit a8b962a Author: Lee Youl <[email protected]> Date: Thu Oct 31 10:02:34 2024 +0900 π¨ Fix: λ¦°νΈ μ€λ₯ μμ commit 3ad5b07 Merge: 0a40244 5febab3 Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:59:56 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 0a40244 Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:34:28 2024 +0900 π Design: ν°νΈ μ μ© commit 0729cb0 Merge: 6ee5c6d 3125fb9 Author: leeyoul <[email protected]> Date: Thu Oct 31 09:27:33 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 6ee5c6d Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:24:22 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit d623af0 Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:12:45 2024 +0900 π CI: μν¬νλ‘μ° μμ commit a4786e7 Merge: 4c04503 65c32f0 Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:08:39 2024 +0900 Merge branch 'main' into Feat/CR-28/MainCategory commit 4c04503 Author: Lee Youl <[email protected]> Date: Thu Oct 31 09:07:20 2024 +0900 π¨ Fix: λ¦°νΈμ€λ₯ μ κ±° commit 46f2001 Merge: 766b28b e28e039 Author: leeyoul <[email protected]> Date: Thu Oct 31 09:02:56 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 766b28b Author: Lee Youl <[email protected]> Date: Wed Oct 30 21:50:46 2024 +0900 π Chore: μ΄λ―Έμ§ νμΌ μ΄λ commit ac3ae1e Merge: f1241cb e02a1ca Author: Lee Youl <[email protected]> Date: Tue Oct 29 19:46:43 2024 +0900 Merge branch 'Feat/CR-28/MainCategory' of https://github.com/CodeitFESI4-Team1/Team-1-Codeit into Feat/CR-28/MainCategory commit f1241cb Author: Lee Youl <[email protected]> Date: Tue Oct 29 19:44:57 2024 +0900 π Fix: λ©μΈμΉ΄ν κ³ λ¦¬ νΈλ² λ‘μ§ μμ commit e02a1ca Merge: 525fee9 3ea3d45 Author: leeyoul <[email protected]> Date: Tue Oct 29 17:40:31 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 525fee9 Author: Lee Youl <[email protected]> Date: Tue Oct 29 17:35:04 2024 +0900 π¨ Style: ν΄λμ€μ΄λ¦ μμ λ³κ²½ commit 1627d6f Author: Lee Youl <[email protected]> Date: Tue Oct 29 17:26:59 2024 +0900 π Design: λμμΈ λ§μΆκΈ° commit 4700099 Author: Lee Youl <[email protected]> Date: Tue Oct 29 17:09:13 2024 +0900 π Design: λμμΈ λ§μΆκΈ° commit 3c60268 Author: Lee Youl <[email protected]> Date: Tue Oct 29 16:47:29 2024 +0900 π§ Chore: ν°νΈ μ€μ μμ commit cdc674d Author: Lee Youl <[email protected]> Date: Tue Oct 29 15:49:07 2024 +0900 π Design: λμμΈ λ§μΆκΈ° commit c0c5af4 Merge: 9f321f3 7fa5224 Author: Lee Youl <[email protected]> Date: Tue Oct 29 15:14:19 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 65c32f0 Author: leeyoul <[email protected]> Date: Tue Oct 29 13:31:53 2024 +0900 Update dispatch_develop.yml commit dda1af5 Author: leeyoul <[email protected]> Date: Tue Oct 29 13:31:43 2024 +0900 Update dispatch.yml commit a0bf193 Author: leeyoul <[email protected]> Date: Tue Oct 29 13:31:32 2024 +0900 Update deploy_develop.yml commit 18d89ae Author: leeyoul <[email protected]> Date: Tue Oct 29 13:31:21 2024 +0900 Update deploy.yml commit 984cefc Author: leeyoul <[email protected]> Date: Tue Oct 29 13:13:17 2024 +0900 Update deploy_develop.yml commit 47a09ec Author: leeyoul <[email protected]> Date: Tue Oct 29 13:12:52 2024 +0900 Update dispatch_develop.yml commit 88d62de Author: leeyoul <[email protected]> Date: Tue Oct 29 12:50:51 2024 +0900 Create deploy_develop.yml commit 451c9c9 Author: leeyoul <[email protected]> Date: Tue Oct 29 12:50:30 2024 +0900 Create dispatch_develop.yml commit 614934d Author: leeyoul <[email protected]> Date: Tue Oct 29 12:49:55 2024 +0900 Update dispatch.yml commit e12af5b Author: leeyoul <[email protected]> Date: Tue Oct 29 12:49:42 2024 +0900 Update and rename trigger.yml to deploy.yml commit df8d44d Author: leeyoul <[email protected]> Date: Tue Oct 29 12:34:05 2024 +0900 Update dispatch.yml commit 98a710b Author: leeyoul <[email protected]> Date: Tue Oct 29 12:33:35 2024 +0900 Update and rename deploy.yml to trigger.yml commit 9f321f3 Author: Lee Youl <[email protected]> Date: Tue Oct 29 11:36:01 2024 +0900 π Fix: νμ μμ commit 323f8d0 Author: Lee Youl <[email protected]> Date: Tue Oct 29 11:32:49 2024 +0900 π Fix: λ°λ ν μΌμλ μ€μ λ°μ commit 321df95 Merge: 5b28fbe 25f04d3 Author: Lee Youl <[email protected]> Date: Tue Oct 29 11:28:32 2024 +0900 Merge branch 'Feat/CR-36/DateTimePicker' into Feat/CR-28/MainCategory commit 5b28fbe Author: Lee Youl <[email protected]> Date: Tue Oct 29 10:32:05 2024 +0900 π Fix: νμ μμ commit 25f04d3 Author: Lee Youl <[email protected]> Date: Tue Oct 29 10:28:49 2024 +0900 π§ Chore: ν μΌμλ config - typo μ€μ μμ commit 1593538 Merge: f35edce af4a767 Author: Lee Youl <[email protected]> Date: Tue Oct 29 10:08:59 2024 +0900 Merge branch 'develop' into Feat/CR-36/DateTimePicker commit f35edce Merge: 6c0fd9a 1f62e6a Author: leeyoul <[email protected]> Date: Tue Oct 29 10:04:59 2024 +0900 Merge branch 'develop' into Feat/CR-36/DateTimePicker commit ab75dfe Author: Lee Youl <[email protected]> Date: Tue Oct 29 10:02:22 2024 +0900 π Fix: νμ μμ commit 9cd7c3d Author: Lee Youl <[email protected]> Date: Tue Oct 29 09:42:40 2024 +0900 β»οΈ Refactor : μ½λ 리뷰 λ°μ commit 9dcf962 Author: Lee Youl <[email protected]> Date: Mon Oct 28 18:26:49 2024 +0900 π Fix: νμ μμ commit 5075a03 Author: Lee Youl <[email protected]> Date: Mon Oct 28 18:21:22 2024 +0900 π Fix: νμ μμ commit 616146b Author: Lee Youl <[email protected]> Date: Mon Oct 28 17:25:18 2024 +0900 β¨ Feat: ν¬λ£¨μ°ΎκΈ° μλ¨λΆλΆ μμ± commit 0af5271 Author: Lee Youl <[email protected]> Date: Mon Oct 28 14:26:59 2024 +0900 π Fix: μ»΄ν¬λνΈ μΌλΆ μμ commit 53e296e Merge: 5592dd2 af4a767 Author: Lee Youl <[email protected]> Date: Mon Oct 28 14:10:47 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 5592dd2 Author: Lee Youl <[email protected]> Date: Mon Oct 28 14:05:02 2024 +0900 π Design: ν¬λ£¨μ°ΎκΈ° νμ΄μ§ μμ±μ€ commit bd2d17e Author: Lee Youl <[email protected]> Date: Mon Oct 28 11:32:45 2024 +0900 π Design: λλ‘λ€μ΄ μμ commit 968c5d5 Author: Lee Youl <[email protected]> Date: Mon Oct 28 11:19:27 2024 +0900 Merge branch 'Feat/CR-10/DropDown' into Feat/CR-28/MainCategory commit 7ca9626 Merge: 2f9caf5 9f6fd0c Author: Lee Youl <[email protected]> Date: Mon Oct 28 11:17:31 2024 +0900 Merge branch 'Feat/CR-10/DropDown' into Feat/CR-28/MainCategory commit 2f9caf5 Author: Lee Youl <[email protected]> Date: Mon Oct 28 11:13:44 2024 +0900 β¨ Feat: hero-crew μΆκ° commit 076318a Merge: 2cc2a15 b4f6ae1 Author: Lee Youl <[email protected]> Date: Mon Oct 28 08:54:30 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 6c0fd9a Author: Lee Youl <[email protected]> Date: Fri Oct 25 19:38:12 2024 +0900 π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° commit 46be3e6 Author: Lee Youl <[email protected]> Date: Fri Oct 25 16:19:33 2024 +0900 π Fix: νλ‘ νμ λ³κ²½ commit 6d4e93f Merge: 631dadd b4f6ae1 Author: Lee Youl <[email protected]> Date: Fri Oct 25 16:09:28 2024 +0900 Merge branch 'develop' into Feat/CR-36/DateTimePicker commit 631dadd Author: Lee Youl <[email protected]> Date: Fri Oct 25 14:12:49 2024 +0900 π Design: μ€νμΌ μ μ© commit 762b00a Author: Lee Youl <[email protected]> Date: Fri Oct 25 14:10:12 2024 +0900 π Chore: νμΌ μ΄λ commit 0a8a6b8 Merge: 4708f62 2934329 Author: Lee Youl <[email protected]> Date: Fri Oct 25 13:59:31 2024 +0900 Merge branch 'develop' into Feat/CR-36/DateTimePicker commit 2cc2a15 Author: Lee Youl <[email protected]> Date: Fri Oct 25 13:29:34 2024 +0900 π Fix: μ€ν¬λ‘€ μ¬λΌμ΄λ κ°μ μμ commit 5a88811 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:58:41 2024 +0900 π§ Chore: μΆκ°λ‘ μ μν μ€μ μμ λ³κ²½ commit a8858fc Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:48:39 2024 +0900 π¨ Style: ν΄λμ€λͺ μ μ© commit 8fd4718 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:44:59 2024 +0900 π¨ Style: ν리ν°μ΄ μ μ© commit c1ce5d4 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:42:50 2024 +0900 π¨ Style: ν리ν°μ΄ μ μ© commit fd717b4 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:41:06 2024 +0900 π§ Chore: tailwind config μΆκ° commit b3d7e21 Merge: bc47688 ec0a557 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:32:42 2024 +0900 Merge branch 'Feat/CR-28/MainCategory' of https://github.com/CodeitFESI4-Team1/Team-1-Codeit into Feat/CR-28/MainCategory commit bc47688 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:31:16 2024 +0900 π Design: λ©μΈ μΉ΄ν κ³ λ¦¬ μ΄λ―Έμ§ λ³κ²½ commit ec0a557 Merge: 2c7df60 b7ccd9f Author: leeyoul <[email protected]> Date: Fri Oct 25 11:27:42 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 2c7df60 Author: Lee Youl <[email protected]> Date: Fri Oct 25 11:21:12 2024 +0900 π¨ Style: ν리ν°μ΄ μ μ©(+μ€μ λ³κ²½) commit 55b46f1 Author: Lee Youl <[email protected]> Date: Fri Oct 25 10:14:11 2024 +0900 π Design: λ³κ²½λ μΉ΄ν κ³ λ¦¬ μ μ©μ€ commit 4708f62 Author: Lee Youl <[email protected]> Date: Thu Oct 24 20:30:27 2024 +0900 π Design: λ°μν μ€νμΌ μ μ© commit a3f86a4 Author: Lee Youl <[email protected]> Date: Thu Oct 24 20:21:05 2024 +0900 β¨ Feat: date-time-picker μ»΄ν¬λνΈ μμ± commit 0d9671a Author: Lee Youl <[email protected]> Date: Thu Oct 24 10:42:38 2024 +0900 π Design: κ°κ²©, ν°νΈ μ€νμΌ λ³κ²½ commit 7eedec7 Author: Lee Youl <[email protected]> Date: Thu Oct 24 10:33:48 2024 +0900 π Design: κ°μ΄λ° μ λ ¬ μμ commit f8961b1 Author: Lee Youl <[email protected]> Date: Thu Oct 24 10:31:19 2024 +0900 π Fix: href μμ commit a1d2303 Merge: d10ee0f 75b18a8 Author: Lee Youl <[email protected]> Date: Thu Oct 24 10:26:43 2024 +0900 Merge branch 'Feat/CR-28/MainCategory' of https://github.com/CodeitFESI4-Team1/Team-1-Codeit into Feat/CR-28/MainCategory commit 75b18a8 Merge: dbbea45 a0365d4 Author: leeyoul <[email protected]> Date: Thu Oct 24 10:23:46 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit d10ee0f Author: Lee Youl <[email protected]> Date: Wed Oct 23 20:58:15 2024 +0900 π Docs: μΉ΄ν κ³ λ¦¬ λ°μ΄ν° λ³κ²½ commit dbbea45 Author: Lee Youl <[email protected]> Date: Wed Oct 23 18:43:21 2024 +0900 π Design: λ°μν μ€νμΌ μμ commit 813c0e0 Author: Lee Youl <[email protected]> Date: Wed Oct 23 18:39:41 2024 +0900 β¨ Feat: CategoryWrap μ»΄ν¬λνΈ μμ± commit 2694b8c Author: Lee Youl <[email protected]> Date: Wed Oct 23 18:38:28 2024 +0900 π Docs: category λ°μ΄ν° λ³κ²½ commit b78eee8 Merge: 6abf601 c2c30d8 Author: Lee Youl <[email protected]> Date: Wed Oct 23 17:41:22 2024 +0900 Merge branch 'develop' into Feat/CR-28/MainCategory commit 9f6fd0c Author: Lee Youl <[email protected]> Date: Wed Oct 23 17:31:00 2024 +0900 β»οΈ Refactor: dropdown data νμ λ³κ²½ commit 7139954 Author: Lee Youl <[email protected]> Date: Wed Oct 23 16:40:30 2024 +0900 π CI: λΉλ μ€λ₯ μμ commit b7cd35c Merge: 22cb8b2 c2c30d8 Author: Lee Youl <[email protected]> Date: Wed Oct 23 16:32:11 2024 +0900 Merge branch 'develop' into Feat/CR-10/DropDown commit 22cb8b2 Author: leeyoul <[email protected]> Date: Wed Oct 23 15:42:13 2024 +0900 Feat/cr 23/internal category (#7) * β¨ Feat: InternalCategory μΆκ° * π Docs: story μΆκ°, μ€ν¬λ‘€ λμ λ²κ·Έ μμ , νμ΄ν ν κΈ λμ λ²κ·Έ μμ * π Fix: μ€ν¬λ‘€ λμ λ²κ·Έ μμ * π§ chore: mantine λ²μ μλλλ‘ * π Fix: λΉλ μ€λ₯ μμ * π : λΉλ μ€λ₯ μμ * π Fix : λΉλ μ€λ₯ μμ * π Fix : breakpoint 컀μ€ν themeμμ κ°μ Έμ€λλ‘ μμ * π Design: λ°λ λμμΈμ λ§κ² μμ , λ°μν μ€νμΌ μ μ© * π CI : λΉλ μ€λ₯ μμ * π Docs: category data λ³κ²½ * π Design: μ€νμΌ μμ * β»οΈ Refactor: νμ λΆλ¦¬ * π§ Chore: μν¬νΈμ€λμ types ν΄λ μΆκ° * π· chore: next μ΄λ―Έμ§ μ²λ¦¬ μν΄ λͺ¨λ λλ©μΈ νμ© * π· chore: stories ν μΌμλ config μΆκ° * π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± * π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° * β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° * π§ͺ test: νλ‘ν μ»΄ν¬λνΈ μ€ν λ¦¬λΆ μμ± * π¨ style: μ£ΌμμΆκ° * π¨ style: μ»΄ν¬λνΈ μμ * π§ chore: ν리ν°μ΄ μ€μ λ³κ²½ * π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import * π· chore: νμΌ μμΉ λ³κ²½, git keep μμ * π§ chore: μμ λ import order μΆκ° * π· chore: import λ³κ²½, λΉλμλ¬ μμ * π¨ design: import μμ * π§ chore: prettier changed * π fix: import μμ * π fix: prettier changed * π· chore: change settings * β¨ feat: custom progress bar * π§ͺ test: μ€ν λ¦¬λΆ μΆκ° * π§ Chore: ν΄λ μ 리 * π§ Chore: globals.css μμΉ λ³κ²½, ν리ν°μ΄ μ μ© * π§ Chore: ν리ν°μ΄ μ μ© * π Docs: μ£Όμ λ³κ²½ * π§ Chore: husky no-cache μ€μ * π§ Chore: ν리ν°μ΄ μ€μ λΉ μ§κ² μΆκ° * π¨ Style: ν리ν°μ΄ μ μ© --------- Co-authored-by: HaeJungg <[email protected]> commit 059e51b Author: HaeJungg <[email protected]> Date: Tue Oct 22 11:10:05 2024 +0900 π fix: prettier changed commit 5b8b587 Author: HaeJungg <[email protected]> Date: Fri Oct 18 15:17:20 2024 +0900 π fix: import μμ commit d52272c Author: HaeJungg <[email protected]> Date: Fri Oct 18 13:57:58 2024 +0900 π§ chore: prettier changed commit 9f61d36 Author: HaeJungg <[email protected]> Date: Fri Oct 18 10:08:56 2024 +0900 π¨ design: import μμ commit 2b184a3 Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:48:59 2024 +0900 π· chore: νμΌ μμΉ λ³κ²½, git keep μμ commit 3f963fa Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:46:34 2024 +0900 π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import commit 8c3014b Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:28:21 2024 +0900 π¨ style: μ£ΌμμΆκ° commit 4197735 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:27:10 2024 +0900 β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° commit 6f5f88b Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:24:15 2024 +0900 π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° commit 37055bf Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:22:17 2024 +0900 π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± commit 44e416b Author: Lee Youl <[email protected]> Date: Wed Oct 23 16:12:08 2024 +0900 π¨ Style: ν리ν°μ΄ μ μ©, κ²½λ‘ μμ commit adad4d0 Author: leeyoul <[email protected]> Date: Wed Oct 23 15:42:13 2024 +0900 Feat/cr 23/internal category (#7) * β¨ Feat: InternalCategory μΆκ° * π Docs: story μΆκ°, μ€ν¬λ‘€ λμ λ²κ·Έ μμ , νμ΄ν ν κΈ λμ λ²κ·Έ μμ * π Fix: μ€ν¬λ‘€ λμ λ²κ·Έ μμ * π§ chore: mantine λ²μ μλλλ‘ * π Fix: λΉλ μ€λ₯ μμ * π : λΉλ μ€λ₯ μμ * π Fix : λΉλ μ€λ₯ μμ * π Fix : breakpoint 컀μ€ν themeμμ κ°μ Έμ€λλ‘ μμ * π Design: λ°λ λμμΈμ λ§κ² μμ , λ°μν μ€νμΌ μ μ© * π CI : λΉλ μ€λ₯ μμ * π Docs: category data λ³κ²½ * π Design: μ€νμΌ μμ * β»οΈ Refactor: νμ λΆλ¦¬ * π§ Chore: μν¬νΈμ€λμ types ν΄λ μΆκ° * π· chore: next μ΄λ―Έμ§ μ²λ¦¬ μν΄ λͺ¨λ λλ©μΈ νμ© * π· chore: stories ν μΌμλ config μΆκ° * π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± * π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° * β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° * π§ͺ test: νλ‘ν μ»΄ν¬λνΈ μ€ν λ¦¬λΆ μμ± * π¨ style: μ£ΌμμΆκ° * π¨ style: μ»΄ν¬λνΈ μμ * π§ chore: ν리ν°μ΄ μ€μ λ³κ²½ * π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import * π· chore: νμΌ μμΉ λ³κ²½, git keep μμ * π§ chore: μμ λ import order μΆκ° * π· chore: import λ³κ²½, λΉλμλ¬ μμ * π¨ design: import μμ * π§ chore: prettier changed * π fix: import μμ * π fix: prettier changed * π· chore: change settings * β¨ feat: custom progress bar * π§ͺ test: μ€ν λ¦¬λΆ μΆκ° * π§ Chore: ν΄λ μ 리 * π§ Chore: globals.css μμΉ λ³κ²½, ν리ν°μ΄ μ μ© * π§ Chore: ν리ν°μ΄ μ μ© * π Docs: μ£Όμ λ³κ²½ * π§ Chore: husky no-cache μ€μ * π§ Chore: ν리ν°μ΄ μ€μ λΉ μ§κ² μΆκ° * π¨ Style: ν리ν°μ΄ μ μ© --------- Co-authored-by: HaeJungg <[email protected]> commit 3daa054 Author: HaeJungg <[email protected]> Date: Tue Oct 22 11:10:05 2024 +0900 π fix: prettier changed commit 6a7613c Author: HaeJungg <[email protected]> Date: Fri Oct 18 15:17:20 2024 +0900 π fix: import μμ commit 4b0e8b3 Author: HaeJungg <[email protected]> Date: Fri Oct 18 10:08:56 2024 +0900 π¨ design: import μμ commit 3545e29 Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:48:59 2024 +0900 π· chore: νμΌ μμΉ λ³κ²½, git keep μμ commit 45f6fc5 Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:46:34 2024 +0900 π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import commit e98f4c3 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:28:21 2024 +0900 π¨ style: μ£ΌμμΆκ° commit c998ac6 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:27:10 2024 +0900 β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° commit 5eee37b Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:24:15 2024 +0900 π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° commit aea5f1f Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:22:17 2024 +0900 π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± commit d45f324 Author: Lee Youl <[email protected]> Date: Wed Oct 23 15:53:36 2024 +0900 π¨ Style: ν΄λ μ 리, ν리ν°μ΄ μ μ© commit e1f1ab5 Author: leeyoul <[email protected]> Date: Wed Oct 23 15:42:13 2024 +0900 Feat/cr 23/internal category (#7) * β¨ Feat: InternalCategory μΆκ° * π Docs: story μΆκ°, μ€ν¬λ‘€ λμ λ²κ·Έ μμ , νμ΄ν ν κΈ λμ λ²κ·Έ μμ * π Fix: μ€ν¬λ‘€ λμ λ²κ·Έ μμ * π§ chore: mantine λ²μ μλλλ‘ * π Fix: λΉλ μ€λ₯ μμ * π : λΉλ μ€λ₯ μμ * π Fix : λΉλ μ€λ₯ μμ * π Fix : breakpoint 컀μ€ν themeμμ κ°μ Έμ€λλ‘ μμ * π Design: λ°λ λμμΈμ λ§κ² μμ , λ°μν μ€νμΌ μ μ© * π CI : λΉλ μ€λ₯ μμ * π Docs: category data λ³κ²½ * π Design: μ€νμΌ μμ * β»οΈ Refactor: νμ λΆλ¦¬ * π§ Chore: μν¬νΈμ€λμ types ν΄λ μΆκ° * π· chore: next μ΄λ―Έμ§ μ²λ¦¬ μν΄ λͺ¨λ λλ©μΈ νμ© * π· chore: stories ν μΌμλ config μΆκ° * π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± * π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° * β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° * π§ͺ test: νλ‘ν μ»΄ν¬λνΈ μ€ν λ¦¬λΆ μμ± * π¨ style: μ£ΌμμΆκ° * π¨ style: μ»΄ν¬λνΈ μμ * π§ chore: ν리ν°μ΄ μ€μ λ³κ²½ * π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import * π· chore: νμΌ μμΉ λ³κ²½, git keep μμ * π§ chore: μμ λ import order μΆκ° * π· chore: import λ³κ²½, λΉλμλ¬ μμ * π¨ design: import μμ * π§ chore: prettier changed * π fix: import μμ * π fix: prettier changed * π· chore: change settings * β¨ feat: custom progress bar * π§ͺ test: μ€ν λ¦¬λΆ μΆκ° * π§ Chore: ν΄λ μ 리 * π§ Chore: globals.css μμΉ λ³κ²½, ν리ν°μ΄ μ μ© * π§ Chore: ν리ν°μ΄ μ μ© * π Docs: μ£Όμ λ³κ²½ * π§ Chore: husky no-cache μ€μ * π§ Chore: ν리ν°μ΄ μ€μ λΉ μ§κ² μΆκ° * π¨ Style: ν리ν°μ΄ μ μ© --------- Co-authored-by: HaeJungg <[email protected]> commit f48d8a0 Author: HaeJungg <[email protected]> Date: Tue Oct 22 15:49:08 2024 +0900 π§ͺ test: μ€ν λ¦¬λΆ μΆκ° commit c7e6363 Author: HaeJungg <[email protected]> Date: Tue Oct 22 15:37:54 2024 +0900 β¨ feat: custom progress bar commit 422e984 Author: HaeJungg <[email protected]> Date: Tue Oct 22 15:06:46 2024 +0900 π· chore: change settings commit dfbd868 Author: HaeJungg <[email protected]> Date: Tue Oct 22 11:10:05 2024 +0900 π fix: prettier changed commit bc027ff Author: HaeJungg <[email protected]> Date: Fri Oct 18 15:17:20 2024 +0900 π fix: import μμ commit e419533 Author: HaeJungg <[email protected]> Date: Fri Oct 18 15:11:45 2024 +0900 π§ chore: μλμ° / λ§₯ λλ€ νμ±ν ν μ μλλ‘ μ€μ λ³κ²½ commit 9b3d74f Author: HaeJungg <[email protected]> Date: Fri Oct 18 13:57:58 2024 +0900 π§ chore: prettier changed commit c315c7d Author: HaeJungg <[email protected]> Date: Fri Oct 18 10:08:56 2024 +0900 π¨ design: import μμ commit d9d3a40 Author: HaeJungg <[email protected]> Date: Fri Oct 18 10:08:29 2024 +0900 π· chore: import λ³κ²½, λΉλμλ¬ μμ commit 44fe36f Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:53:52 2024 +0900 π§ chore: μμ λ import order μΆκ° commit 0db6627 Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:48:59 2024 +0900 π· chore: νμΌ μμΉ λ³κ²½, git keep μμ commit f7223ed Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:46:34 2024 +0900 π· chore: ν리ν°μ΄ μ€μ λ³κ²½, λ³κ²½λ import commit 8db0768 Author: HaeJungg <[email protected]> Date: Fri Oct 18 09:44:31 2024 +0900 π§ chore: ν리ν°μ΄ μ€μ λ³κ²½ commit bcc0ac0 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:28:21 2024 +0900 π¨ style: μ£ΌμμΆκ° commit 7363c78 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:27:30 2024 +0900 π§ͺ test: νλ‘ν μ»΄ν¬λνΈ μ€ν λ¦¬λΆ μμ± commit a29ae80 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:27:10 2024 +0900 β¨ feat: νλ‘ν μ»΄ν¬λνΈ μΆκ° commit 79207a2 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:24:15 2024 +0900 π· chore: μ€ν 리λΆμ ν μΌμλ μΆκ° commit 9737ca9 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:22:17 2024 +0900 π· chore: κΈλ‘λ² css μμΉμ΄λ, resetcss μμ± commit cd2a3d5 Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:21:13 2024 +0900 π· chore: stories ν μΌμλ config μΆκ° commit a14376a Author: HaeJungg <[email protected]> Date: Thu Oct 17 18:20:03 2024 +0900 π· chore: next μ΄λ―Έμ§ μ²λ¦¬ μν΄ λͺ¨λ λλ©μΈ νμ© commit 6abf601 Author: Lee Youl <[email protected]> Date: Wed Oct 23 14:27:20 2024 +0900 β¨ Feat: MainCategory μ»΄ν¬λνΈ μμ± commit 2af3c8d Author: youl <[email protected]> Date: Wed Oct 23 11:56:56 2024 +0900 β¨ Feat: μ΄μ μμ± commit a15221b Author: youl <[email protected]> Date: Wed Oct 23 11:20:17 2024 +0900 π Design: ν°νΈ μ μ©, κ°κ²© μμ commit 7875412 Author: youl <[email protected]> Date: Wed Oct 23 11:01:58 2024 +0900 π Design: λμμΈμ λ§κ² μ€νμΌ μμ commit 3766ab9 Merge: 6663b04 f67c5b9 Author: youl <[email protected]> Date: Wed Oct 23 09:35:44 2024 +0900 Merge branch 'Feat/CR-10/DropDown' of https://github.com/CodeitFESI4-Team1/Team-1-Codeit into Feat/CR-10/DropDown commit 6663b04 Author: youl <[email protected]> Date: Wed Oct 23 09:35:28 2024 +0900 π Docs: μ€ν λ¦¬λΆ λΆλ₯ μμ commit f67c5b9 Merge: 03eca63 d122096 Author: leeyoul <[email protected]> Date: Wed Oct 23 09:31:06 2024 +0900 Merge branch 'develop' into Feat/CR-10/DropDown commit 03eca63 Author: youl <[email protected]> Date: Wed Oct 23 09:27:55 2024 +0900 π Design: λ°λ λμμΈμ λ§κ² μ€νμΌ μμ commit 6452b93 Author: Lee Youl <[email protected]> Date: Fri Oct 18 11:53:29 2024 +0900 β»οΈ Refactor: Remove unused import in page.tsx and fix file name case in drop-down.stories.tsx commit d854861 Author: Lee Youl <[email protected]> Date: Fri Oct 18 11:50:35 2024 +0900 π§ Chore: μ»΄ν¬λνΈ νμΌλͺ λ³κ²½, eol μ€μ λ³κ²½ commit 92e9d77 Author: Lee Youl <[email protected]> Date: Fri Oct 18 11:18:32 2024 +0900 π Docs : add docs commit 69f2e7e Author: Lee Youl <[email protected]> Date: Fri Oct 18 10:12:31 2024 +0900 π§ Chore: eol μ€μ λ³κ²½ commit df7c771 Author: Lee Youl <[email protected]> Date: Fri Oct 18 10:08:38 2024 +0900 π§ Chore: import order λ¬Έμ μμ commit 098babd Merge: edbfe3f c58486f Author: Lee Youl <[email protected]> Date: Thu Oct 17 19:19:04 2024 +0900 Merge branch 'Feat/CR-10/DropDown' of https://github.com/CodeitFESI4-Team1/Team-1-Codeit into Feat/CR-10/DropDown commit edbfe3f Author: Lee Youl <[email protected]> Date: Thu Oct 17 19:18:21 2024 +0900 π§ chore: update prettier config commit c58486f Merge: 7388b34 0365ddb Author: leeyoul <[email protected]> Date: Thu Oct 17 18:36:16 2024 +0900 Merge branch 'develop' into Feat/CR-10/DropDown commit 7388b34 Author: Lee Youl <[email protected]> Date: Thu Oct 17 18:27:37 2024 +0900 π¨ prettier commit c24f8b7 Author: Lee Youl <[email protected]> Date: Thu Oct 17 18:22:35 2024 +0900 β¨ feat: DropDown - variant μΆκ° commit 970fddf Author: Lee Youl <[email protected]> Date: Thu Oct 17 16:35:19 2024 +0900 β test: action test μΆκ° commit b5d3e63 Author: Lee Youl <[email protected]> Date: Thu Oct 17 16:18:56 2024 +0900 π docs: storybook docs μΆκ°, chore: PR ν νλ¦Ώ μ£Όμ μμ commit 55ea20c Author: Lee Youl <[email protected]> Date: Thu Oct 17 16:08:19 2024 +0900 β¨ feat: DropDown μ»΄ν¬λνΈ μ μ, chore: storybook config μμ , public ν΄λ μΆκ° commit 423c5a0 Merge: cb5abbf 39d3c82 Author: leeyoul <[email protected]> Date: Thu Oct 17 13:42:43 2024 +0900 Merge pull request #2 from CodeitFESI4-Team1/develop π§chore: mantine UI + storybook setting * β»οΈ Refactor: json-sever λ‘ ν¨μΉ * π Design: νλΈλ¦Ώμμ 1μ΄λ‘ 보μ΄λλ‘ μμ * π₯ Fix: λ©μΈνμ΄μ§ λ μ§νν° λΉΌκΈ° * π Fix: λ€μ mockDataλ‘ μ°κ²° * π Fix: λ§ν¬ μμ * π Design: λ μ΄μμ λΆλ¦¬, ν€λ μ£Όμν΄μ * π Chore: νμΌ μ΄λ, μ 리 * π Design: fade μ λλ©μ΄μ μ μ© * π¨ Style: λ¦°νΈ ν리ν°μ΄ μ μ© * π Design: κ²μμ°½ λμμΈ μμ * π¨ Style: λ¦°νΈ ν리ν°μ΄ μ μ© * β¨ feat: νμΈ μμ λͺ¨λ¬ μΆκ° * π design: max 1200μΌλ‘ μμ , container μμ * π¨ style: eslint changed * π Fix: anchor λ₯Ό Linkλ‘ λ³κ²½ * π¦ chore: ν¨ν€μ§ μ€μΉ * β¨ feat: react-toastifyλ₯Ό μ΄μ©ν΄ toast ꡬν * π design: UI μμ #57 * π fix: (crew) ν΄λ μμΌλ‘ μ΄λ * π₯ chore: git static ν΄λ μμ * π fix: νμΌμμΉ μ¬μ€μ * π fix: import μ€λ₯ ν΄κ²° * π fix: λΉλ μ€λ₯ -> importλ¬Έ μμ * π fix: eslint changed * Feat/cr 71/create gathering modal (#52) * β¨ Feat: calendar-filter μ»΄ν¬λνΈ μμ± * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° * π CI: λΉλ μ€λ₯ μμ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½ * π¦ Chore: νμ΄μ§ ν΄λ λ³κ²½, ν¨ν€μ§ μΆκ° * π Design : λ°μν μ€νμΌ μ μ© * π Chore: ν΄λ μμΉ λ³κ²½ * Update and rename deploy.yml to trigger.yml * Update dispatch.yml * Update and rename trigger.yml to deploy.yml * Update dispatch.yml * Create dispatch_develop.yml * Create deploy_develop.yml * Update dispatch_develop.yml * Update deploy_develop.yml * Update deploy.yml * Update deploy_develop.yml * Update dispatch.yml * Update dispatch_develop.yml * β¨ Feat: ν μ€νΈμΈν, λλ‘λ€μ΄, νμΌμΈν μΆκ° * β»οΈ Refactor: λλ‘λ€μ΄ μμ λ°μ * β¨ Feat: νμ΄μ§ μ΄μ μμ± * π Style: ν리ν°μ΄ μ μ© * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ°κ° * π Fix: λΉλ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π Chore: νμΌ μ΄λ * β¨ Feat: μ ν¨μ± κ²μ¬ μΆκ° * π§ Chore: μ€ν λ¦¬λΆ λΉλ μ€λ₯ λλ¬Έμ μ€μ μμ * π§ Chore: μ€μ μ κ±° * π Fix: dropdown λ€λ₯Έ κ³³μ μν₯ μκ°λλ‘ μμ * π Fix: onBlur λΉΌλ΄κΈ° * π Chore: νμΌ μ΄λ, CSRλ‘ μ ν * π¨ Style : λ¦°νΈν리ν°μ΄ μ μ© * π Fix: μ€λ₯ μμ * π Fix: λ²νΌ κ΅μ²΄ * π Fix: TextInput κ΅μ²΄ * π§ Chore: config λ³κ²½ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Chore: νμΌ μ΄λ * β¨ Feat: μ½μ λ§λ€κΈ° λͺ¨λ¬ μ΄μ μμ± * π Fix: λ μ§ μ΄κΈ°κ° μ€μ , νμκ° μμ * π Fix: νμΌμ 리, onClose Prop μΆκ° * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ° * π§ Chore: tailwind config μ€μ μ€ν μμ * π Fix: νμ μ΄λ¦ μμ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π¨ Fix: λ¦°νΈμ€λ₯ μμ , μ€ν¬λ‘€λ° μμ * π¨ Fix: λΉλμ€λ₯ μμ * π¨ Style: λ¦°νΈν리ν°μ΄ μ μ© * π¨ Fix: λ¦°νΈ μ μ©μ© * π Design: λμμΈ λ§μΆκ³ νμμλ νμΌ μμ * π¨ Style: μ½λ μ 리 * π fix: profilesμ μ λ¬νλ prop μμ * π₯ fix: μ¬μ©νμ§ μλ ν μ€νΈ μ£Όμμ²λ¦¬ * βοΈ fix: νμ΄μ§λ€μ΄μ μΌλ‘ λ³κ²½νλ©΄μ νμ λ³κ²½ * π docs: λͺ©λ°μ΄ν° rate λ³κ²½ * π design: νμ΄μ§λ€μ΄μ λμμΈ λ³κ²½ * π¨ style: eslint changed * π fix: νλ‘νμ μ΄λ―Έμ§ μ λ¬μλλ λ¬Έμ μμ μμ°λ import μ κ±° * β¨ feat: rate λ³κ²½ * π fix: ν¬λ£¨μΉ΄λ κ²½λ‘μμ * β¨ feat: ν¬λ£¨ 리뷰 λ°μ΄ν° λͺ© api νμ΄μ§λ€μ΄μ * β¨ feat: 리뷰리μ€νΈ νμ΄μ§λ€μ΄μ * π§ͺ test: μ€ν λ¦¬λΆ μΆκ° * π fix: νμΌ μμΉ λ³κ²½, λ€μ΄λ° λ³κ²½ * π docs: λ°μ΄ν° μΌλΆ λ³κ²½ * π docs: μ£Όμ μΆκ° * π fix: import λ³κ²½ * β¨ feat: λͺ© λ°μ΄ν° κ°κ³΅ * π design: μ€νμΌ λ³κ²½ * β¨ feat: ν¬λ£¨ 리뷰 쑰립 * π fix: νλ‘νλͺ¨μ λ³κ²½μ λ°λ₯Έ νμ , μ½λ μμ * π fix: lint μλ¬, λΉλ μλ¬ μμ * π fix: lint μλ¬, λΉλ μλ¬ μμ * π fix: lint μλ¬, λΉλ μλ¬ μμ * π design: reviewList μ½μ * π fix: μ΄λ¦ μμ * π Fix: λ³κ²½μμ² * π₯ Remove: μλ develop νμΌ μμ * Feat/56/my crew page (#58) * Feat: λμ ν¬λ£¨ νμ΄μ§ μ΄μ μμ± * π¨ Fix: λ¦°νΈν리ν°μ΄ μ μ© * π¨ Fix: λΉλ μ€λ₯ μμ * Update crew-card-list.tsx * π¨ Fix: λΉλ μ€λ₯ μ κ±° * π Chore: νμΌ μ΄λ * π Design: PCμμλ§ 2μ΄λ‘ 보μ΄λλ‘ μμ * π Design: ν¨λ© μΆκ°, νμΌ μ΄λ * π Design : μμ±νμ΄μ§ ν¨λ© μΆκ° * β¨ Feat: λ‘λ μ μ© * π¨ Style: λ¦°νΈ ν리ν°μ΄ μ μ© * π CI: μν¬νλ‘μ° μμ * π¨ Fix: μ λκ²½λ‘λ‘ μμ * Fix: λΉλμλ¬ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π¨ Fix: νμ μ€λ₯ μμ * π fix: κ²½λ‘μμ * β¨ feat: μ½μ λ§λ€κΈ° λͺ¨λ¬ μ°κ²° * π Fix: λΉλ μ€λ₯ μμ * β¨ feat: νμΈ μ·¨μ λͺ¨λ¬ μ°κ²° * π fix: μ€ν μμ * Feat/60/my-gathering-page (#73) * β¨ Feat: my-gathering λ²νΌ μΆκ° λ° νμ μ»΄ν¬λνΈ λΆλ¦¬ * β¨ Feat: νμ νμ΄μ§λ‘ λΆλ¦¬ * β¨ Feat: GatheringList μΆκ° * π Style: gatheringlist max-w μμ * π Style: μ 체 λ μ΄μμμ flex-1 μΆκ° * β¨ Feat: gatheringListWithDate μ»΄ν¬λνΈ μΆκ° * π Style: gatheringListWithDate UI μμ * β¨ Feat: popoverCalendar μΆκ°, π Fix: card λͺ¨λ°μΌνκ²½ μ΄λ―Έμ§ μ¬μ΄μ¦ μμ * β¨ Feat: μ°Έμ¬ν λͺ¨μ νμ΄μ§ μΆκ° * β¨ Feat: gathering Detail Modal API μΆκ° * π fix: κ²½λ‘μμ * π fix: prettier error μμ * π fix: api dummydataλ‘ μμ μμ * π¨ Fix: μν¬νλ‘μ° μμ * π design: 리μ€νΈ μ½μ λ° λμμΈ μμ * π fix: νμ μ΄λ¦ μμ #67 * π design: UI μμ #67 * π fix: cors url μΆκ° * π fix: νκ²½λ³μλ‘ μ¬μ€μ * π fix: url κΈ°λ³Έκ° μ€μ * π Design: λ²νΌ μ λ³κ²½ * π fix: μμ²μ url μμ * Feat/cr 58/create crew page (#75) * β¨ Feat: ν μ€νΈμΈν, λλ‘λ€μ΄, νμΌμΈν μΆκ° * β»οΈ Refactor: λλ‘λ€μ΄ μμ λ°μ * β¨ Feat: νμ΄μ§ μ΄μ μμ± * π Style: ν리ν°μ΄ μ μ© * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π Design: λμμΈ μ μ©, νμΌ μ΄λ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π§ͺ Test: μ€ν λ¦¬λΆ μΆκ°κ° * π Fix: λΉλ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π Chore: νμΌ μ΄λ * β¨ Feat: μ ν¨μ± κ²μ¬ μΆκ° * π§ Chore: μ€ν λ¦¬λΆ λΉλ μ€λ₯ λλ¬Έμ μ€μ μμ * π§ Chore: μ€μ μ κ±° * π Fix: dropdown λ€λ₯Έ κ³³μ μν₯ μκ°λλ‘ μμ * π Fix: onBlur λΉΌλ΄κΈ° * π Chore: νμΌ μ΄λ, CSRλ‘ μ ν * π¨ Style : λ¦°νΈν리ν°μ΄ μ μ© * π Fix: μ€λ₯ μμ * π Fix: λ²νΌ κ΅μ²΄ * π Fix: TextInput κ΅μ²΄ * π§ Chore: config λ³κ²½ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Fix: μ€ν λ¦¬λΆ λΉλμ€λ₯ μμ * π Chore: νμΌ μ΄λ * π¨ Fix: λ¦°νΈ μ€λ₯ μμ * π Fix: κ°μ νμΌ μ λ‘λμ μ λ‘λ λμ§ μλ λ¬Έμ ν΄κ²° * π Fix: νκΈμ λ ₯μ 21μμμ λλμκ°λ λ¬Έμ μμ * π Fix: λΈλ¬μ ν¨μ μΆ©λλ¬Έμ ν΄κ²° * β»οΈ Refactor: μ½λ 리ν©ν λ§ * π Fix: 쿼리 λΆλ¦¬ * β¨ feat: 리뷰 μμ± λͺ¨λ¬ μ½μ * π fix: api url μμ * π docs: mock.josn μΆκ° * β¨ feat: λͺ© apiλ₯Ό json serverλ‘ * π fix: μλͺ»λ λ€μ΄λ° λ³κ²½ * π¨ style: eslint μμ * β»οΈ refactor: isModalOpened ν¨μ μμ * π docs: id num μμ * π fix: totalReviewCountλ‘ μ΄λ¦ λ³κ²½ * π¦ chore: μ¬μ©νμ§ μλ νμΌ, ν΄λ μμ * π fix: url μλλλ‘ μμ * π fix: cors λ§ν¬ glitchλ‘ μμ * Hotfix: env λͺ μΉλ³κ²½ (#84) * Hotfix: env λͺ μΉλ³κ²½ * β»οΈ Refactor: fetchApi ν¨μ μ¬μ© * π Desgin: μ€νμΌ μμ * π Fix: νμ κ°μ , μλ¬ μ²λ¦¬ * π fix: μλν¬μΈνΈ λ³κ²½ * π fix: λ‘κ·ΈμΈ νμ§ μμ μ¬μ©μ λ§κΈ° * π fix: api μ°κ²°μ ν¬λ£¨ id μμλ‘ μ¬μ© * π fix: api μ°κ²°μ ν¬λ£¨ id μμλ‘ μ¬μ© * π fix: μ¬μ©νμ§ μλλΆλΆ μ£Όμμ²λ¦¬ * π fix: λ‘κ·Έμμ λ‘μ§μμ * Hofix/index page : νμΌμν μ»΄ν¬λνΈ μμ (#88) * Hotfix: env λͺ μΉλ³κ²½ * β»οΈ Refactor: fetchApi ν¨μ μ¬μ© * π Desgin: μ€νμΌ μμ * π Fix: νμ κ°μ , μλ¬ μ²λ¦¬ * π Fix: νμΌ μν μ»΄ν¬λνΈ μμ * π¨ Fix: μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * Hofix/index page (#91) * Hotfix: env λͺ μΉλ³κ²½ * β»οΈ Refactor: fetchApi ν¨μ μ¬μ© * π Desgin: μ€νμΌ μμ * π Fix: νμ κ°μ , μλ¬ μ²λ¦¬ * π Fix: νμΌ μν μ»΄ν¬λνΈ μμ * π¨ Fix: μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π¨ Fix: λΉλ μ€λ₯ μμ * π Fix: νΌ μ€λ₯ μ κ±° * π Docs: readme μΆκ° * Docs : 리λλ―Έ μμ * π Fix: λλ‘λ€μ΄ μλ¬λ©μμ§ μ€λ₯ μμ * π Fix: νΌ μ΄κΈ°κ° μμ * Update create-gathering.tsx * Feat/96/form (#97) * π Fix: λλ‘λ€μ΄ κ° μ νμ ν¬μ»€μ€ μμ λλλ‘ μμ * π Fix: ν μ€νΈ μμ (μ½μ μ‘κΈ° > μ½μ λ§λ€κΈ°) * π Fix: ν¬λ£¨ μμ±μ λν μΌ νμ΄μ§λ‘ μ΄λ, 리ν©ν λ§ * π Fix: μλ¬μνμΈλ° μλ‘ κ° μ±μΈ λ μλ¬ ν΄μ νκΈ°, 리ν©ν λ§ * π Fix: μ ν¨μ± κ²μ¬ λ μ§ μ ν μ€λ₯ μμ * π Fix: μ€ν¬λ‘€λ° λκ°λ‘ 보μ΄λ λ¬Έμ μμ * π¨ Fix: λ¦°νΈ μ€λ₯ μ κ±° * π Fix: λ²νΌ λ§ν¬λ‘ κ΅μ²΄ * π Fix: isToday ν¨μ κ°μ , λ°μ΄ν° νκ΅μκ° κΈ°μ€μΌλ‘ λ³κ²½ * π Fix: νΌ λμ κ°μ * π Fix: μ΄μ λ μ§ μ ν λ°©μ§, isToday λ μ§ λΉκ΅ μμ * π Fix: MockData λ μ§ νμ μμ * π Fix: μ΄λ―Έμ§ νμΌ νμ μ ν, ν¬κΈ° μ ν --------- Co-authored-by: HaeJungg <[email protected]> Co-authored-by: min5x5 <[email protected]> Co-authored-by: HaeJungg <[email protected]> Co-authored-by: μ‘°μμ <[email protected]> Co-authored-by: Cho Yeeun <[email protected]> Co-authored-by: User850413 <[email protected]> Co-authored-by: κΉλ―Όκ²½ <[email protected]> Co-authored-by: SOOHYEONG CHOI <[email protected]>

π Issue Ticket
#96
βοΈ Description
λ Έμ μ μμ μ¬ν μ²΄ν¬ νμ νμ΅λλ€!
β Checklist
PR
Test
Summary by CodeRabbit
λ¦΄λ¦¬μ¦ λ ΈνΈ
μ κ· κΈ°λ₯
CreateCrewFormλ°CreateGatheringFormμμ μ λ ₯ μ ν¨μ± κ²μ¬ κ°μ .CreateCrewPageμμ μ μΆ ν ν¬λ£¨ μμΈ νμ΄μ§λ‘ 리λλ μ κΈ°λ₯ μΆκ°.GatheringDetailModalPresenterμ λͺ¨λ¬ μ λͺ© λ³κ²½ λ° λ μ΄μμ κ°μ .DateTimePickerμμ κ³Όκ±° λ μ§ μ ν λΉνμ±ν κΈ°λ₯ μΆκ°.λ²κ·Έ μμ
FileInputμ»΄ν¬λνΈμ 미리보기 μν μμ .UI/UX κ°μ
HeroCrewμ»΄ν¬λνΈμ λ²νΌ κΈ°λ₯μ λ§ν¬λ‘ ν΅ν©νμ¬ μ¬μ©μ μΈν°νμ΄μ€ κ°μ .λ°μ΄ν° μ λ°μ΄νΈ