Files
sre-06-oracles/packages/nextjs/services/store/challengeStore.ts
2026-01-23 20:20:58 +07:00

41 lines
1.3 KiB
TypeScript

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<ChallengeState>(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 })),
}));