Minor refactors

This commit is contained in:
2025-03-28 22:06:09 +01:00
parent 0c903e1087
commit 709165bab0
10 changed files with 20 additions and 54 deletions

View File

@@ -1,5 +1,5 @@
import { API_URL_PREFIX } from "@/client";
import { mapProp, Update, Updater, useStore } from "@/hooks/useStore";
import { mapProp, Update, Updater } from "@/hooks/useStore";
import { Treaty } from "@elysiajs/eden";
import { Effect, Fiber, pipe } from "effect";
import React, { useCallback, useEffect, useState } from "react";
@@ -45,8 +45,6 @@ export function useLoading<R extends Record<number, unknown>>(fn: () => Promise<
const navigate = useNavigate();
const setUser = useStore(state => state.setUser);
const [result, setResult] = useState<LoadingResult<R>>(IS_LOADING);
useEffect(() => {
@@ -82,7 +80,7 @@ export function useLoading<R extends Record<number, unknown>>(fn: () => Promise<
return () => { cancelled = true; };
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [navigate, setUser, ...deps]);
}, [navigate, ...deps]);
return result;
}

View File

@@ -1,5 +1,5 @@
import { UserId } from "common";
import * as Function from "common/Function";
import { identity } from "effect";
import { useLayoutEffect, useState } from "react";
export type Update<T> = T | ((prev: T) => T);
@@ -19,14 +19,16 @@ export namespace Store {
export interface Store {
readonly user: Store.User | null;
readonly setUser: Updater<Store.User | null>;
}
let store: Store = Object.freeze<Store>({
user: null,
setUser: (action) => set(mapProp("user", action)),
});
export function setUser(action: Update<Store.User | null>) {
set(mapProp("user", action));
}
// --- STORE IMPLEMENTATION ----------------------------------------------------
class Listener<T> {
@@ -64,7 +66,7 @@ function set(action: Partial<Store> | ((store: Store) => Partial<Store>), replac
}
}
export function useStore<T = Store>(selector: Selector<T> = Function.identity as Selector<T>): T {
export function useStore<T = Store>(selector: Selector<T> = identity as Selector<T>): T {
const [state, setState] = useState(() => selector(store));

View File

@@ -1,7 +1,7 @@
import { API_URL_PREFIX, client } from "@/client";
import { Button, buttonVariants } from "@/components/ui/button";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
import { useStore } from "@/hooks/useStore";
import { setUser, useStore } from "@/hooks/useStore";
import { Settings, User } from "lucide-react";
import { useEffect } from "react";
import { Link, Outlet } from "react-router-dom";
@@ -9,7 +9,6 @@ import { Link, Outlet } from "react-router-dom";
export function Root() {
const user = useStore(state => state.user);
const setUser = useStore(state => state.setUser);
const init = async () => {
if (user !== null) return;