A daily game
at main 67 lines 1.6 kB view raw
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}