diff --git a/src/app/(pages)/albaList/layout.tsx b/src/app/(pages)/albaList/layout.tsx index d518e62e..9c07cced 100644 --- a/src/app/(pages)/albaList/layout.tsx +++ b/src/app/(pages)/albaList/layout.tsx @@ -1,5 +1,5 @@ import LoadingSpinner from "@/app/components/loading-spinner/LoadingSpinner"; -import React, { Suspense } from "react"; +import { Suspense } from "react"; export default function AlbaListLayout({ children }: { children: React.ReactNode }) { return ( diff --git a/src/app/(pages)/albaTalk/layout.tsx b/src/app/(pages)/albaTalk/layout.tsx index 0762119b..fca6c8a0 100644 --- a/src/app/(pages)/albaTalk/layout.tsx +++ b/src/app/(pages)/albaTalk/layout.tsx @@ -1,4 +1,5 @@ -import React, { Suspense } from "react"; +import { Suspense } from "react"; +import LoadingSpinner from "@/app/components/loading-spinner/LoadingSpinner"; export default function AlbaTalkLayout({ children }: { children: React.ReactNode }) { return ( @@ -6,7 +7,7 @@ export default function AlbaTalkLayout({ children }: { children: React.ReactNode -
로딩 중...
+ } > diff --git a/src/app/components/card/board/BoardComment.tsx b/src/app/components/card/board/BoardComment.tsx index 2980062e..f43018d5 100644 --- a/src/app/components/card/board/BoardComment.tsx +++ b/src/app/components/card/board/BoardComment.tsx @@ -1,7 +1,7 @@ "use client"; -import React, { useEffect, useState } from "react"; import Image from "next/image"; +import useWidth from "@/hooks/useWidth"; export interface BoardCommentProps { title: string; @@ -12,58 +12,39 @@ export interface BoardCommentProps { onKebabClick?: () => void; // 케밥 버튼 클릭 핸들러 } -const BoardComment: React.FC = ({ - title, - content, - comments, - date, - variant = "default", - onKebabClick, -}) => { - const [isLargeScreen, setIsLargeScreen] = useState(false); - - useEffect(() => { - const handleResize = () => { - setIsLargeScreen(window.innerWidth >= 600); - }; - - handleResize(); // 초기 상태 설정 - window.addEventListener("resize", handleResize); - - return () => window.removeEventListener("resize", handleResize); // 컴포넌트 언마운트 시 정리 - }, []); - +const BoardComment = ({ title, content, comments, date, variant = "default", onKebabClick }: BoardCommentProps) => { + const { isDesktop } = useWidth(); // 아이콘 경로 설정 const iconSrc = variant === "primary" - ? `/images/modal/${isLargeScreen ? "closed-orange-md.svg" : "closed-orange-sm.svg"}` - : `/images/modal/${isLargeScreen ? "closed-gray-md.svg" : "closed-gray-sm.svg"}`; + ? `/images/modal/${isDesktop ? "closed-orange-md.svg" : "closed-orange-sm.svg"}` + : `/images/modal/${isDesktop ? "closed-gray-md.svg" : "closed-gray-sm.svg"}`; // 케밥 아이콘 경로 설정 - const kebabSrc = `/icons/menu/${isLargeScreen ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; + const kebabSrc = `/icons/menu/${isDesktop ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; return (
{/* Header + Kebab */} -
+
{/* Left Content: Icon + Title */}
{/* Icon */} Document Icon {/* Title */} -

{title}

+

{title}

{/* Right Content: Kebab */} @@ -72,19 +53,14 @@ const BoardComment: React.FC = ({ className="hover:text-grayscale-700 flex items-center justify-center text-grayscale-500" aria-label="Options" > - Kebab Menu Icon + Kebab Menu Icon {/* 크기 조정 */}
{/* Content */}

= ({

{/* Divider Line */} -
-
+
+
{/* Comments + Date */} -
+
- {comments} + {comments}
- {date} + {date}
diff --git a/src/app/components/card/board/CardBoard.tsx b/src/app/components/card/board/CardBoard.tsx index 54fc7b2d..dec8789b 100644 --- a/src/app/components/card/board/CardBoard.tsx +++ b/src/app/components/card/board/CardBoard.tsx @@ -1,8 +1,9 @@ "use client"; -import React, { useEffect, useState } from "react"; +import { useState } from "react"; import Image from "next/image"; import { formatLocalDate } from "@/utils/workDayFormatter"; +import useWidth from "@/hooks/useWidth"; export interface CardBoardProps { title: string; @@ -15,7 +16,7 @@ export interface CardBoardProps { onKebabClick?: () => void; // 케밥 버튼 클릭 핸들러 } -const CardBoard: React.FC = ({ +const CardBoard = ({ title, content, nickname, @@ -24,22 +25,11 @@ const CardBoard: React.FC = ({ likeCount, variant = "default", onKebabClick, -}) => { - const [isLargeScreen, setIsLargeScreen] = useState(false); +}: CardBoardProps) => { + const { isDesktop } = useWidth(); const [isLiked, setIsLiked] = useState(false); const [likeDisplayCount, setLikeDisplayCount] = useState(likeCount); - useEffect(() => { - const handleResize = () => { - setIsLargeScreen(window.innerWidth >= 600); - }; - - handleResize(); // 초기 상태 설정 - window.addEventListener("resize", handleResize); - - return () => window.removeEventListener("resize", handleResize); // 컴포넌트 언마운트 시 정리 - }, []); - const handleLikeClick = () => { if (isLiked) { setLikeDisplayCount((prev) => prev - 1); // 좋아요 취소 시 감소 @@ -50,7 +40,7 @@ const CardBoard: React.FC = ({ }; // 케밥 아이콘 경로 설정 - const kebabSrc = `/icons/menu/${isLargeScreen ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; + const kebabSrc = `/icons/menu/${isDesktop ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; return (
= ({
{/* Header */}
-

{title}

+

{title}

{/* Kebab Icon */}
@@ -90,7 +76,7 @@ const CardBoard: React.FC = ({
{/* 유저 아이콘 */} User Icon = ({ {nickname} | - + {formatLocalDate(updatedAt)}
@@ -112,7 +98,7 @@ const CardBoard: React.FC = ({ {/* 댓글 아이콘 */}
Comment Icon = ({ void; // 케밥 버튼 클릭 핸들러 } -const Comment: React.FC = ({ nickname, updatedAt, content, onKebabClick }) => { - const [isLargeScreen, setIsLargeScreen] = useState(false); - - useEffect(() => { - const handleResize = () => setIsLargeScreen(window.innerWidth >= 600); - handleResize(); - window.addEventListener("resize", handleResize); - return () => window.removeEventListener("resize", handleResize); - }, []); +const Comment = ({ nickname, updatedAt, content, onKebabClick }: CommentProps) => { + const { isDesktop } = useWidth(); // 케밥 아이콘 경로 설정 - const kebabSrc = `/icons/menu/${isLargeScreen ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; - const kebabSize = isLargeScreen ? 28 : 24; + const kebabSrc = `/icons/menu/${isDesktop ? "kebab-menu-md.svg" : "kebab-menu-sm.svg"}`; + const kebabSize = isDesktop ? 28 : 24; return ( -
+
{/* Header */}
@@ -39,11 +32,11 @@ const Comment: React.FC = ({ nickname, updatedAt, content, onKebab sizes="(max-width: 600px) 24px, (max-width: 1480px) 28px, 30px" />
- + {nickname} | - + {formatLocalDate(updatedAt)}
@@ -51,6 +44,7 @@ const Comment: React.FC = ({ nickname, updatedAt, content, onKebab {/* Right Content: Kebab */}
{/* Comment */} -
+

{content}

diff --git a/src/app/components/layout/Header.tsx b/src/app/components/layout/Header.tsx index 099c077a..11d09959 100644 --- a/src/app/components/layout/Header.tsx +++ b/src/app/components/layout/Header.tsx @@ -42,8 +42,14 @@ export default function Header() {