react-form-action
Version:
State management helpers for the react form actions.
39 lines (37 loc) • 1.73 kB
text/typescript
type InitialState<T> = {
type: "initial";
data: T;
error: null;
validationError: null;
};
type InvalidState<T> = {
type: "invalid";
data: null;
error: null;
validationError: T;
};
type FailureState<T> = {
type: "failure";
data: null;
error: T;
validationError: null;
};
type SuccessState<T> = {
type: "success";
data: T;
error: null;
validationError: null;
};
type ActionState<Data, Error, ValidationError = Record<string, never>> = InitialState<Data> | InvalidState<ValidationError> | FailureState<Error> | SuccessState<Data>;
type FormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData, Arguments extends unknown[] = []> = (...args: [
...Arguments,
state: ActionState<Data, Error, ValidationError>,
payload: Payload
]) => Promise<ActionState<Data, Error, ValidationError>>;
declare function initial<Data>(data: Data): InitialState<Data>;
declare function createFormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData, Arguments extends [...unknown[]] = []>(formAction: (params: {
success: (data: Data) => SuccessState<Data>;
failure: (error: Error) => FailureState<Error>;
invalid: (validationError: ValidationError) => InvalidState<ValidationError>;
}, ...args: Arguments) => FormAction<Data, Error, ValidationError, Payload>): (...args: [...Arguments, state: ActionState<Data, Error, ValidationError>, payload: Payload]) => Promise<ActionState<Data, Error, ValidationError>>;
export { type ActionState as A, type FormAction as F, type InitialState as I, type SuccessState as S, type InvalidState as a, type FailureState as b, createFormAction as c, initial as i };