UNPKG

@shopify/react-form

Version:

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

67 lines (66 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); function updateAction(value) { return { type: 'update', payload: value, }; } exports.updateAction = updateAction; function resetAction() { return { type: 'reset', }; } exports.resetAction = resetAction; function newDefaultAction(value) { return { type: 'newDefaultValue', payload: value, }; } exports.newDefaultAction = newDefaultAction; function updateErrorAction(error) { return { type: 'updateError', payload: error, }; } exports.updateErrorAction = updateErrorAction; function reduceField(state, action) { switch (action.type) { case 'update': { var newValue = action.payload; var defaultValue = state.defaultValue; return tslib_1.__assign({}, state, { dirty: defaultValue !== newValue, value: newValue, touched: true }); } case 'updateError': { return tslib_1.__assign({}, state, { error: action.payload }); } case 'reset': { var defaultValue = state.defaultValue; return tslib_1.__assign({}, state, { error: undefined, value: defaultValue, dirty: false, touched: false }); } case 'newDefaultValue': { var newDefaultValue = action.payload; return tslib_1.__assign({}, state, { error: undefined, value: newDefaultValue, defaultValue: newDefaultValue, touched: false, dirty: false }); } } } exports.reduceField = reduceField; function useFieldReducer(value) { return react_1.useReducer(reduceField, initialFieldState(value)); } exports.useFieldReducer = useFieldReducer; function initialFieldState(value) { return { value: value, defaultValue: value, error: undefined, touched: false, dirty: false, }; } exports.initialFieldState = initialFieldState;