import { useState } from "react"; import { t } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { Link, useParams } from "react-router"; import { useAuth } from "../hooks/useAuth.ts"; import { useWS } from "../hooks/useWS.ts"; import { useDumpListSync } from "../hooks/useDumpListSync.ts"; import { usePositionAwareSync } from "../hooks/usePositionAwareSync.ts"; import { useUserDumpFeed } from "../hooks/useUserDumpFeed.ts"; import { DumpCard } from "../components/DumpCard.tsx"; import { DumpCreateModal } from "../components/DumpCreateModal.tsx"; import { ProfileSubpageHeader } from "../components/ProfileSubpageHeader.tsx"; import { PageShell } from "../components/PageShell.tsx"; import { PageError } from "../components/PageError.tsx"; export function UserDumps() { const { username } = useParams(); const { user: me } = useAuth(); const { voteCounts, myVotes, lastDumpEvent, castVote, removeVote } = useWS(); const { state, setItems, sentinelRef } = useUserDumpFeed( username, "dumps", `feed:user-dumps-full:${username ?? ""}`, ); const [createModalOpen, setCreateModalOpen] = useState(false); const profileUserId = state.status === "loaded" ? state.profileUser.id : null; const isOwnProfile = me?.id === profileUserId; const dumpItems = state.status === "loaded" ? state.items : []; usePositionAwareSync( dumpItems, setItems, lastDumpEvent, (d) => d.isPrivate, (d) => !d.isPrivate && d.userId === profileUserId, ); useDumpListSync(setItems, { ownerId: profileUserId ?? undefined, isOwner: isOwnProfile, skipReinsert: true, }); if (state.status === "loading") { return (

Loading…

); } if (state.status === "error") { return ( ← Back to profile } /> ); } const { profileUser, items: dumps, hasMore, loadingMore } = state; return ( 0 && ( <> {hasMore &&
} {loadingMore && (

Loading more…

)} {!hasMore && (

You've reached the end.

)} )} > setCreateModalOpen(true)} > + New dump )} /> {createModalOpen && ( setCreateModalOpen(false)} /> )} {dumps.length === 0 && (

Nothing here yet.

)} ); }