UNPKG

@shopify/react-form

Version:

Manage react forms tersely and safely-typed with no magic using React hooks.

55 lines (54 loc) 2.02 kB
/// <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 {};