@shopify/react-form
Version:
Manage react forms tersely and safely-typed with no magic using React hooks.
55 lines (54 loc) • 2.02 kB
TypeScript
/// <reference types="react" />
import { FieldStates, ErrorValue } from '../../types';
declare type ListAction<Item> = ReinitializeAction<Item> | UpdateErrorAction<Item> | UpdateAction<Item, keyof Item> | ResetAction<Item, keyof Item> | NewDefaultAction<Item, keyof Item>;
interface ReinitializeAction<Item> {
type: 'reinitialize';
payload: {
list: Item[];
};
}
interface TargetedPayload<Item, Key extends keyof Item> {
target: {
index: number;
key: Key;
};
value: Item[Key];
}
interface UpdateErrorAction<Item> {
type: 'updateError';
payload: {
target: {
index: number;
key: keyof Item;
};
error: ErrorValue;
};
}
interface ResetAction<Item, Key extends keyof Item> {
type: 'reset';
payload: {
target: {
index: number;
key: Key;
};
};
}
interface UpdateAction<Item, Key extends keyof Item> {
type: 'update';
payload: TargetedPayload<Item, Key>;
}
interface NewDefaultAction<Item, Key extends keyof Item> {
type: 'newDefaultValue';
payload: TargetedPayload<Item, Key>;
}
export declare function reinitializeAction<Item>(list: Item[]): ReinitializeAction<Item>;
export declare function updateAction<Item, Key extends keyof Item>(payload: TargetedPayload<Item, Key>): UpdateAction<Item, Key>;
export declare function resetAction<Item, Key extends keyof Item>(payload: ResetAction<Item, Key>['payload']): ResetAction<Item, Key>;
export declare function newDefaultAction<Item, Key extends keyof Item>(payload: TargetedPayload<Item, Key>): NewDefaultAction<Item, Key>;
export declare function updateErrorAction<Item>(payload: UpdateErrorAction<Item>['payload']): UpdateErrorAction<Item>;
export interface ListState<Item extends object> {
list: FieldStates<Item>[];
initial: Item[];
}
export declare function useListReducer<Item extends object>(initial: Item[]): [ListState<Item>, import("react").Dispatch<ListAction<Item>>];
export {};