diff --git a/src/pages/ExportPage.tsx b/src/pages/ExportPage.tsx index aa8e134..c1b504a 100644 --- a/src/pages/ExportPage.tsx +++ b/src/pages/ExportPage.tsx @@ -39,6 +39,7 @@ import { } from '../services/exportBridge' import { useContactTypeCountsStore } from '../stores/contactTypeCountsStore' import { SnsPostItem } from '../components/Sns/SnsPostItem' +import { ContactSnsTimelineDialog } from '../components/Sns/ContactSnsTimelineDialog' import type { SnsPost } from '../types/sns' import './ExportPage.scss' @@ -2241,6 +2242,21 @@ function ExportPage() { setSessionSnsTimelineStatsLoading(false) }, []) + const sessionSnsTimelineInitialTotalPosts = useMemo(() => { + const username = String(sessionSnsTimelineTarget?.username || '').trim() + if (!username) return null + if (!Object.prototype.hasOwnProperty.call(snsUserPostCounts, username)) return null + const count = Number(snsUserPostCounts[username] || 0) + return Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0 + }, [sessionSnsTimelineTarget, snsUserPostCounts]) + + const sessionSnsTimelineInitialTotalPostsLoading = useMemo(() => { + const username = String(sessionSnsTimelineTarget?.username || '').trim() + if (!username) return false + if (Object.prototype.hasOwnProperty.call(snsUserPostCounts, username)) return false + return snsUserPostCountsStatus === 'loading' || snsUserPostCountsStatus === 'idle' + }, [sessionSnsTimelineTarget, snsUserPostCounts, snsUserPostCountsStatus]) + const openSessionSnsTimelineByTarget = useCallback((target: SessionSnsTimelineTarget) => { sessionSnsRankRequestTokenRef.current += 1 sessionSnsRankLoadingRef.current = false @@ -2255,22 +2271,21 @@ function ExportPage() { setSessionSnsTimelineHasMore(false) setSessionSnsTimelineLoadingMore(false) setSessionSnsTimelineLoading(false) - - if (snsUserPostCountsStatus === 'ready') { + const hasKnownCount = Object.prototype.hasOwnProperty.call(snsUserPostCounts, target.username) + if (hasKnownCount) { const count = Number(snsUserPostCounts[target.username] || 0) - setSessionSnsTimelineTotalPosts(Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0) + const normalizedCount = Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0 + setSessionSnsTimelineTotalPosts(normalizedCount) setSessionSnsTimelineStatsLoading(false) - setSessionSnsRankTotalPosts(Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0) + setSessionSnsRankTotalPosts(normalizedCount) } else { setSessionSnsTimelineTotalPosts(null) - setSessionSnsTimelineStatsLoading(true) + setSessionSnsTimelineStatsLoading(snsUserPostCountsStatus === 'loading' || snsUserPostCountsStatus === 'idle') setSessionSnsRankTotalPosts(null) } - void loadSessionSnsTimelinePosts(target, { reset: true }) void loadSnsUserPostCounts() }, [ - loadSessionSnsTimelinePosts, loadSnsUserPostCounts, snsUserPostCounts, snsUserPostCountsStatus @@ -4973,11 +4988,7 @@ function ExportPage() { useEffect(() => { if (!sessionSnsTimelineTarget) return - if (snsUserPostCountsStatus === 'loading' || snsUserPostCountsStatus === 'idle') { - setSessionSnsTimelineStatsLoading(true) - return - } - if (snsUserPostCountsStatus === 'ready') { + if (Object.prototype.hasOwnProperty.call(snsUserPostCounts, sessionSnsTimelineTarget.username)) { const total = Number(snsUserPostCounts[sessionSnsTimelineTarget.username] || 0) const normalizedTotal = Number.isFinite(total) ? Math.max(0, Math.floor(total)) : 0 setSessionSnsTimelineTotalPosts(normalizedTotal) @@ -4985,6 +4996,10 @@ function ExportPage() { setSessionSnsTimelineStatsLoading(false) return } + if (snsUserPostCountsStatus === 'loading' || snsUserPostCountsStatus === 'idle') { + setSessionSnsTimelineStatsLoading(true) + return + } setSessionSnsTimelineTotalPosts(null) setSessionSnsRankTotalPosts(null) setSessionSnsTimelineStatsLoading(false) @@ -6213,136 +6228,12 @@ function ExportPage() { )} - {sessionSnsTimelineTarget && ( -