diff --git a/packages/vest/src/core/state/stateHooks.ts b/packages/vest/src/core/state/stateHooks.ts index 48ffb8b2f..927373252 100644 --- a/packages/vest/src/core/state/stateHooks.ts +++ b/packages/vest/src/core/state/stateHooks.ts @@ -7,6 +7,13 @@ import type { TStateRef } from 'createStateRef'; import ctx from 'ctx'; import type { TDraftResult } from 'produceDraft'; +// STATE REF +export function useStateRef(): Exclude { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return ctx.useX().stateRef!; // I should revisit this +} + +// STATE KEYS export function useSuiteId(): TStateHandlerReturn { return useStateRef().suiteId(); } @@ -22,30 +29,6 @@ export function useOptionalFields(): TStateHandlerReturn< return useStateRef().optionalFields(); } -const omittedFieldsCache = createCache(); -export function useOmittedFields(): Record { - const [testObjects] = useTestObjects(); - - return omittedFieldsCache([testObjects], () => - testObjects.reduce((omittedFields, testObject) => { - if (omittedFields[testObject.fieldName]) { - return omittedFields; - } - - if (testObject.isOmitted()) { - omittedFields[testObject.fieldName] = true; - } - - return omittedFields; - }, {} as Record) - ); -} - -export function useStateRef(): Exclude { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return ctx.useX().stateRef!; // I should revisit this -} - export function useTestObjects(): TStateHandlerReturn { return useStateRef().testObjects(); } @@ -54,14 +37,22 @@ export function usePrevTestObjects(): TStateHandlerReturn { return useStateRef().prevTestObjects(); } -export function useTestAtCursor(initialValue: VestTest): VestTest { - const [cursorAt] = useCursorAt(); - const [prevTestObjects] = usePrevTestObjects(); +export function useCursorAt(): TStateHandlerReturn { + return useStateRef().testObjectsCursor(); +} - const nextTest = defaultTo(prevTestObjects[cursorAt], initialValue); - useSetTestAtCursor(nextTest); +export function useSetNextCursorAt(): void { + const [, setCursorAt] = useCursorAt(); - return nextTest; + setCursorAt((cursorAt: number) => cursorAt + 1); +} + +// STATE ACTIONS + +export function useRefreshTestObjects(): void { + const [, setTestObjects] = useTestObjects(); + + setTestObjects(testObjects => testObjects.slice(0)); } export function useSetTestAtCursor(testObject: VestTest): void { @@ -79,20 +70,35 @@ export function useSetTestAtCursor(testObject: VestTest): void { }); } -export function useSetNextCursorAt(): void { - const [, setCursorAt] = useCursorAt(); +// DERIVED VALUES - setCursorAt((cursorAt: number) => cursorAt + 1); -} +const omittedFieldsCache = createCache(); +export function useOmittedFields(): Record { + const [testObjects] = useTestObjects(); -export function useRefreshTestObjects(): void { - const [, setTestObjects] = useTestObjects(); + return omittedFieldsCache([testObjects], () => + testObjects.reduce((omittedFields, testObject) => { + if (omittedFields[testObject.fieldName]) { + return omittedFields; + } - setTestObjects(testObjects => testObjects.slice(0)); + if (testObject.isOmitted()) { + omittedFields[testObject.fieldName] = true; + } + + return omittedFields; + }, {} as Record) + ); } -export function useCursorAt(): TStateHandlerReturn { - return useStateRef().testObjectsCursor(); +export function useTestAtCursor(initialValue: VestTest): VestTest { + const [cursorAt] = useCursorAt(); + const [prevTestObjects] = usePrevTestObjects(); + + const nextTest = defaultTo(prevTestObjects[cursorAt], initialValue); + useSetTestAtCursor(nextTest); + + return nextTest; } const incompleteCache = createCache(); diff --git a/packages/vest/src/hooks/optionalTests.ts b/packages/vest/src/hooks/optionalTests.ts index 8e1f0188f..5ff97761e 100644 --- a/packages/vest/src/hooks/optionalTests.ts +++ b/packages/vest/src/hooks/optionalTests.ts @@ -26,4 +26,4 @@ export default function optional(optionals: TOptionalsInput): void { type TOptionalsInput = string | string[] | TOptionalsObject; -export type TOptionalsObject = Record boolean>; +type TOptionalsObject = Record boolean>;