@shopify/react-form
Version:
Manage react forms tersely and safely-typed with no magic using React hooks.
67 lines (66 loc) • 2 kB
JavaScript
;
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;