diff --git a/js/src/features/network-root.tsx b/js/src/features/network-root.tsx index baec43f..64c7087 100644 --- a/js/src/features/network-root.tsx +++ b/js/src/features/network-root.tsx @@ -1,5 +1,5 @@ import { useCallback, useState } from "react"; -import { useNavigate, useParams } from "react-router-dom"; +import { useNavigate, useParams, useSearchParams } from "react-router-dom"; import { CircleDot, CircleCheckBig } from "lucide-react"; import { particlePath } from "@/lib/particle-path"; import { ParticleListView } from "@/features/particles/particle-list-view"; @@ -19,7 +19,20 @@ export default function NetworkRoot() { const path = particlePath(networkId!, []); const [composeActive, setComposeActive] = useState(false); - const [statusTab, setStatusTab] = useState<"open" | "closed">("open"); + const [searchParams, setSearchParams] = useSearchParams(); + const statusTab: "open" | "closed" = + searchParams.get("status") === "closed" ? "closed" : "open"; + const setStatusTab = (next: "open" | "closed") => { + setSearchParams( + (prev) => { + const params = new URLSearchParams(prev); + if (next === "open") params.delete("status"); + else params.set("status", next); + return params; + }, + { replace: true }, + ); + }; const { streams, isLoading, canLoadMore, loadMore } = useStreamParticles(path, { status: statusTab, @@ -40,7 +53,7 @@ export default function NetworkRoot() {
setStatusTab(v as "open" | "closed")} + onValueChange={(v) => setStatusTab(v === "closed" ? "closed" : "open")} > Open diff --git a/js/src/features/particles/stream-view.tsx b/js/src/features/particles/stream-view.tsx index ab4e8fa..d38e54e 100644 --- a/js/src/features/particles/stream-view.tsx +++ b/js/src/features/particles/stream-view.tsx @@ -287,7 +287,7 @@ function StreamViewInner({ path, streamParticle }: StreamViewProps) { break; case "Escape": e.preventDefault(); - navigate(`/${networkId}`); + navigate(-1); break; case "h": { e.preventDefault();