1import { useAtomSet, useAtomValue } from "@effect/atom-react";
2import { AsyncResult } from "effect/reactivity";
3
4import { mobilePreferencesAtom, updateMobilePreferencesAtom } from "../../state/preferences";
5
6export function useThreadListV2ShelfPreferences() {
7 const preferencesResult = useAtomValue(mobilePreferencesAtom);
8 const savePreferences = useAtomSet(updateMobilePreferencesAtom);
9 const loaded = AsyncResult.isSuccess(preferencesResult);
10 const snoozedShelfExpanded =
11 loaded && preferencesResult.value.threadListSnoozedShelfExpanded === true;
12 const settledShelfExpanded =
13 loaded && preferencesResult.value.threadListSettledShelfExpanded === true;
14 const workingShelfEnabled = loaded && preferencesResult.value.workingShelfEnabled !== false;
15 const workingShelfExpanded =
16 loaded && preferencesResult.value.threadListWorkingShelfExpanded === true;
17
18 // Transforms read optimistic state so same-frame presses toggle twice.
19 const toggleSnoozedShelf = () => {
20 if (!loaded) return;
21 savePreferences({
22 transform: (current) => ({
23 threadListSnoozedShelfExpanded: current.threadListSnoozedShelfExpanded !== true,
24 }),
25 });
26 };
27 const toggleSettledShelf = () => {
28 if (!loaded) return;
29 savePreferences({
30 transform: (current) => ({
31 threadListSettledShelfExpanded: current.threadListSettledShelfExpanded !== true,
32 }),
33 });
34 };
35 const toggleWorkingShelf = () => {
36 if (!loaded) return;
37 savePreferences({
38 transform: (current) => ({
39 threadListWorkingShelfExpanded: current.threadListWorkingShelfExpanded !== true,
40 }),
41 });
42 };
43
44 return {
45 loaded,
46 settledShelfExpanded,
47 snoozedShelfExpanded,
48 workingShelfEnabled,
49 workingShelfExpanded,
50 toggleSettledShelf,
51 toggleSnoozedShelf,
52 toggleWorkingShelf,
53 } as const;
54}