diff --git a/src/components/user/guest-book/GuestBookBanner.tsx b/src/components/user/guest-book/GuestBookBanner.tsx index 6b43b57..d23151c 100644 --- a/src/components/user/guest-book/GuestBookBanner.tsx +++ b/src/components/user/guest-book/GuestBookBanner.tsx @@ -1,10 +1,11 @@ import { useEffect, useState } from 'react'; import { Icon } from '@/components/shared'; -import { useLogin } from '@/hooks/useLogin'; interface GuestBookBannerProps { visitLogs?: VisitLog[]; ownerName: string; + isLogin: boolean; + onClick: () => void; } interface VisitLog { @@ -30,8 +31,9 @@ const Log = ({ text, name }: Pick) => { export const GuestBookBanner = ({ visitLogs, ownerName, + isLogin, + onClick, }: GuestBookBannerProps) => { - const { login } = useLogin(); const [activeIndex, setActiveIndex] = useState(0); const [isTransitioning, setIsTransitioning] = useState(false); const translateY = -activeIndex * 36; @@ -66,8 +68,11 @@ export const GuestBookBanner = ({ if (!visitLogs || !visitLogs.length) { return ( -
- {login ? ( +
+ {isLogin ? (

@@ -88,7 +93,10 @@ export const GuestBookBanner = ({ } return ( -

+
(false); - - useIsomorphicLayoutEffect(() => { - const user_id = localStorage.getItem('userId'); - if (user_id) { - setLogin(true); - return; - } - setLogin(false); - }, []); - - return { login }; -} diff --git a/src/hooks/useStoredUserId.ts b/src/hooks/useStoredUserId.ts new file mode 100644 index 0000000..24d2c02 --- /dev/null +++ b/src/hooks/useStoredUserId.ts @@ -0,0 +1,16 @@ +import { useState } from 'react'; +import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'; + +export function useStoredUserId() { + const [storedUserId, setStoredUserId] = useState(null); + + useIsomorphicLayoutEffect(() => { + const id = localStorage.getItem('userId'); + if (id) { + setStoredUserId(id); + return; + } + }, []); + + return { storedUserId }; +} diff --git a/src/pages/user/[id]/[filmId]/item/index.tsx b/src/pages/user/[id]/[filmId]/item/index.tsx index 473bb47..924dc73 100644 --- a/src/pages/user/[id]/[filmId]/item/index.tsx +++ b/src/pages/user/[id]/[filmId]/item/index.tsx @@ -6,13 +6,18 @@ import { QueryClient, dehydrate } from '@tanstack/react-query'; import { filmsApis, filmsKeys, useGetFilm } from '@/query-hooks/useFilms'; import { Icon } from '@/components/shared'; import { ItemsSlide } from '@/components/user/item/ItemsSlide'; -import { useLogin } from '@/hooks/useLogin'; +import { useStoredUserId } from '@/hooks/useStoredUserId'; -export default function ItemPage() { +interface ItemPageProps { + userId: string; +} + +export default function ItemPage({ userId }: ItemPageProps) { const router = useRouter(); const filmId = router.query.filmId as string; const index = Number(router.query.index) || 0; - const { login } = useLogin(); + const { storedUserId } = useStoredUserId(); + const getIsLogin = () => userId === storedUserId; const { data: { title: groupName, photo_cuts: items }, @@ -28,7 +33,7 @@ export default function ItemPage() {

{title}

- {login && ( + {getIsLogin() && ( @@ -58,6 +63,7 @@ export default function ItemPage() { export const getServerSideProps: GetServerSideProps = async ({ query }) => { const filmId: string = query.filmId as string; + const userId = query.id as string; const queryClient = new QueryClient(); await queryClient.prefetchQuery(filmsKeys.item(Number(filmId)), () => @@ -66,6 +72,7 @@ export const getServerSideProps: GetServerSideProps = async ({ query }) => { return { props: { + userId, dehydratedState: dehydrate(queryClient), }, }; diff --git a/src/pages/user/[id]/guest-book/index.tsx b/src/pages/user/[id]/guest-book/index.tsx index 174ad37..2b4cfb4 100644 --- a/src/pages/user/[id]/guest-book/index.tsx +++ b/src/pages/user/[id]/guest-book/index.tsx @@ -10,8 +10,8 @@ import { usersKeys, } from '@/query-hooks/useUsers'; import { Icon, Input, Modal, Textarea } from '@/components/shared'; -import { useLogin } from '@/hooks/useLogin'; import { useModal } from '@/hooks/useModal'; +import { useStoredUserId } from '@/hooks/useStoredUserId'; import { cn } from '@/utils/cn'; interface GuestBookProps { @@ -23,7 +23,8 @@ export default function GuestBookPage({ userId }: GuestBookProps) { const { isOpen, open: openModal, close: closeModal } = useModal(); const [writerName, setWriterName] = useState(''); const [content, setContent] = useState(''); - const { login } = useLogin(); + const { storedUserId } = useStoredUserId(); + const getIsLogin = () => userId === storedUserId; const { data, isLoading } = useGetUserVisitLogs(userId); const createMutation = useCreateUserVisitLog(); @@ -91,7 +92,7 @@ export default function GuestBookPage({ userId }: GuestBookProps) { {created_at}
- {login && ( + {getIsLogin() && ( ) { - const { login: isLogin } = useLogin(); + const router = useRouter(); + const { storedUserId } = useStoredUserId(); const { isLoading, data: filmList, isError } = useGetFilms(userId); const { data: userData } = useGetUser(userId); const { data: visitLogData } = useGetUserVisitLogs(userId); const { status, dispatch } = useSafeContext(ModalContext); + const getIsLogin = () => userId === storedUserId; const { isDrawerOpen, @@ -80,14 +83,19 @@ export default function User({ src={userData.profile_img ?? '/images/avatar-placeholder.png'} nickname={userData.name} viewCount={userData.visitors} - isLogin={isLogin} + isLogin={userId === storedUserId} displayMeta className='tw-mx-5' onEditProfile={handleEditProfile} /> )} {userData && ( - + router.push(`/user/${userId}/guest-book`)} + isLogin={userId === storedUserId} + ownerName={userData.name} + visitLogs={visitLogData} + /> )}
{filmList?.map(({ film_id, photo_cuts, title }) => ( @@ -97,17 +105,17 @@ export default function User({ filmId={film_id} photos={photo_cuts} title={title} - isLogin={isLogin} + isLogin={getIsLogin()} onEditTitle={() => handleEditTitle(title, film_id)} /> ))} {!filmList && (
- +
)}
- {isLogin && ( + {getIsLogin() && (