@react-form-fields/core
Version:
Material UI Form Fields
35 lines • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var cloneDeep = require("lodash/cloneDeep");
var react_1 = require("react");
var useModel = function (initialState) {
var cloneModel = react_1.useCallback(function (model, $dirty) {
model = cloneDeep(model);
model.$dirty = $dirty;
model.toJSON = function () {
var result = cloneDeep(this);
delete result.$dirty;
return result;
};
return model;
}, []);
var freezeInitalState = react_1.useState(cloneModel(initialState, false))[0];
var _a = react_1.useState(cloneModel(initialState, false)), model = _a[0], setModel = _a[1];
var handlers = react_1.useRef({}).current;
var setModelCallback = react_1.useRef(function (key, handler) {
if (!handlers[key]) {
handlers[key] = function (value) {
var newModel = cloneModel(model, true);
handler(newModel, value);
setModel(newModel);
};
}
return handlers[key];
}).current;
var cleanModel = react_1.useCallback(function () {
setModel(cloneModel(freezeInitalState, false));
}, [cloneModel, freezeInitalState]);
return [model, setModelCallback, setModel, cleanModel];
};
exports.default = useModel;
//# sourceMappingURL=useModel.js.map