summaryrefslogtreecommitdiff
path: root/src/components/CollapsibleItemGroup.tsx
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2026-09-11 09:38:35 -0400
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2026-09-11 09:38:35 -0400
commita8388009b2ba141caafe7f2e35f7029d93e7811f (patch)
tree2f939dba1042a1d1d9c03e4aa3470ad6332864e2 /src/components/CollapsibleItemGroup.tsx
parent9138886fd5315eb0e8c6a4a549a9d44f93ba3cde (diff)
downloaddecky-lsfg-vk-a8388009b2ba141caafe7f2e35f7029d93e7811f.tar.gz
decky-lsfg-vk-a8388009b2ba141caafe7f2e35f7029d93e7811f.zip
handle edge cases on flatpaks and ordering
Diffstat (limited to 'src/components/CollapsibleItemGroup.tsx')
-rw-r--r--src/components/CollapsibleItemGroup.tsx20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/components/CollapsibleItemGroup.tsx b/src/components/CollapsibleItemGroup.tsx
index a66a8ba..037b34f 100644
--- a/src/components/CollapsibleItemGroup.tsx
+++ b/src/components/CollapsibleItemGroup.tsx
@@ -1,5 +1,5 @@
import { ButtonItem, Field, PanelSectionRow } from "@decky/ui";
-import { type RefObject } from "react";
+import { useEffect, useState, type RefObject } from "react";
import { RiArrowDownSFill, RiArrowUpSFill } from "react-icons/ri";
export interface CollapsibleItem {
@@ -25,6 +25,24 @@ export const collapsibleItemGroupStyles = `
}
`;
+export function usePersistentCollapsed(key: string) {
+ const [collapsed, setCollapsed] = useState(() => {
+ try {
+ return localStorage.getItem(key) !== "false";
+ } catch {
+ return true;
+ }
+ });
+
+ useEffect(() => {
+ try {
+ localStorage.setItem(key, String(collapsed));
+ } catch {}
+ }, [collapsed, key]);
+
+ return [collapsed, () => setCollapsed((value) => !value)] as const;
+}
+
interface Props {
title: string;
items: CollapsibleItem[];