import { create } from "zustand"; import { AssertionWithIdAndState } from "~~/components/oracle/types"; /** * Zustand Store * * You can add global state to the app using this useGlobalState, to get & set * values from anywhere in the app. * * Think about it as a global useState. */ type ChallengeState = { // Block timestamp tracking timestamp: bigint | null; setTimestamp: (timestamp: bigint | null) => void; // Optimistic Oracle refetchAssertionStates: () => void; setRefetchAssertionStates: (refetchFn: () => void) => void; // Assertion Modal openAssertion: AssertionWithIdAndState | null; openAssertionModal: (assertion: AssertionWithIdAndState) => void; closeAssertionModal: () => void; }; export const useChallengeState = create(set => ({ // Block timestamp tracking timestamp: null, setTimestamp: (timestamp: bigint | null): void => set(() => ({ timestamp })), // Optimistic Oracle refetchAssertionStates: () => {}, setRefetchAssertionStates: (refetchFn: () => void) => set(() => ({ refetchAssertionStates: refetchFn })), // Assertion Modal openAssertion: null, openAssertionModal: (assertion: AssertionWithIdAndState) => set(() => ({ openAssertion: assertion, })), closeAssertionModal: () => set(() => ({ openAssertion: null })), }));