@undermuz/use-form
Version:
React library for build forms
89 lines (87 loc) • 2.94 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/useForm/useControlledForm.ts
var useControlledForm_exports = {};
__export(useControlledForm_exports, {
useControlledForm: () => useControlledForm
});
module.exports = __toCommonJS(useControlledForm_exports);
var import_react = require("react");
var import_underscore = require("underscore");
var import_common = require("../utils/common.cjs");
var useControlledForm = (form, props) => {
const { value, onChange, options } = props;
const valueRef = (0, import_react.useRef)(value);
const onChangeRef = (0, import_common.useRefBy)(onChange);
const mountFlag = (0, import_react.useRef)(false);
(0, import_react.useEffect)(() => {
if (!value) {
return;
}
if (value === valueRef.current) {
return;
}
if ((0, import_underscore.isEqual)(value, valueRef.current)) {
return;
}
if (options == null ? void 0 : options.debug)
console.log("[useForm][Update values from external]", {
external: value,
current: valueRef.current
});
valueRef.current = value;
form.setValues(value);
}, [value]);
(0, import_react.useEffect)(() => {
if (!mountFlag.current) {
mountFlag.current = true;
return;
}
if (!onChangeRef.current) {
return;
}
if (valueRef.current !== form.values && !(0, import_underscore.isEqual)(valueRef.current, form.values)) {
if (options == null ? void 0 : options.debug)
console.log("[useForm][Emit values to external]", {
current: form.values,
external: valueRef.current
});
valueRef.current = form.values;
onChangeRef.current(form.values);
}
}, [form.values]);
(0, import_react.useEffect)(() => {
if (!value) {
return;
}
if (value === form.store.getState().values) {
return;
}
if (options == null ? void 0 : options.debug)
console.log("[useForm][Set initials values]", {
external: value,
current: form.store.getState().values
});
form.setValues(value);
}, []);
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useControlledForm
});