diff --git a/package.json b/package.json index 1e8d764..158db4a 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "@solidjs/router": "^0.15.4", "@takumi-rs/image-response": "^0.72.0", "@takumi-rs/wasm": "^0.72.0", + "@tanstack/solid-virtual": "^3.13.22", "codemirror": "^6.0.2", "solid-js": "^1.9.11" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6294439..8c5070b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,6 +98,9 @@ importers: '@takumi-rs/wasm': specifier: ^0.72.0 version: 0.72.0 + '@tanstack/solid-virtual': + specifier: ^3.13.22 + version: 3.13.22(solid-js@1.9.11) codemirror: specifier: ^6.0.2 version: 6.0.2 @@ -1017,6 +1020,14 @@ packages: '@takumi-rs/wasm@0.72.0': resolution: {integrity: sha512-5IoekEovpjzpoHd5LM4hRLRgRwW8RdFdF9TR2kmysB1rJF34z0ynIC/Fr0yhraxvFIP0fCzdinz14YzyTq6nuQ==} + '@tanstack/solid-virtual@3.13.22': + resolution: {integrity: sha512-HoFRbuNfMz4IckIJAQ9RY8uJfT28AjL040cmwBZW8c1dD+VJVKRL0leZo90bU7BK4Mnhq6vt8801BZjyrY8Ffg==} + peerDependencies: + solid-js: ^1.3.0 + + '@tanstack/virtual-core@3.13.22': + resolution: {integrity: sha512-isuUGKsc5TAPDoHSbWTbl1SCil54zOS2MiWz/9GCWHPUQOvNTQx8qJEWC7UWR0lShhbK0Lmkcf0SZYxvch7G3g==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2440,6 +2451,13 @@ snapshots: '@takumi-rs/wasm@0.72.0': {} + '@tanstack/solid-virtual@3.13.22(solid-js@1.9.11)': + dependencies: + '@tanstack/virtual-core': 3.13.22 + solid-js: 1.9.11 + + '@tanstack/virtual-core@3.13.22': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.0 diff --git a/src/views/pds.tsx b/src/views/pds.tsx index 6ad0a2a..5748bd6 100644 --- a/src/views/pds.tsx +++ b/src/views/pds.tsx @@ -3,6 +3,7 @@ import { Client, simpleFetchHandler } from "@atcute/client"; import { InferXRPCBodyOutput } from "@atcute/lexicons"; import * as TID from "@atcute/tid"; import { A, useLocation, useParams } from "@solidjs/router"; +import { createWindowVirtualizer } from "@tanstack/solid-virtual"; import { createResource, createSignal, For, Show } from "solid-js"; import { Button } from "../components/button"; import DidHoverCard from "../components/hover-card/did"; @@ -12,6 +13,93 @@ import { localDateFromTimestamp } from "../utils/date"; const LIMIT = 1000; +const RepoCard = (props: { + repo: ComAtprotoSyncListRepos.Repo; + expanded: boolean; + onToggle: () => void; +}) => { + const expanded = () => props.expanded; + + return ( +