@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
43 lines (42 loc) • 2.62 kB
TypeScript
import type { EventReturnWithStateObjectAndSuccess, EventStateObjectWithSuccess, Identifier, FieldStatus } from '../types';
import type { FormError } from '../utils';
import type { SubmitStateWithValidating, PersistErrorStateMethod, ErrorInitiator } from './useFieldError';
export type AsyncProcesses = 'onChangeValidator' | 'onBlurValidator' | 'onChangeLocal' | 'onChangeContext';
export type UseFieldAsyncParams<Value> = {
onChange: (...args: unknown[]) => unknown;
onChangeContext: (...args: unknown[]) => unknown;
valueRef: React.RefObject<Value>;
forceUpdate: () => void;
persistErrorState: (method: PersistErrorStateMethod, initiator: ErrorInitiator, error?: Error | FormError | Array<Error | FormError>) => void;
revealError: () => void;
setFieldState: (state: SubmitStateWithValidating) => void;
hasError: () => boolean;
warningRef: React.RefObject<FieldStatus['warning']>;
infoRef: React.RefObject<FieldStatus['info']>;
fieldStateRef: React.RefObject<SubmitStateWithValidating>;
removeErrorRef: React.RefObject<() => void>;
hasPath: boolean;
identifier: Identifier;
executeOnChangeRegardlessOfError: boolean;
handlePathChangeDataContext: (identifier: Identifier) => EventReturnWithStateObjectAndSuccess | Promise<EventReturnWithStateObjectAndSuccess>;
};
export default function useFieldAsync<Value>({ onChange, onChangeContext, valueRef, forceUpdate, persistErrorState, revealError, setFieldState, hasError, warningRef, infoRef, fieldStateRef, removeErrorRef, hasPath, identifier, executeOnChangeRegardlessOfError, handlePathChangeDataContext, }: UseFieldAsyncParams<Value>): {
asyncBehaviorIsEnabled: boolean;
defineAsyncProcess: (name: AsyncProcesses) => void;
addToPool: (name: "onChangeValidator" | "onBlurValidator" | "onChangeLocal" | "onChangeContext", fn: any, runAsync: any) => void;
runPool: (cb?: any) => Promise<void>;
yieldAsyncProcess: ({ name, waitFor, }: {
name: "onChangeLocal" | "onChangeContext" | "onSubmitContext";
waitFor: Array<{
processName?: AsyncProcesses;
withStates: Array<SubmitStateWithValidating>;
hasValue?: Value;
}>;
}) => Promise<void>;
handleChangeEventResult: () => Promise<void>;
setEventResult: (result: EventReturnWithStateObjectAndSuccess) => Promise<void>;
callOnChangeContext: () => Promise<void>;
asyncProcessRef: import("react").RefObject<AsyncProcesses>;
validatedValueRef: import("react").RefObject<Value>;
changeEventResultRef: import("react").RefObject<EventStateObjectWithSuccess>;
};