import { useEffect, useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { AnimatePresence, motion } from 'framer-motion'; import { format, formatDistanceToNow } from 'date-fns'; import { Loader2, Inbox, Smile, Meh, Frown } from 'lucide-react'; import { useApi } from '@/hooks/useApi'; import { MyPostCard } from '@/components/MyPostCard'; import type { PostSummary } from '@/types'; export default function MyDissolvesPage() { const queryClient = useQueryClient(); const { useGetMyPosts, useGetSummaries, useClearSummaries } = useApi(); const { data: myPostsData, isLoading: isLoadingPosts } = useGetMyPosts(); const { data: summariesData, isLoading: isLoadingSummaries } = useGetSummaries(); const clearSummariesMutation = useClearSummaries(queryClient); const [shownSummaries, setShownSummaries] = useState>(new Set()); useEffect(() => { const unseenSummaries = summariesData?.summaries.filter(s => !shownSummaries.has(s.id)) ?? []; if (unseenSummaries.length > 0) { const idsToShow = new Set(); unseenSummaries.forEach(summary => { toast(`Your feeling of '${summary.emotion_tag}' was held by ${summary.hold_count} people before it dissolved.`); idsToShow.add(summary.id); }); setShownSummaries(prev => new Set([...prev, ...idsToShow])); // Here we can decide if we want to clear from DB after showing. // For this implementation, we will not automatically clear, but allow user to see in a list. } }, [summariesData, shownSummaries]); const activePosts = myPostsData?.posts ?? []; const pastSummaries = summariesData?.summaries ?? []; const getHoldIcon = (count: number) => { if (count > 50) return ; if (count > 10) return ; return ; } return (

Active Dissolves

{isLoadingPosts ? (
) : activePosts.length === 0 ? (

You have no active feelings dissolving right now.

) : (
{activePosts.map(post => )}
)}

Past Dissolves

{isLoadingSummaries ? (
) : pastSummaries.length === 0 ? (

Summaries of your past feelings will appear here once they dissolve.

) : (
{pastSummaries.map((summary: PostSummary) => (
{getHoldIcon(summary.hold_count)}

Your feeling of {summary.emotion_tag} was held by {summary.hold_count} people.

Dissolved {formatDistanceToNow(new Date(summary.dissolved_at), { addSuffix: true })}

))}
)}
); }