From d3cc8805fbf22bbdd40241acd1c7731d63d724fb Mon Sep 17 00:00:00 2001 From: miteruzo Date: Sat, 7 Feb 2026 01:34:56 +0900 Subject: [PATCH] #140 --- frontend/src/components/TopNav.tsx | 39 ++++++++++++++---------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/frontend/src/components/TopNav.tsx b/frontend/src/components/TopNav.tsx index f8bf4d4..81816f2 100644 --- a/frontend/src/components/TopNav.tsx +++ b/frontend/src/components/TopNav.tsx @@ -1,3 +1,4 @@ +import { useQuery } from '@tanstack/react-query' import { AnimatePresence, motion } from 'framer-motion' import { Fragment, useEffect, useLayoutEffect, useRef, useState } from 'react' import { useLocation } from 'react-router-dom' @@ -6,6 +7,7 @@ import Separator from '@/components/MenuSeparator' import PrefetchLink from '@/components/PrefetchLink' import TopNavUser from '@/components/TopNavUser' import { WikiIdBus } from '@/lib/eventBus/WikiIdBus' +import { tagsKeys, wikiKeys } from '@/lib/queryKeys' import { fetchTagByName } from '@/lib/tags' import { cn } from '@/lib/utils' import { fetchWikiPage } from '@/lib/wiki' @@ -44,9 +46,24 @@ export default (({ user }: Props) => { visible: false }) const [menuOpen, setMenuOpen] = useState (false) const [openItemIdx, setOpenItemIdx] = useState (-1) - const [postCount, setPostCount] = useState (null) const [wikiId, setWikiId] = useState (WikiIdBus.get ()) + const wikiIdStr = String (wikiId ?? '') + + const { data: wikiPage } = useQuery ({ + enabled: Boolean (wikiIdStr), + queryKey: wikiKeys.show (wikiIdStr, { }), + queryFn: () => fetchWikiPage (wikiIdStr, { }) }) + + const effectiveTitle = wikiPage?.title ?? '' + + const { data: tag } = useQuery ({ + enabled: Boolean (effectiveTitle), + queryKey: tagsKeys.show (effectiveTitle), + queryFn: () => fetchTagByName (effectiveTitle) }) + + const postCount = tag?.postCount ?? 0 + const wikiPageFlg = Boolean (/^\/wiki\/(?!new|changes)[^\/]+/.test (location.pathname) && wikiId) const wikiTitle = location.pathname.split ('/')[2] const menu: Menu = [ @@ -113,26 +130,6 @@ export default (({ user }: Props) => { location.pathname.startsWith (item.base || item.to)))) }, [location]) - useEffect (() => { - if (!(wikiId)) - return - - const fetchPostCount = async () => { - try - { - const wikiPage = await fetchWikiPage (String (wikiId ?? ''), { }) - const tag = await fetchTagByName (wikiPage.title) - - setPostCount (tag?.postCount ?? 0) - } - catch - { - setPostCount (0) - } - } - fetchPostCount () - }, [wikiId]) - return ( <>