A daily game
1import { useAtom, useAtomValue } from "jotai";
2import { useMemo } from "react";
3import {
4 boardAtom,
5 boardMatrixAtom,
6 gameResultAtom,
7 heightAtom,
8 preferencesAtom,
9 selectBoardSubset,
10 selectGuessAt,
11 selectSessionSubset,
12 selectVariantAt,
13 sessionMatrixAtom,
14 variantsAtom,
15 widthAtom,
16} from "./state";
17
18export function useGuessAt(index: number) {
19 const atomCell = useMemo(() => selectGuessAt(index), [index]);
20 const [cell] = useAtom(atomCell);
21 return cell;
22}
23
24export function useVariants() {
25 return useAtomValue(variantsAtom);
26}
27
28export function useVariantAt(index: number) {
29 const variantAtom = useMemo(() => selectVariantAt(index), [index]);
30 return useAtomValue(variantAtom);
31}
32
33export function useBoard() {
34 return useAtomValue(boardAtom);
35}
36
37export function useBoardDimensions() {
38 const width = useAtomValue(widthAtom);
39 const height = useAtomValue(heightAtom);
40 return [width, height] as const;
41}
42
43export function useBoardMatrix() {
44 return useAtomValue(boardMatrixAtom);
45}
46
47export function useSessionMatrix() {
48 return useAtomValue(sessionMatrixAtom);
49}
50
51export function useGameResult() {
52 return useAtomValue(gameResultAtom);
53}
54
55export function useBoardSubset(dir: "row" | "col", index: number) {
56 const subset = useMemo(() => selectBoardSubset(dir, index), [dir, index]);
57 return useAtomValue(subset);
58}
59
60export function useSessionSubset(dir: "row" | "col", index: number) {
61 const subset = useMemo(() => selectSessionSubset(dir, index), [dir, index]);
62 return useAtomValue(subset);
63}
64
65export function usePreferences() {
66 return useAtom(preferencesAtom);
67}