From a2a89b2546f394f8748427eaf83f3ca6e6b1d852 Mon Sep 17 00:00:00 2001 From: geongyu09 Date: Fri, 12 Apr 2024 23:20:40 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit guest모드의 도메인 변경에 따른 페이지 구조 변경 #23 --- .../(guest)/guest/detail/[programId]/page.tsx | 22 +++++ .../app/(guest)/{ => guest}/detail/error.tsx | 0 .../(guest)/{ => guest}/detail/loading.tsx | 0 FE/src/app/(guest)/{ => guest}/layout.tsx | 2 + .../app/(guest)/{ => guest}/main/loading.tsx | 0 FE/src/app/(guest)/guest/main/page.tsx | 98 +++++++++++++++++++ .../(program)}/detail/[programId]/page.tsx | 6 +- .../app/(private)/(program)/detail/error.tsx | 19 ++++ .../(private)/(program)/detail/loading.tsx | 4 + .../app/(private)/(program)/main/loading.tsx | 6 ++ .../(program)}/main/page.tsx | 1 + 11 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 FE/src/app/(guest)/guest/detail/[programId]/page.tsx rename FE/src/app/(guest)/{ => guest}/detail/error.tsx (100%) rename FE/src/app/(guest)/{ => guest}/detail/loading.tsx (100%) rename FE/src/app/(guest)/{ => guest}/layout.tsx (73%) rename FE/src/app/(guest)/{ => guest}/main/loading.tsx (100%) create mode 100644 FE/src/app/(guest)/guest/main/page.tsx rename FE/src/app/{(guest) => (private)/(program)}/detail/[programId]/page.tsx (74%) create mode 100644 FE/src/app/(private)/(program)/detail/error.tsx create mode 100644 FE/src/app/(private)/(program)/detail/loading.tsx create mode 100644 FE/src/app/(private)/(program)/main/loading.tsx rename FE/src/app/{(guest) => (private)/(program)}/main/page.tsx (99%) diff --git a/FE/src/app/(guest)/guest/detail/[programId]/page.tsx b/FE/src/app/(guest)/guest/detail/[programId]/page.tsx new file mode 100644 index 00000000..72bb0405 --- /dev/null +++ b/FE/src/app/(guest)/guest/detail/[programId]/page.tsx @@ -0,0 +1,22 @@ +import AttendeeInfoContainer from "@/components/programDetail/attendee/AttendeeInfo.container"; +import ProgramInfo from "@/components/programDetail/program/ProgramInfo"; +import UserAttendModalContainer from "@/components/programDetail/userAttendModal/UserAttendModal.container"; + +interface ProgramDetailPageProps { + params: { + programId: string; + }; +} + +const ProgramDetailPage = ({ params }: ProgramDetailPageProps) => { + const { programId } = params; + + return ( +
+ + + +
+ ); +}; +export default ProgramDetailPage; diff --git a/FE/src/app/(guest)/detail/error.tsx b/FE/src/app/(guest)/guest/detail/error.tsx similarity index 100% rename from FE/src/app/(guest)/detail/error.tsx rename to FE/src/app/(guest)/guest/detail/error.tsx diff --git a/FE/src/app/(guest)/detail/loading.tsx b/FE/src/app/(guest)/guest/detail/loading.tsx similarity index 100% rename from FE/src/app/(guest)/detail/loading.tsx rename to FE/src/app/(guest)/guest/detail/loading.tsx diff --git a/FE/src/app/(guest)/layout.tsx b/FE/src/app/(guest)/guest/layout.tsx similarity index 73% rename from FE/src/app/(guest)/layout.tsx rename to FE/src/app/(guest)/guest/layout.tsx index 972949b5..66e74b1a 100644 --- a/FE/src/app/(guest)/layout.tsx +++ b/FE/src/app/(guest)/guest/layout.tsx @@ -1,4 +1,5 @@ import Header from "@/components/common/header/Header"; +import AuthValidate from "@/components/common/validate/Auth"; export default function GuestLayout({ children, @@ -6,6 +7,7 @@ export default function GuestLayout({ return ( <>
+
{children}
diff --git a/FE/src/app/(guest)/main/loading.tsx b/FE/src/app/(guest)/guest/main/loading.tsx similarity index 100% rename from FE/src/app/(guest)/main/loading.tsx rename to FE/src/app/(guest)/guest/main/loading.tsx diff --git a/FE/src/app/(guest)/guest/main/page.tsx b/FE/src/app/(guest)/guest/main/page.tsx new file mode 100644 index 00000000..8af24436 --- /dev/null +++ b/FE/src/app/(guest)/guest/main/page.tsx @@ -0,0 +1,98 @@ +// TODO: 서버 컴포넌트로 변경하기 +"use client"; + +import { useSearchParams } from "next/navigation"; +import { Suspense, useEffect, useState } from "react"; +import { ErrorBoundary } from "react-error-boundary"; +import ErrorFallback from "@/components/common/ErrorFallback"; +import Tab from "@/components/common/tabs/Tab"; +import TextTab from "@/components/common/tabs/TextTab"; +import ProgramList from "@/components/main/ProgramList"; +import ProgramListLoader from "@/components/main/ProgramList.loader"; +import TeamBuildingDropup from "@/components/main/TeamBuildingDropup"; +import MAIN from "@/constants/MAIN"; +import PROGRAM from "@/constants/PROGRAM"; +import { ProgramCategoryWithAll, ProgramStatus } from "@/types/program"; + +const MainPage = () => { + const searchParams = useSearchParams(); + + // TODO: Hook으로 변경하기 + const [queryValue, setQueryValue] = useState(MAIN.DEFAULT_QUERY); + + // TODO: useEffect를 Hook으로 변경하기 + useEffect(() => { + setQueryValue({ + ...MAIN.DEFAULT_QUERY, + category: + (searchParams.get("category") as ProgramCategoryWithAll) ?? "all", + status: (searchParams.get("status") as ProgramStatus) ?? "active", + page: searchParams.get("page") ?? "1", + }); + }, [searchParams]); + + useEffect(() => { + window.history.replaceState( + {}, + "", + `?category=${queryValue.category}&status=${queryValue.status}&page=${queryValue.page}`, + ); + }, [queryValue]); + + const handleSetCategory = (category: ProgramCategoryWithAll) => { + setQueryValue({ + ...queryValue, + category, + page: "1", + }); + }; + + const handleSetStatus = (status: ProgramStatus) => { + setQueryValue({ + ...queryValue, + status, + page: "1", + }); + }; + + const handleSetPage = (page: number) => { + setQueryValue({ + ...queryValue, + page: page.toString(), + }); + }; + + // TODO: 합성 컴포넌트! + return ( +
+ + options={Object.values(PROGRAM.CATEGORY_TAB_WITH_ALL)} + selected={queryValue.category} + onItemClick={(v) => handleSetCategory(v)} + size="lg" + baseColor="white" + pointColor="navy" + align="line" + /> + + options={Object.values(PROGRAM.STATUS_TAB)} + selected={queryValue.status} + onClick={(v) => handleSetStatus(v)} + /> + + }> + + + + +
+ ); +}; + +export default MainPage; diff --git a/FE/src/app/(guest)/detail/[programId]/page.tsx b/FE/src/app/(private)/(program)/detail/[programId]/page.tsx similarity index 74% rename from FE/src/app/(guest)/detail/[programId]/page.tsx rename to FE/src/app/(private)/(program)/detail/[programId]/page.tsx index b9feb876..9315cc77 100644 --- a/FE/src/app/(guest)/detail/[programId]/page.tsx +++ b/FE/src/app/(private)/(program)/detail/[programId]/page.tsx @@ -13,9 +13,9 @@ const ProgramDetailPage = ({ params }: ProgramDetailPageProps) => { return (
- - - + + +
); }; diff --git a/FE/src/app/(private)/(program)/detail/error.tsx b/FE/src/app/(private)/(program)/detail/error.tsx new file mode 100644 index 00000000..adf565a8 --- /dev/null +++ b/FE/src/app/(private)/(program)/detail/error.tsx @@ -0,0 +1,19 @@ +"use client"; + +import ErrorFallback from "@/components/common/ErrorFallback"; + +const DetailPageError = () => { + const error = { + message: "행사 정보를 불러오는 중에 오류가 발생했습니다.", + }; + + return ( + { + window.location.reload(); + }} + /> + ); +}; +export default DetailPageError; diff --git a/FE/src/app/(private)/(program)/detail/loading.tsx b/FE/src/app/(private)/(program)/detail/loading.tsx new file mode 100644 index 00000000..4a5cb70e --- /dev/null +++ b/FE/src/app/(private)/(program)/detail/loading.tsx @@ -0,0 +1,4 @@ +import LoadingSpinner from "@/components/common/LoadingSpinner"; + +const DetailLoading = () => ; +export default DetailLoading; diff --git a/FE/src/app/(private)/(program)/main/loading.tsx b/FE/src/app/(private)/(program)/main/loading.tsx new file mode 100644 index 00000000..2ec65fef --- /dev/null +++ b/FE/src/app/(private)/(program)/main/loading.tsx @@ -0,0 +1,6 @@ +import LoadingSpinner from "@/components/common/LoadingSpinner"; + +const MainLoading = () => { + return ; +}; +export default MainLoading; diff --git a/FE/src/app/(guest)/main/page.tsx b/FE/src/app/(private)/(program)/main/page.tsx similarity index 99% rename from FE/src/app/(guest)/main/page.tsx rename to FE/src/app/(private)/(program)/main/page.tsx index e3dcb8b2..78b3e60d 100644 --- a/FE/src/app/(guest)/main/page.tsx +++ b/FE/src/app/(private)/(program)/main/page.tsx @@ -86,6 +86,7 @@ const MainPage = () => { programStatus={queryValue.status} page={+queryValue.page} setPage={handleSetPage} + isLoggedIn /> From 6c2cfed2646f334850e44d8889c0d61e7162840b Mon Sep 17 00:00:00 2001 From: geongyu09 Date: Fri, 12 Apr 2024 23:21:29 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20guest=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20url=20?= =?UTF-8?q?=EC=83=81=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit url 상수 추가 #23 --- FE/src/constants/ROUTES.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FE/src/constants/ROUTES.ts b/FE/src/constants/ROUTES.ts index a95dd097..a13007d5 100644 --- a/FE/src/constants/ROUTES.ts +++ b/FE/src/constants/ROUTES.ts @@ -1,7 +1,9 @@ const ROUTES = { MAIN: "/main", + GUEST_MAIN: "/guest/main", CREATE: "/create", DETAIL: (programId: number) => `/detail/${programId}`, + GUEST_DETAIL: (programId: number) => `/guest/detail/${programId}`, EDIT: (programId: number) => `/edit/${programId}`, ERROR: "/error", LOGIN: "/login", From 3f6e128104ee511fc2ea46636d05902bb0a66103 Mon Sep 17 00:00:00 2001 From: geongyu09 Date: Fri, 12 Apr 2024 23:23:34 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20guest=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A6=AC?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /guest 접근시 로그인이 되어있는 경우 기존 페이지로 이동 /guest 에서 활동시 로고 클릭시 guest 도메인의 /main으로 이동 로그인 화면에서 게스트 모드로 체험 클릭시 /guest 로 이동 #23 --- FE/src/app/(private)/layout.tsx | 6 +++++- FE/src/components/common/header/Header.tsx | 2 +- FE/src/components/common/header/Logo.tsx | 14 ++++++++++---- FE/src/components/login/guest/GuestLoginButton.tsx | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/FE/src/app/(private)/layout.tsx b/FE/src/app/(private)/layout.tsx index b3876d21..cbebc4be 100644 --- a/FE/src/app/(private)/layout.tsx +++ b/FE/src/app/(private)/layout.tsx @@ -1,11 +1,15 @@ import { PropsWithChildren } from "react"; +import Header from "@/components/common/header/Header"; import AuthValidate from "@/components/common/validate/Auth"; const PrivateLayout = ({ children }: PropsWithChildren) => { return ( <> - {children} +
+
+ {children} +
); }; diff --git a/FE/src/components/common/header/Header.tsx b/FE/src/components/common/header/Header.tsx index cdfc6b0e..0ec97a95 100644 --- a/FE/src/components/common/header/Header.tsx +++ b/FE/src/components/common/header/Header.tsx @@ -18,7 +18,7 @@ const Header = () => { return (
- + {!isLoading && (
{isLoggedIn ? ( diff --git a/FE/src/components/common/header/Logo.tsx b/FE/src/components/common/header/Logo.tsx index e01fab4d..f5b26fa2 100644 --- a/FE/src/components/common/header/Logo.tsx +++ b/FE/src/components/common/header/Logo.tsx @@ -6,16 +6,22 @@ const INIT_CATEGORY = "all"; const INIT_STATUS = "active"; const INIT_PAGE = "1"; -const Logo = () => { +interface LogoProps { + isLoggedIn: boolean; +} + +const Logo = ({ isLoggedIn }: LogoProps) => { const router = useRouter(); const pathname = usePathname(); + const mainUrl = isLoggedIn ? ROUTES.MAIN : ROUTES.GUEST_MAIN; + const handleClick = () => { - if (pathname === ROUTES.MAIN) { - window.location.href = `${ROUTES.MAIN}?category=${INIT_CATEGORY}&status=${INIT_STATUS}&page=${INIT_PAGE}`; + if (pathname === mainUrl) { + window.location.href = `${mainUrl}?category=${INIT_CATEGORY}&status=${INIT_STATUS}&page=${INIT_PAGE}`; return; } - router.push(ROUTES.MAIN); + router.push(mainUrl); }; return ( diff --git a/FE/src/components/login/guest/GuestLoginButton.tsx b/FE/src/components/login/guest/GuestLoginButton.tsx index d91c433d..6c556b66 100644 --- a/FE/src/components/login/guest/GuestLoginButton.tsx +++ b/FE/src/components/login/guest/GuestLoginButton.tsx @@ -3,7 +3,7 @@ import StyledLoginButton from "../ui/StyledLoginButton"; export default function GuestLoginButton() { return ( Date: Fri, 12 Apr 2024 23:25:46 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20guest=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit api는 guest에 따른 반환값이 동일하므로, 하나의 api 및 해당 api를 queryFn으로 받은 query는 유지하며, guest에 따른 url만 변경되도록 수정 /guest에 접근 확인은 layout에서 모두 처리하므로, /guest의 모든 페이지는 로그인이 안되어 있다는 가정하에 최적화, 기존 페이지는 로기인이 되어있다는 가정하에 최적화 #23 --- FE/src/apis/program.ts | 11 +++++-- FE/src/components/main/ProgramList.tsx | 9 +++++- FE/src/components/main/ProgramListItem.tsx | 8 +++-- .../attendee/AttendeeInfo.container.tsx | 30 +++++++++++-------- .../programDetail/program/ProgramInfo.tsx | 5 ++-- .../UserAttendModal.container.tsx | 8 +++-- FE/src/hooks/query/useProgramQuery.ts | 8 +++-- 7 files changed, 54 insertions(+), 25 deletions(-) diff --git a/FE/src/apis/program.ts b/FE/src/apis/program.ts index e88060db..88df4037 100644 --- a/FE/src/apis/program.ts +++ b/FE/src/apis/program.ts @@ -21,9 +21,13 @@ import MESSAGE from "@/constants/MESSAGE"; export const getProgramById = async ( programId: number, + isLoggedIn: boolean, ): Promise => { + const url = isLoggedIn + ? API.PROGRAM.DETAIL(programId) + : API.PROGRAM.GUEST_DETAIL(programId); const { data } = await https({ - url: API.PROGRAM.GUEST_DETAIL(programId), + url, }); return new ProgramInfoDto(data?.data); }; @@ -37,6 +41,7 @@ export interface GetProgramListRequest { programStatus: ProgramStatus; size: number; page: number; + isLoggedIn: boolean; } export const getProgramList = async ({ @@ -44,9 +49,11 @@ export const getProgramList = async ({ programStatus, size, page, + isLoggedIn, }: GetProgramListRequest): Promise => { + const url = isLoggedIn ? API.PROGRAM.LIST : API.PROGRAM.GUEST_LIST; const { data } = await https({ - url: API.PROGRAM.GUEST_LIST, + url, method: "GET", params: { category, diff --git a/FE/src/components/main/ProgramList.tsx b/FE/src/components/main/ProgramList.tsx index cabccb60..b661ff5c 100644 --- a/FE/src/components/main/ProgramList.tsx +++ b/FE/src/components/main/ProgramList.tsx @@ -10,6 +10,7 @@ interface ProgramListProps { programStatus?: ProgramStatus; page?: number; setPage: (page: number) => void; + isLoggedIn: boolean; } const ProgramList = ({ @@ -17,6 +18,7 @@ const ProgramList = ({ programStatus = "active", page = 1, setPage: handleSetPage, + isLoggedIn, }: ProgramListProps) => { const queryClient = useQueryClient(); const { data: programListData } = useGetProgramList({ @@ -24,6 +26,7 @@ const ProgramList = ({ programStatus, page: page - 1, size: PROGRAM.LIST_SIZE, + isLoggedIn, }); queryClient.setQueryData(["totalPage"], programListData.totalPage); @@ -33,7 +36,11 @@ const ProgramList = ({ <>
{programs.map((program) => ( - + ))}
{ +const ProgramListItem = ({ programData, isLoggedIn }: ProgramListItemProps) => { const { programId, title, deadLine } = programData; + const lingUrl = isLoggedIn + ? ROUTES.DETAIL(programId) + : ROUTES.GUEST_DETAIL(programId); return (

diff --git a/FE/src/components/programDetail/attendee/AttendeeInfo.container.tsx b/FE/src/components/programDetail/attendee/AttendeeInfo.container.tsx index eff4c5d0..4e24007f 100644 --- a/FE/src/components/programDetail/attendee/AttendeeInfo.container.tsx +++ b/FE/src/components/programDetail/attendee/AttendeeInfo.container.tsx @@ -4,10 +4,10 @@ import { ErrorBoundary } from "react-error-boundary"; import AttendeeInfo from "./AttendeeInfo"; import BluredAttedee from "./BluredAttedee"; import ErrorFallback from "@/components/common/ErrorFallback"; -import { CheckIsLoggedIn } from "@/utils/authWithStorage"; interface AttendeeInfoContainerProps { programId: number; + isLoggedIn: boolean; } export const attendStatuses = [ @@ -17,24 +17,30 @@ export const attendStatuses = [ "nonResponse", ] as const; -const AttendeeInfoContainer = ({ programId }: AttendeeInfoContainerProps) => { - const isLoggedIn = CheckIsLoggedIn(); +const AttendeeInfoContainer = ({ + programId, + isLoggedIn, +}: AttendeeInfoContainerProps) => { return ( - -

- {isLoggedIn - ? attendStatuses.map((status) => ( + <> + {!isLoggedIn && + attendStatuses.map((status) => ( + + ))} + + +
+ {isLoggedIn && + attendStatuses.map((status) => ( - )) - : attendStatuses.map((status) => ( - ))} -
-
+
+ + ); }; export default AttendeeInfoContainer; diff --git a/FE/src/components/programDetail/program/ProgramInfo.tsx b/FE/src/components/programDetail/program/ProgramInfo.tsx index 632832ad..6c9a016c 100644 --- a/FE/src/components/programDetail/program/ProgramInfo.tsx +++ b/FE/src/components/programDetail/program/ProgramInfo.tsx @@ -7,14 +7,15 @@ import { useGetProgramById } from "@/hooks/query/useProgramQuery"; interface ProgramInfoProps { programId: number; + isLoggedIn: boolean; } -const ProgramInfo = ({ programId }: ProgramInfoProps) => { +const ProgramInfo = ({ programId, isLoggedIn }: ProgramInfoProps) => { const { data: programData, isLoading, isError, - } = useGetProgramById(programId); + } = useGetProgramById(programId, isLoggedIn); if (isLoading) return ; if (isError) return
에러 발생
; diff --git a/FE/src/components/programDetail/userAttendModal/UserAttendModal.container.tsx b/FE/src/components/programDetail/userAttendModal/UserAttendModal.container.tsx index f6f0bd28..653782ad 100644 --- a/FE/src/components/programDetail/userAttendModal/UserAttendModal.container.tsx +++ b/FE/src/components/programDetail/userAttendModal/UserAttendModal.container.tsx @@ -8,16 +8,18 @@ import UserAttendModal from "./UserAttendModal"; import ErrorFallbackNoIcon from "@/components/common/ErrorFallbackNoIcon"; import useModal from "@/hooks/useModal"; import useOutsideRef from "@/hooks/useOutsideRef"; -import { CheckIsLoggedIn } from "@/utils/authWithStorage"; interface UserAttendModalProps { programId: number; + isLoggedIn: boolean; } -const UserAttendModalContainer = ({ programId }: UserAttendModalProps) => { +const UserAttendModalContainer = ({ + programId, + isLoggedIn, +}: UserAttendModalProps) => { const { isOpen, openModal, closeModal } = useModal(); const modalRef = useOutsideRef(closeModal); - const isLoggedIn = CheckIsLoggedIn(); const modalStyle = classNames( "fixed left-0 z-10 flex h-60 w-full flex-col items-center gap-5 rounded-t-3xl border-t-2 bg-background shadow-2xl transition-all duration-500", diff --git a/FE/src/hooks/query/useProgramQuery.ts b/FE/src/hooks/query/useProgramQuery.ts index 59413eb2..1534a5a5 100644 --- a/FE/src/hooks/query/useProgramQuery.ts +++ b/FE/src/hooks/query/useProgramQuery.ts @@ -71,13 +71,13 @@ export const useDeleteProgram = (programId: number) => { }); }; -export const useGetProgramById = (programId: number) => { +export const useGetProgramById = (programId: number, isLoggedIn: boolean) => { const queryClient = useQueryClient(); return useQuery({ queryKey: [API.PROGRAM.DETAIL(programId)], queryFn: () => - getProgramById(programId).then((res) => { + getProgramById(programId, isLoggedIn).then((res) => { queryClient.setQueryData( ["programStatus", programId], res.programStatus, @@ -96,10 +96,12 @@ export const useGetProgramList = ({ programStatus, size, page, + isLoggedIn, }: GetProgramListRequest) => { return useQuery({ queryKey: [API.PROGRAM.LIST, category, programStatus, size, page], - queryFn: () => getProgramList({ category, programStatus, size, page }), + queryFn: () => + getProgramList({ category, programStatus, size, page, isLoggedIn }), select: (data) => ({ totalPage: data?.totalPage, programs: data?.programs, From a23d2d8040108d54387ab791b31e6c3b1de83c10 Mon Sep 17 00:00:00 2001 From: geongyu09 Date: Fri, 12 Apr 2024 23:44:32 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=EC=9D=B8=EC=9E=90=EB=A5=BC=20?= =?UTF-8?q?=EC=A3=BC=EC=A7=80=20=EC=95=8A=EC=95=84=20=EB=B9=8C=EB=93=9C?= =?UTF-8?q?=EA=B0=80=20=EC=95=88=EB=90=98=EB=8D=98=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #23 --- FE/src/app/(private)/(program)/edit/[programId]/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FE/src/app/(private)/(program)/edit/[programId]/page.tsx b/FE/src/app/(private)/(program)/edit/[programId]/page.tsx index e9ec9227..4aa6aaec 100644 --- a/FE/src/app/(private)/(program)/edit/[programId]/page.tsx +++ b/FE/src/app/(private)/(program)/edit/[programId]/page.tsx @@ -14,7 +14,7 @@ interface ProgramEditPageProps { const ProgramEditPage = ({ params }: ProgramEditPageProps) => { const { programId } = params; - const { data: programInfo, isLoading } = useGetProgramById(+programId); + const { data: programInfo, isLoading } = useGetProgramById(+programId, true); if (isLoading) return ;