Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 1 addition & 22 deletions src/entities/post/ui/card/PostCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import Image from "next/image";
import Link from "next/link";
import { useQueryClient } from "@tanstack/react-query";
import { getPostDetail } from "@/entities/post/api/getPostDetail";
import { useDebouncedCallback } from "@/shared/lib/useDebouncedCallback";
import PostStatusBadge from "../badge/PostStatusBadge";
import { PostStatus } from "../../model/types/post";

Expand Down Expand Up @@ -32,26 +29,8 @@ const PostCard = ({
thumbnail,
status,
}: PostCardProps) => {
const queryClient = useQueryClient();

const { debouncedCallback: handleMouseEnter, cancel: handleMouseLeave } =
useDebouncedCallback(() => {
const cached = queryClient.getQueryData(["postDetail", postingId]);
if (cached) return;

queryClient.prefetchQuery({
queryKey: ["postDetail", postingId],
queryFn: () => getPostDetail(postingId),
staleTime: 1000 * 60 * 3,
});
}, 200);

return (
<Link
href={`/detail/${postingId}`}
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<Link href={`/detail/${postingId}`}>
<article className="w-full rounded-lg border border-[#353542] bg-[#252530] p-2.5 md:pb-5 xl:pb-6">
<div className="flex flex-col gap-2.5 md:gap-5 xl:gap-6">
<div className="relative h-24 w-full overflow-hidden rounded-md md:h-40 xl:h-56">
Expand Down
12 changes: 6 additions & 6 deletions src/widgets/header/ui/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ const navItems = [
icon: "/icons/chats.svg",
hasDivider: false,
},
{
href: "/ai",
label: "분석하기",
icon: "/icons/analyze.svg",
hasDivider: true,
},
// {
// href: "/ai",
// label: "분석하기",
// icon: "/icons/analyze.svg",
// hasDivider: true,
// },
{
href: "/my",
label: "마이페이지",
Expand Down
19 changes: 0 additions & 19 deletions src/widgets/header/ui/HeaderDesktop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import Link from "next/link";
import SearchForm from "./SearchForm";
import { useQueryClient } from "@tanstack/react-query";
import { getMyProfile } from "@/entities/user/api/mypage";
import { useDebouncedCallback } from "@/shared/lib/useDebouncedCallback";

interface HeaderDesktopProps {
isLogined: boolean;
Expand All @@ -26,18 +23,6 @@ const HeaderDesktop = ({
navItems,
onOpenChat,
}: HeaderDesktopProps) => {
const queryClient = useQueryClient();

const handleProfilePrefetch = () => {
queryClient.prefetchQuery({
queryKey: ["userProfile"],
queryFn: getMyProfile,
});
};

const { debouncedCallback: debouncedPrefetch, cancel: cancelPrefetch } =
useDebouncedCallback(handleProfilePrefetch, 500);

return (
<div className="hidden w-full items-center justify-between md:flex">
<div className="text-white">
Expand Down Expand Up @@ -71,10 +56,6 @@ const HeaderDesktop = ({
<Link
href={href}
className="flex items-center justify-center"
onMouseEnter={
href === "/my" ? debouncedPrefetch : undefined
}
onMouseLeave={href === "/my" ? cancelPrefetch : undefined}
>
<img src={icon} alt={label} className="h-4 w-4" />
<p className="ml-1">{label}</p>
Expand Down
22 changes: 2 additions & 20 deletions src/widgets/header/ui/MobileSideMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ import Link from "next/link";
import { useModalStore } from "@/shared/model/modal.store";
import { useAuthStore } from "@/features/auth/model/auth.store";
import cn from "@/shared/lib/cn";
import { apiFetch } from "@/shared/api/fetcher";
import { useQueryClient } from "@tanstack/react-query";
import { getMyProfile } from "@/entities/user/api/mypage";
import { useDebouncedCallback } from "@/shared/lib/useDebouncedCallback";

export default function MobileSideMenu({
onClose,
Expand All @@ -27,18 +23,6 @@ export default function MobileSideMenu({
const { openModal, closeModal } = useModalStore();
const [isVisible, setIsVisible] = useState(false);

const queryClient = useQueryClient();

const handleProfilePrefetch = () => {
queryClient.prefetchQuery({
queryKey: ["userProfile"],
queryFn: getMyProfile,
});
};

const { debouncedCallback: debouncedPrefetch, cancel: cancelPrefetch } =
useDebouncedCallback(handleProfilePrefetch, 500);

useEffect(() => {
const timer = requestAnimationFrame(() => setIsVisible(true));
return () => cancelAnimationFrame(timer);
Expand Down Expand Up @@ -102,22 +86,20 @@ export default function MobileSideMenu({
</li>

<li>
<Link
{/* <Link
href="/ai"
className="block px-4 py-3 text-white hover:bg-white/10"
onClick={handleClose}
>
분석하기
</Link>
</Link> */}
</li>

<li>
<Link
href="/my"
className="block px-4 py-3 text-white hover:bg-white/10"
onClick={handleClose}
onMouseEnter={debouncedPrefetch}
onMouseLeave={cancelPrefetch}
>
마이페이지
</Link>
Expand Down
34 changes: 0 additions & 34 deletions src/widgets/main/ui/SideMenu/SideMenu.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
"use client";

import { useQueryClient } from "@tanstack/react-query";
import { getPosts } from "@/entities/post/api/getPosts";
import cn from "@/shared/lib/cn";
import { useRouter } from "next/navigation";
import { useDebouncedCallback } from "@/shared/lib/useDebouncedCallback";
import { useSearchParams } from "next/navigation";

interface SideMenuProps {
Expand All @@ -15,33 +12,6 @@ interface SideMenuProps {
const SideMenu = ({ categories, selectedCategory }: SideMenuProps) => {
const router = useRouter();
const searchParams = useSearchParams();
const queryClient = useQueryClient();

const prefetchData = async (category: string) => {
const existing = queryClient.getQueryData([
"posts",
category,
"latest",
"",
]);
if (existing) return;

queryClient.prefetchInfiniteQuery({
queryKey: ["posts", category, "latest", ""],
queryFn: ({ pageParam = 1 }) =>
getPosts({
category,
sort: "latest",
page: pageParam,
keyword: "",
}),
initialPageParam: 1,
staleTime: 1000 * 60 * 5,
});
};

const { debouncedCallback: handleHover, cancel: cancelHover } =
useDebouncedCallback(prefetchData, 200);

const handleSelect = async (category: string) => {
if (category === selectedCategory) return;
Expand All @@ -52,8 +22,6 @@ const SideMenu = ({ categories, selectedCategory }: SideMenuProps) => {
params.delete("keyword");

router.push(`/?${params.toString()}`);

cancelHover();
};

return (
Expand All @@ -74,8 +42,6 @@ const SideMenu = ({ categories, selectedCategory }: SideMenuProps) => {
<li key={category}>
<button
type="button"
onMouseEnter={() => handleHover(category)}
onMouseLeave={cancelHover}
onClick={() => handleSelect(category)}
aria-selected={selectedCategory === category}
className={cn(
Expand Down