41 lines
1.3 KiB
TypeScript
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 })),
|
|
}));
|