diff --git a/packages/frontend/src/routes/Repertoire.tsx b/packages/frontend/src/routes/Repertoire.tsx new file mode 100644 index 0000000..7127d4e --- /dev/null +++ b/packages/frontend/src/routes/Repertoire.tsx @@ -0,0 +1,41 @@ +import { Piece, repertoireCache } from "@/cache"; +import { useLoadingEffect } from "@/hooks/useLoading"; +import { mapProp, Update } from "@/hooks/useStore"; +import { RepertoireId } from "common"; +import { Cause, Effect } from "effect"; +import { useCallback } from "react"; +import { useParams } from "react-router-dom"; + +export function Repertoire() { + + const id = RepertoireId(useParams().repertoireId!); + + const { isLoading, error, data, setData } = useLoadingEffect(Effect.uninterruptible(repertoireCache.get(id)), [id]); + + const setEntries = useCallback((action: Update) => { + setData!(mapProp("entries", action)); + Effect.runFork(repertoireCache.invalidate(id)); + }, [setData]); + + if (isLoading) { + return ( +
+
Ładowanie…
+
+ ); + } + + return ( +
+ {error !== null ? ( + Cause.isUnknownException(error) ? "Wystąpił nieznany błąd" : `Wystąpił błąd: ${error.value}` + ) : (<> +
+

Repertuar

+ +
+ + )} +
+ ); +}