From 789b172a7c3f532cc6882ea9ed1e574fd38aeb63 Mon Sep 17 00:00:00 2001 From: futurGH Date: Mon, 8 Sep 2025 18:40:05 -0400 Subject: [PATCH] collection filter background on scroll --- src/views/collection.tsx | 42 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/views/collection.tsx b/src/views/collection.tsx index ae49f25..60d1b52 100644 --- a/src/views/collection.tsx +++ b/src/views/collection.tsx @@ -3,7 +3,7 @@ import { Client, CredentialManager } from "@atcute/client"; import { $type, ActorIdentifier, InferXRPCBodyOutput } from "@atcute/lexicons"; import * as TID from "@atcute/tid"; import { A, useParams } from "@solidjs/router"; -import { createEffect, createResource, createSignal, For, Show, untrack } from "solid-js"; +import { createEffect, createResource, createSignal, For, Show, untrack, onMount, onCleanup } from "solid-js"; import { createStore } from "solid-js/store"; import { Button } from "../components/button.jsx"; import { JSONType, JSONValue } from "../components/json.jsx"; @@ -72,9 +72,11 @@ const CollectionView = () => { const [batchDelete, setBatchDelete] = createSignal(false); const [lastSelected, setLastSelected] = createSignal(); const [reverse, setReverse] = createSignal(false); + const [filterStuck, setFilterStuck] = createSignal(false); const did = params.repo; let pds: string; let rpc: Client; + let sticky!: HTMLDivElement; const fetchRecords = async () => { if (!pds) pds = await resolvePDS(did); @@ -157,11 +159,43 @@ const CollectionView = () => { true, ); + onMount(() => { + let ticking = false; + const tick = () => { + const topPx = parseFloat(getComputedStyle(sticky).top); + const { top } = sticky.getBoundingClientRect(); + setFilterStuck(top <= topPx + 0.5); + ticking = false; + }; + + const onScroll = () => { + if (!ticking) { + ticking = true; + requestAnimationFrame(tick); + } + }; + + window.addEventListener("scroll", onScroll, { passive: true }); + + tick(); + + onCleanup(() => { + window.removeEventListener("scroll", onScroll); + }); + }); + return (
-
-
+
(sticky = el)} + class="sticky top-2 z-10 flex flex-col items-center justify-center gap-2 rounded-lg p-3 transition-colors" + classList={{ + "bg-neutral-50 dark:bg-dark-300 border-[0.5px] border-neutral-300 dark:border-neutral-700 shadow-md": filterStuck(), + "bg-transparent border-transparent shadow-none": !filterStuck(), + }} + > +
{ />
1}> -
+
+
{records.filter((rec) => rec.toDelete).length} @@ -278,7 +289,7 @@ const CollectionView = () => {
- + refetch()}>Load More
-- 2.43.0 From a9b4f1aedaa1d6e39436e644544726a256423a7f Mon Sep 17 00:00:00 2001 From: futurGH Date: Mon, 8 Sep 2025 18:58:07 -0400 Subject: [PATCH] naming --- src/views/collection.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/collection.tsx b/src/views/collection.tsx index 04b7288..b0be20d 100644 --- a/src/views/collection.tsx +++ b/src/views/collection.tsx @@ -159,7 +159,7 @@ const CollectionView = () => { true, ); - const NavigationButton = (props: ButtonProps) => { + const FilterButton = (props: ButtonProps) => { return
1}>
- { setReverse(!reverse()); setRecords([]); @@ -278,7 +278,7 @@ const CollectionView = () => { class={`iconify ${reverse() ? "lucide--rotate-ccw" : "lucide--rotate-cw"} text-sm`} > Reverse - +
{records.filter((rec) => rec.toDelete).length} @@ -289,7 +289,7 @@ const CollectionView = () => {
- refetch()}>Load More + refetch()}>Load More
-- 2.43.0