From f8a56860fec45117ce069de0089a0acc86b92f23 Mon Sep 17 00:00:00 2001 From: Dahyeon Date: Wed, 29 Apr 2026 18:02:03 +0900 Subject: [PATCH 1/6] =?UTF-8?q?hotfix:=20refresh=20appUrl=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/proxy/auth/refresh/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/proxy/auth/refresh/route.ts b/src/app/api/proxy/auth/refresh/route.ts index c55b1391..6aa946a4 100644 --- a/src/app/api/proxy/auth/refresh/route.ts +++ b/src/app/api/proxy/auth/refresh/route.ts @@ -53,7 +53,7 @@ export async function POST() { } export async function GET(request: NextRequest) { - const appUrl = request.nextUrl.origin; + const appUrl = process.env.NEXT_PUBLIC_APP_URL ?? request.nextUrl.origin; const redirectPath = request.nextUrl.searchParams.get('redirect'); const safeRedirect = redirectPath && redirectPath.startsWith('/') && !redirectPath.startsWith('//') From f9e05d86a50466637e9fd02aed4d58f0eaebbd9a Mon Sep 17 00:00:00 2001 From: Dahyeon Date: Wed, 29 Apr 2026 22:50:25 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20=EC=A0=95=EB=B3=B4=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(private)/[clubId]/admin/layout.tsx | 2 +- src/components/admin/club-info/ClubInfoPageContent.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/(private)/[clubId]/admin/layout.tsx b/src/app/(private)/[clubId]/admin/layout.tsx index ac3829b0..51a66fa8 100644 --- a/src/app/(private)/[clubId]/admin/layout.tsx +++ b/src/app/(private)/[clubId]/admin/layout.tsx @@ -38,7 +38,7 @@ export default async function AdminLayout({
-
+
{children}
diff --git a/src/components/admin/club-info/ClubInfoPageContent.tsx b/src/components/admin/club-info/ClubInfoPageContent.tsx index 1270ff5f..8a1268d0 100644 --- a/src/components/admin/club-info/ClubInfoPageContent.tsx +++ b/src/components/admin/club-info/ClubInfoPageContent.tsx @@ -129,7 +129,7 @@ function ClubInfoPageContent({ schoolNames }: ClubInfoPageContentProps) { ); return ( -
+
{isEditMode && ( Date: Wed, 29 Apr 2026 23:16:09 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20input=20=EA=B8=80=EC=9E=90=EC=88=98?= =?UTF-8?q?=20=EC=84=B8=EA=B8=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/club-info/ClubInfoBasicSection.tsx | 46 +++++++++++++------ src/components/auth/hub/CreateClubForm.tsx | 28 +++++++++-- src/components/ui/Input.tsx | 12 ++++- 3 files changed, 68 insertions(+), 18 deletions(-) diff --git a/src/components/admin/club-info/ClubInfoBasicSection.tsx b/src/components/admin/club-info/ClubInfoBasicSection.tsx index b1b02368..b18f0c2c 100644 --- a/src/components/admin/club-info/ClubInfoBasicSection.tsx +++ b/src/components/admin/club-info/ClubInfoBasicSection.tsx @@ -40,21 +40,41 @@ function ClubInfoBasicSection({ - onNameChange(e.target.value)} - className="bg-container-neutral-alternative rounded-sm border-transparent px-400 py-300" - /> +
+ onNameChange(e.target.value)} + maxLength={30} + className="bg-container-neutral-alternative rounded-sm border-transparent px-400 py-300" + /> +
+ + {clubName.length}/30 + +
+
- - onDescriptionChange(e.target.value)} - maxLength={30} - placeholder="동아리를 소개하는 짧은 글을 작성해주세요" - className="bg-container-neutral-alternative rounded-sm border-transparent px-400 py-300" - /> + +
+ onDescriptionChange(e.target.value)} + maxLength={30} + placeholder="동아리를 소개하는 짧은 글을 작성해주세요" + className="bg-container-neutral-alternative rounded-sm border-transparent px-400 py-300" + /> +
+ {descriptionError ? ( + {descriptionError} + ) : ( + + )} + + {description.length}/30 + +
+
diff --git a/src/components/auth/hub/CreateClubForm.tsx b/src/components/auth/hub/CreateClubForm.tsx index 33698538..6e406932 100644 --- a/src/components/auth/hub/CreateClubForm.tsx +++ b/src/components/auth/hub/CreateClubForm.tsx @@ -60,6 +60,8 @@ function CreateClubForm({ schoolNames, schoolLoadError = false }: CreateClubForm const contactType = useWatch({ control, name: 'contactType' }); const email = useWatch({ control, name: 'email' }); + const clubName = useWatch({ control, name: 'name' }); + const description = useWatch({ control, name: 'description' }); const hasValidEmail = Boolean(email?.trim()) && !errors.email; const isEmailContactDisabled = !hasValidEmail; @@ -143,19 +145,37 @@ function CreateClubForm({ schoolNames, schoolLoadError = false }: CreateClubForm {/* 동아리 이름 */} - - + + +
+ + + {(clubName ?? '').length}/30 + +
{/* 동아리 소개 */} - + - 30자 제한 +
+ + + {(description ?? '').length}/30 + +
{/* 동아리 기수 */} diff --git a/src/components/ui/Input.tsx b/src/components/ui/Input.tsx index b5d69866..45988cb1 100644 --- a/src/components/ui/Input.tsx +++ b/src/components/ui/Input.tsx @@ -19,10 +19,19 @@ interface InputProps extends InputHTMLAttributes { clearable?: boolean; error?: boolean; wrapperClassName?: string; + clearButtonClassName?: string; ref?: React.Ref; } -function Input({ className, clearable, error, wrapperClassName, ref, ...props }: InputProps) { +function Input({ + className, + clearable, + error, + wrapperClassName, + clearButtonClassName, + ref, + ...props +}: InputProps) { const hasTypo = className?.split(' ').some((c) => c.startsWith('typo-')); const typoClass = hasTypo ? undefined : 'typo-body2'; const innerRef = useRef(null); @@ -99,6 +108,7 @@ function Input({ className, clearable, error, wrapperClassName, ref, ...props }: 'flex items-center', 'text-icon-normal', 'cursor-pointer transition-colors', + clearButtonClassName, )} aria-label="입력 내용 지우기" > From 4645e0aab62b87f49fe97166d2a983d5d757df2f Mon Sep 17 00:00:00 2001 From: Dahyeon Date: Wed, 29 Apr 2026 23:25:12 +0900 Subject: [PATCH 4/6] =?UTF-8?q?style:=20=EA=B0=84=EA=B2=A9=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/admin/club-info/AdminInfoCard.tsx | 8 +++++--- src/components/admin/club-info/ClubInfoContactSection.tsx | 2 +- src/components/admin/club-info/FieldBlock.tsx | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/admin/club-info/AdminInfoCard.tsx b/src/components/admin/club-info/AdminInfoCard.tsx index 97bdbb46..c3a4f9b2 100644 --- a/src/components/admin/club-info/AdminInfoCard.tsx +++ b/src/components/admin/club-info/AdminInfoCard.tsx @@ -17,13 +17,15 @@ function AdminInfoCard({ return (
-

{title}

-
+

{title}

+
{children}
diff --git a/src/components/admin/club-info/ClubInfoContactSection.tsx b/src/components/admin/club-info/ClubInfoContactSection.tsx index 55689566..ccd4277e 100644 --- a/src/components/admin/club-info/ClubInfoContactSection.tsx +++ b/src/components/admin/club-info/ClubInfoContactSection.tsx @@ -32,7 +32,7 @@ function ClubInfoContactSection({ title="연락처" titleGapClassName="mt-[58px]" contentClassName="gap-0" - className="pb-[70px]" + className="pb-[40px]" >
diff --git a/src/components/admin/club-info/FieldBlock.tsx b/src/components/admin/club-info/FieldBlock.tsx index 9d3459ac..22c0e788 100644 --- a/src/components/admin/club-info/FieldBlock.tsx +++ b/src/components/admin/club-info/FieldBlock.tsx @@ -7,8 +7,8 @@ interface FieldBlockProps { function FieldBlock({ label, helper, error, children }: FieldBlockProps) { return ( -
- {label} +
+ {label} {children} {error ? ( {error} From b66ab8c81cebfde3aa673dc13a7794a9cc770b0f Mon Sep 17 00:00:00 2001 From: Dahyeon Date: Wed, 29 Apr 2026 23:59:56 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20useHomeGuard=EC=97=90=EC=84=9C=20clu?= =?UTF-8?q?bName=20=EC=9D=98=EC=A1=B4=EC=84=B1=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/home/useHomeGuard.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/hooks/home/useHomeGuard.ts b/src/hooks/home/useHomeGuard.ts index e2290307..961f89bd 100644 --- a/src/hooks/home/useHomeGuard.ts +++ b/src/hooks/home/useHomeGuard.ts @@ -3,13 +3,12 @@ import { useEffect, useSyncExternalStore } from 'react'; import { useRouter } from 'next/navigation'; import { isAxiosError } from 'axios'; -import { useClubActions, useClubId, useClubName, useClubStore } from '@/stores/useClubStore'; +import { useClubActions, useClubId, useClubStore } from '@/stores/useClubStore'; import { useHomeQuery } from './useHomeQuery'; export function useHomeGuard() { const router = useRouter(); const clubId = useClubId(); - const clubName = useClubName(); const { reset } = useClubActions(); const { error } = useHomeQuery(); @@ -21,11 +20,11 @@ export function useHomeGuard() { useEffect(() => { if (!hydrated) return; - if (!clubId || !clubName) { + if (!clubId) { reset(); router.replace('/hub'); } - }, [hydrated, clubId, clubName, reset, router]); + }, [hydrated, clubId, reset, router]); useEffect(() => { if (isAxiosError(error) && error.response?.status === 404) { From c206c7d4dbe02c4b54cd6c4bec536f62c3df09eb Mon Sep 17 00:00:00 2001 From: Dahyeon Date: Thu, 30 Apr 2026 00:09:13 +0900 Subject: [PATCH 6/6] =?UTF-8?q?chore:=20=EC=A0=95=EA=B8=B0=EB=AA=A8?= =?UTF-8?q?=EC=9E=84=20->=20=EC=84=B8=EC=85=98=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attendance/AttendanceHistoryContent.tsx | 2 +- src/components/auth/hub/CreateClubForm.tsx | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/components/attendance/AttendanceHistoryContent.tsx b/src/components/attendance/AttendanceHistoryContent.tsx index cd69256d..e720797f 100644 --- a/src/components/attendance/AttendanceHistoryContent.tsx +++ b/src/components/attendance/AttendanceHistoryContent.tsx @@ -81,7 +81,7 @@ function AttendanceHistoryContent({ summary, errorMessage }: AttendanceHistoryCo
- +
diff --git a/src/components/auth/hub/CreateClubForm.tsx b/src/components/auth/hub/CreateClubForm.tsx index 6e406932..adbb7838 100644 --- a/src/components/auth/hub/CreateClubForm.tsx +++ b/src/components/auth/hub/CreateClubForm.tsx @@ -153,8 +153,14 @@ function CreateClubForm({ schoolNames, schoolLoadError = false }: CreateClubForm maxLength={30} className="typo-body1 rounded-lg px-400 py-300" /> -
- +
+
+ {errors.name?.message ? ( + + {errors.name.message} + + ) : null} +
{(clubName ?? '').length}/30 @@ -170,8 +176,14 @@ function CreateClubForm({ schoolNames, schoolLoadError = false }: CreateClubForm clearButtonClassName="text-icon-alternative" className="typo-body1 rounded-lg px-400 py-300" /> -
- +
+
+ {errors.description?.message ? ( + + {errors.description.message} + + ) : null} +
{(description ?? '').length}/30