@os-design/form 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -36
- package/dist/cjs/BroadcastObserverManager.js +41 -0
- package/dist/cjs/BroadcastObserverManager.js.map +1 -0
- package/dist/cjs/{SubscribableData.js → ErrorData.js} +17 -17
- package/dist/cjs/ErrorData.js.map +1 -0
- package/dist/cjs/ErrorObserverManager.js +62 -0
- package/dist/cjs/ErrorObserverManager.js.map +1 -0
- package/dist/cjs/Form.js +43 -0
- package/dist/cjs/Form.js.map +1 -0
- package/dist/cjs/Node.js +57 -0
- package/dist/cjs/Node.js.map +1 -0
- package/dist/cjs/ValueData.js +53 -0
- package/dist/cjs/ValueData.js.map +1 -0
- package/dist/cjs/ValueObserverManager.js +122 -0
- package/dist/cjs/ValueObserverManager.js.map +1 -0
- package/dist/cjs/index.js +114 -105
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/useFormContext.js +27 -0
- package/dist/cjs/useFormContext.js.map +1 -0
- package/dist/cjs/utils/deleteFromArray.js +17 -0
- package/dist/cjs/utils/deleteFromArray.js.map +1 -0
- package/dist/cjs/utils/path.js +53 -0
- package/dist/cjs/utils/path.js.map +1 -0
- package/dist/esm/BroadcastObserverManager.js +18 -0
- package/dist/esm/BroadcastObserverManager.js.map +1 -0
- package/dist/esm/ErrorData.js +20 -0
- package/dist/esm/ErrorData.js.map +1 -0
- package/dist/esm/ErrorObserverManager.js +26 -0
- package/dist/esm/ErrorObserverManager.js.map +1 -0
- package/dist/esm/Form.js +26 -0
- package/dist/esm/Form.js.map +1 -0
- package/dist/esm/Node.js +31 -0
- package/dist/esm/Node.js.map +1 -0
- package/dist/esm/ValueData.js +21 -0
- package/dist/esm/ValueData.js.map +1 -0
- package/dist/esm/ValueObserverManager.js +67 -0
- package/dist/esm/ValueObserverManager.js.map +1 -0
- package/dist/esm/index.js +44 -66
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/useFormContext.js +17 -0
- package/dist/esm/useFormContext.js.map +1 -0
- package/dist/esm/utils/deleteFromArray.js +8 -0
- package/dist/esm/utils/deleteFromArray.js.map +1 -0
- package/dist/esm/utils/path.js +31 -0
- package/dist/esm/utils/path.js.map +1 -0
- package/dist/types/BroadcastObserverManager.d.ts +10 -0
- package/dist/types/BroadcastObserverManager.d.ts.map +1 -0
- package/dist/types/ErrorData.d.ts +11 -0
- package/dist/types/ErrorData.d.ts.map +1 -0
- package/dist/types/ErrorObserverManager.d.ts +12 -0
- package/dist/types/ErrorObserverManager.d.ts.map +1 -0
- package/dist/types/Form.d.ts +12 -0
- package/dist/types/Form.d.ts.map +1 -0
- package/dist/types/Node.d.ts +15 -0
- package/dist/types/Node.d.ts.map +1 -0
- package/dist/types/ValueData.d.ts +11 -0
- package/dist/types/ValueData.d.ts.map +1 -0
- package/dist/types/ValueObserverManager.d.ts +13 -0
- package/dist/types/ValueObserverManager.d.ts.map +1 -0
- package/dist/types/index.d.ts +32 -46
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +15 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/useFormContext.d.ts +11 -0
- package/dist/types/useFormContext.d.ts.map +1 -0
- package/dist/types/utils/deleteFromArray.d.ts +3 -0
- package/dist/types/utils/deleteFromArray.d.ts.map +1 -0
- package/dist/types/utils/path.d.ts +5 -0
- package/dist/types/utils/path.d.ts.map +1 -0
- package/package.json +3 -3
- package/dist/cjs/SubscribableData.js.map +0 -1
- package/dist/cjs/SubscriptionManager.js +0 -83
- package/dist/cjs/SubscriptionManager.js.map +0 -1
- package/dist/esm/SubscribableData.js +0 -23
- package/dist/esm/SubscribableData.js.map +0 -1
- package/dist/esm/SubscriptionManager.js +0 -46
- package/dist/esm/SubscriptionManager.js.map +0 -1
- package/dist/types/SubscribableData.d.ts +0 -11
- package/dist/types/SubscribableData.d.ts.map +0 -1
- package/dist/types/SubscriptionManager.d.ts +0 -19
- package/dist/types/SubscriptionManager.d.ts.map +0 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _BroadcastObserverManager = _interopRequireDefault(require("./BroadcastObserverManager"));
|
|
9
|
+
var _Node = _interopRequireDefault(require("./Node"));
|
|
10
|
+
var _path = require("./utils/path");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
12
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
13
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
14
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
16
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
17
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
19
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
20
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
21
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
22
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
23
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
24
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
25
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
26
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
27
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
28
|
+
var split = function split(path) {
|
|
29
|
+
return path.split('.');
|
|
30
|
+
};
|
|
31
|
+
var ValueObserverManager = /*#__PURE__*/function (_BroadcastObserverMan) {
|
|
32
|
+
_inherits(ValueObserverManager, _BroadcastObserverMan);
|
|
33
|
+
var _super = _createSuper(ValueObserverManager);
|
|
34
|
+
function ValueObserverManager() {
|
|
35
|
+
var _this;
|
|
36
|
+
_classCallCheck(this, ValueObserverManager);
|
|
37
|
+
_this = _super.call(this);
|
|
38
|
+
_this.root = void 0;
|
|
39
|
+
_this.root = new _Node["default"]();
|
|
40
|
+
return _this;
|
|
41
|
+
}
|
|
42
|
+
_createClass(ValueObserverManager, [{
|
|
43
|
+
key: "findNode",
|
|
44
|
+
value: function findNode(path) {
|
|
45
|
+
var keys = split(path);
|
|
46
|
+
var cur = this.root;
|
|
47
|
+
keys.forEach(function (key) {
|
|
48
|
+
cur = cur.getNode(key) || cur.createNode(key);
|
|
49
|
+
});
|
|
50
|
+
return cur;
|
|
51
|
+
}
|
|
52
|
+
}, {
|
|
53
|
+
key: "subscribe",
|
|
54
|
+
value: function subscribe(name, observer) {
|
|
55
|
+
var node = this.findNode(name);
|
|
56
|
+
node.addObserver(observer);
|
|
57
|
+
return {
|
|
58
|
+
unsubscribe: function unsubscribe() {
|
|
59
|
+
node.deleteObserver(observer);
|
|
60
|
+
if (node.observers.length === 0) {
|
|
61
|
+
var _node$parent;
|
|
62
|
+
(_node$parent = node.parent) === null || _node$parent === void 0 ? void 0 : _node$parent.deleteNode(node.name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
key: "callObservers",
|
|
69
|
+
value: function callObservers(name, data) {
|
|
70
|
+
this.callBroadcastObservers(name, (0, _path.get)(data, name));
|
|
71
|
+
this.callNodeObservers(name, data);
|
|
72
|
+
}
|
|
73
|
+
}, {
|
|
74
|
+
key: "callNodeObservers",
|
|
75
|
+
value: function callNodeObservers(name, data) {
|
|
76
|
+
var keys = split(name);
|
|
77
|
+
var curNode = this.root;
|
|
78
|
+
var curData = data;
|
|
79
|
+
|
|
80
|
+
// Call the observers for the root node
|
|
81
|
+
curNode.observers.forEach(function (observer) {
|
|
82
|
+
return observer(curData);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Call observers on each node from the root to the specified one
|
|
86
|
+
for (var i = 0; i < keys.length; i += 1) {
|
|
87
|
+
var key = keys[i];
|
|
88
|
+
var node = curNode.getNode(key);
|
|
89
|
+
if (!node || !(0, _path.isObjectOrArray)(curData)) return;
|
|
90
|
+
curNode = node;
|
|
91
|
+
curData = curData[key];
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
93
|
+
curNode.observers.forEach(function (observer) {
|
|
94
|
+
return observer(curData);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Call observers of all child nodes started from the specified one
|
|
99
|
+
this.callChildObservers(curNode, curData);
|
|
100
|
+
}
|
|
101
|
+
}, {
|
|
102
|
+
key: "callChildObservers",
|
|
103
|
+
value: function callChildObservers(parent, data) {
|
|
104
|
+
var _this2 = this;
|
|
105
|
+
if (!(0, _path.isObjectOrArray)(data)) return;
|
|
106
|
+
Object.entries(parent.nodes).forEach(function (_ref) {
|
|
107
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
108
|
+
name = _ref2[0],
|
|
109
|
+
node = _ref2[1];
|
|
110
|
+
var value = data[name];
|
|
111
|
+
node.observers.forEach(function (observer) {
|
|
112
|
+
return observer(value);
|
|
113
|
+
});
|
|
114
|
+
_this2.callChildObservers(node, value);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}]);
|
|
118
|
+
return ValueObserverManager;
|
|
119
|
+
}(_BroadcastObserverManager["default"]);
|
|
120
|
+
var _default = ValueObserverManager;
|
|
121
|
+
exports["default"] = _default;
|
|
122
|
+
//# sourceMappingURL=ValueObserverManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueObserverManager.js","names":["split","path","ValueObserverManager","root","Node","keys","cur","forEach","key","getNode","createNode","name","observer","node","findNode","addObserver","unsubscribe","deleteObserver","observers","length","parent","deleteNode","data","callBroadcastObservers","get","callNodeObservers","curNode","curData","i","isObjectOrArray","callChildObservers","Object","entries","nodes","value","BroadcastObserverManager"],"sources":["../../src/ValueObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport Node from './Node';\nimport {\n Observer,\n PathReturn,\n RecursivePath,\n StringMap,\n Subscription,\n} from './types';\nimport { get, isObjectOrArray } from './utils/path';\n\nconst split = (path: string) => path.split('.');\n\nclass ValueObserverManager<\n TValues extends StringMap,\n TName extends RecursivePath<TValues> = RecursivePath<TValues>\n> extends BroadcastObserverManager<TName, TValues[TName]> {\n private readonly root: Node;\n\n public constructor() {\n super();\n this.root = new Node();\n }\n\n private findNode(path: string) {\n const keys = split(path);\n let cur = this.root;\n keys.forEach((key) => {\n cur = cur.getNode(key) || cur.createNode(key);\n });\n return cur;\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: Observer<PathReturn<TValues, T>>\n ): Subscription {\n const node = this.findNode(name);\n node.addObserver(observer);\n\n return {\n unsubscribe: () => {\n node.deleteObserver(observer);\n if (node.observers.length === 0) {\n node.parent?.deleteNode(node.name);\n }\n },\n };\n }\n\n protected callObservers<T extends TName>(name: T, data: TValues): void {\n this.callBroadcastObservers(name, get(data, name));\n this.callNodeObservers(name, data);\n }\n\n private callNodeObservers<T extends TName>(name: T, data: TValues): void {\n const keys = split(name);\n let curNode = this.root;\n let curData = data;\n\n // Call the observers for the root node\n curNode.observers.forEach((observer) => observer(curData));\n\n // Call observers on each node from the root to the specified one\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const node = curNode.getNode(key);\n if (!node || !isObjectOrArray(curData)) return;\n curNode = node;\n curData = curData[key];\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n curNode.observers.forEach((observer) => observer(curData));\n }\n\n // Call observers of all child nodes started from the specified one\n this.callChildObservers(curNode, curData);\n }\n\n private callChildObservers(parent: Node, data: TValues): void {\n if (!isObjectOrArray(data)) return;\n Object.entries(parent.nodes).forEach(([name, node]) => {\n const value = data[name];\n node.observers.forEach((observer) => observer(value));\n this.callChildObservers(node, value);\n });\n }\n}\n\nexport default ValueObserverManager;\n"],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -5,35 +5,73 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
var _exportNames = {
|
|
8
|
-
Form: true,
|
|
9
|
-
FormProvider: true,
|
|
10
|
-
useError: true,
|
|
11
8
|
useForm: true,
|
|
12
|
-
useExistingForm: true
|
|
9
|
+
useExistingForm: true,
|
|
10
|
+
Form: true
|
|
13
11
|
};
|
|
14
|
-
exports
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
Object.defineProperty(exports, "Form", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _Form["default"];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
exports.useForm = exports.useExistingForm = void 0;
|
|
19
|
+
var _react = require("react");
|
|
20
|
+
var _Form = _interopRequireDefault(require("./Form"));
|
|
21
|
+
var _useFormContext = _interopRequireWildcard(require("./useFormContext"));
|
|
22
|
+
Object.keys(_useFormContext).forEach(function (key) {
|
|
23
|
+
if (key === "default" || key === "__esModule") return;
|
|
24
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
25
|
+
if (key in exports && exports[key] === _useFormContext[key]) return;
|
|
26
|
+
Object.defineProperty(exports, key, {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function get() {
|
|
29
|
+
return _useFormContext[key];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
20
33
|
var _isEqual = _interopRequireDefault(require("./utils/isEqual"));
|
|
34
|
+
var _path = require("./utils/path");
|
|
21
35
|
var _useDeepEqualMemo = _interopRequireDefault(require("./utils/useDeepEqualMemo"));
|
|
22
|
-
var
|
|
23
|
-
Object.keys(
|
|
36
|
+
var _BroadcastObserverManager = require("./BroadcastObserverManager");
|
|
37
|
+
Object.keys(_BroadcastObserverManager).forEach(function (key) {
|
|
24
38
|
if (key === "default" || key === "__esModule") return;
|
|
25
39
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
26
|
-
if (key in exports && exports[key] ===
|
|
40
|
+
if (key in exports && exports[key] === _BroadcastObserverManager[key]) return;
|
|
27
41
|
Object.defineProperty(exports, key, {
|
|
28
42
|
enumerable: true,
|
|
29
43
|
get: function get() {
|
|
30
|
-
return
|
|
44
|
+
return _BroadcastObserverManager[key];
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
var _ErrorObserverManager = require("./ErrorObserverManager");
|
|
49
|
+
Object.keys(_ErrorObserverManager).forEach(function (key) {
|
|
50
|
+
if (key === "default" || key === "__esModule") return;
|
|
51
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
52
|
+
if (key in exports && exports[key] === _ErrorObserverManager[key]) return;
|
|
53
|
+
Object.defineProperty(exports, key, {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
get: function get() {
|
|
56
|
+
return _ErrorObserverManager[key];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
var _types = require("./types");
|
|
61
|
+
Object.keys(_types).forEach(function (key) {
|
|
62
|
+
if (key === "default" || key === "__esModule") return;
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
64
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
65
|
+
Object.defineProperty(exports, key, {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
get: function get() {
|
|
68
|
+
return _types[key];
|
|
31
69
|
}
|
|
32
70
|
});
|
|
33
71
|
});
|
|
34
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
35
72
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
36
73
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
74
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
37
75
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
38
76
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
39
77
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
@@ -44,46 +82,6 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
44
82
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
45
83
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
46
84
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
47
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
48
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
49
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
50
|
-
var Form = /*#__PURE__*/function () {
|
|
51
|
-
function Form(initValues) {
|
|
52
|
-
_classCallCheck(this, Form);
|
|
53
|
-
this.initValues = void 0;
|
|
54
|
-
this.values = void 0;
|
|
55
|
-
this.errors = void 0;
|
|
56
|
-
this.initValues = initValues;
|
|
57
|
-
this.values = new _SubscribableData["default"]((0, _clone["default"])(initValues));
|
|
58
|
-
this.errors = new _SubscribableData["default"]({});
|
|
59
|
-
}
|
|
60
|
-
_createClass(Form, [{
|
|
61
|
-
key: "reset",
|
|
62
|
-
value: function reset() {
|
|
63
|
-
var _this = this;
|
|
64
|
-
// Reset values
|
|
65
|
-
Object.keys(this.values.getAll()).forEach(function (name) {
|
|
66
|
-
_this.values.set(name, _this.initValues[name]);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Reset errors
|
|
70
|
-
Object.keys(this.errors.getAll()).forEach(function (name) {
|
|
71
|
-
_this.errors.set(name, undefined);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}]);
|
|
75
|
-
return Form;
|
|
76
|
-
}();
|
|
77
|
-
exports.Form = Form;
|
|
78
|
-
var FormContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
79
|
-
// eslint-disable-next-line react/function-component-definition
|
|
80
|
-
function FormProvider(_ref) {
|
|
81
|
-
var form = _ref.form,
|
|
82
|
-
children = _ref.children;
|
|
83
|
-
return /*#__PURE__*/_react["default"].createElement(FormContext.Provider, {
|
|
84
|
-
value: form
|
|
85
|
-
}, children);
|
|
86
|
-
}
|
|
87
85
|
var createUseValueHook = function createUseValueHook(form) {
|
|
88
86
|
return function (name) {
|
|
89
87
|
var _useState = (0, _react.useState)(form.values.get(name)),
|
|
@@ -91,7 +89,7 @@ var createUseValueHook = function createUseValueHook(form) {
|
|
|
91
89
|
value = _useState2[0],
|
|
92
90
|
setValue = _useState2[1];
|
|
93
91
|
(0, _react.useEffect)(function () {
|
|
94
|
-
var subscription = form.values.
|
|
92
|
+
var subscription = form.values.subscribe(name, function (v) {
|
|
95
93
|
setValue(v);
|
|
96
94
|
});
|
|
97
95
|
return function () {
|
|
@@ -101,25 +99,26 @@ var createUseValueHook = function createUseValueHook(form) {
|
|
|
101
99
|
return value;
|
|
102
100
|
};
|
|
103
101
|
};
|
|
104
|
-
var
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
|
|
102
|
+
var createUseErrorHook = function createUseErrorHook(form) {
|
|
103
|
+
return function (name) {
|
|
104
|
+
var _useState3 = (0, _react.useState)(form.errors.get(name)),
|
|
105
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
106
|
+
value = _useState4[0],
|
|
107
|
+
setValue = _useState4[1];
|
|
108
|
+
(0, _react.useEffect)(function () {
|
|
109
|
+
var subscription = form.errors.subscribe(name, function (v) {
|
|
110
|
+
setValue(v);
|
|
111
|
+
});
|
|
112
|
+
return function () {
|
|
113
|
+
return subscription.unsubscribe();
|
|
114
|
+
};
|
|
115
|
+
}, [name]);
|
|
116
|
+
return value;
|
|
117
|
+
};
|
|
120
118
|
};
|
|
121
|
-
exports.useError = useError;
|
|
122
119
|
var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
121
|
+
// @ts-ignore
|
|
123
122
|
var useValue = createUseValueHook(form);
|
|
124
123
|
return function (name, transformer) {
|
|
125
124
|
var value = useValue(name);
|
|
@@ -129,10 +128,11 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
|
129
128
|
}, [transformer]);
|
|
130
129
|
(0, _react.useEffect)(function () {
|
|
131
130
|
var partialValues = transformerRef.current(value);
|
|
132
|
-
Object.entries(partialValues).forEach(function (
|
|
133
|
-
var
|
|
134
|
-
n =
|
|
135
|
-
v =
|
|
131
|
+
Object.entries(partialValues).forEach(function (_ref) {
|
|
132
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
133
|
+
n = _ref2[0],
|
|
134
|
+
v = _ref2[1];
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
136
136
|
form.values.set(n, v);
|
|
137
137
|
});
|
|
138
138
|
}, [value]);
|
|
@@ -140,29 +140,32 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
|
140
140
|
};
|
|
141
141
|
var createFieldComponent = function createFieldComponent(form) {
|
|
142
142
|
var useValue = createUseValueHook(form);
|
|
143
|
+
var useError = createUseErrorHook(form);
|
|
143
144
|
return function (props) {
|
|
144
145
|
var name = props.name,
|
|
145
|
-
|
|
146
|
-
|
|
146
|
+
_props$transformer = props.transformer,
|
|
147
|
+
transformer = _props$transformer === void 0 ? function (v) {
|
|
148
|
+
return v;
|
|
149
|
+
} : _props$transformer,
|
|
147
150
|
render = props.render;
|
|
148
151
|
var value = useValue(name);
|
|
149
|
-
var
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
152
|
+
var error = useError(name);
|
|
153
|
+
var initValue = (0, _react.useMemo)(function () {
|
|
154
|
+
return (0, _path.get)(form.initValues, name);
|
|
155
|
+
}, [name]);
|
|
153
156
|
var modified = (0, _react.useMemo)(function () {
|
|
154
|
-
return !(0, _isEqual["default"])(value,
|
|
155
|
-
}, [
|
|
157
|
+
return !(0, _isEqual["default"])(value, initValue);
|
|
158
|
+
}, [initValue, value]);
|
|
156
159
|
var reset = (0, _react.useCallback)(function () {
|
|
157
|
-
return form.values.set(name,
|
|
158
|
-
}, [name]);
|
|
159
|
-
var
|
|
160
|
+
return form.values.set(name, initValue);
|
|
161
|
+
}, [initValue, name]);
|
|
162
|
+
var transformerRef = (0, _react.useRef)(transformer);
|
|
160
163
|
(0, _react.useEffect)(function () {
|
|
161
|
-
|
|
162
|
-
}, [
|
|
164
|
+
transformerRef.current = transformer;
|
|
165
|
+
}, [transformer]);
|
|
163
166
|
var onChange = (0, _react.useCallback)(function (v) {
|
|
164
|
-
form.values.set(name,
|
|
165
|
-
form.errors.set(name, undefined);
|
|
167
|
+
form.values.set(name, transformerRef.current(v));
|
|
168
|
+
form.errors.set(name, undefined); // Reset the error when the value is changed
|
|
166
169
|
}, [name]);
|
|
167
170
|
var renderRef = (0, _react.useRef)(render);
|
|
168
171
|
(0, _react.useEffect)(function () {
|
|
@@ -170,13 +173,13 @@ var createFieldComponent = function createFieldComponent(form) {
|
|
|
170
173
|
}, [render]);
|
|
171
174
|
var inputProps = (0, _react.useMemo)(function () {
|
|
172
175
|
return {
|
|
173
|
-
value:
|
|
176
|
+
value: value,
|
|
174
177
|
onChange: onChange
|
|
175
178
|
};
|
|
176
|
-
}, [onChange,
|
|
179
|
+
}, [onChange, value]);
|
|
177
180
|
var fieldState = (0, _react.useMemo)(function () {
|
|
178
181
|
return {
|
|
179
|
-
error: error
|
|
182
|
+
error: error,
|
|
180
183
|
modified: modified,
|
|
181
184
|
reset: reset
|
|
182
185
|
};
|
|
@@ -200,8 +203,8 @@ var useModifiedFields = function useModifiedFields(form) {
|
|
|
200
203
|
initValuesRef.current = form.initValues;
|
|
201
204
|
}, [form.initValues]);
|
|
202
205
|
(0, _react.useEffect)(function () {
|
|
203
|
-
var subscription = form.values.
|
|
204
|
-
var isInitValue = (0, _isEqual["default"])(value, initValuesRef.current
|
|
206
|
+
var subscription = form.values.subscribeToAll(function (name, value) {
|
|
207
|
+
var isInitValue = (0, _isEqual["default"])(value, (0, _path.get)(initValuesRef.current, name));
|
|
205
208
|
var fields = modifiedFieldsRef.current;
|
|
206
209
|
if (fields.includes(name)) {
|
|
207
210
|
if (isInitValue) {
|
|
@@ -220,15 +223,18 @@ var useModifiedFields = function useModifiedFields(form) {
|
|
|
220
223
|
return modifiedFields;
|
|
221
224
|
};
|
|
222
225
|
var useFormResponse = function useFormResponse(form) {
|
|
226
|
+
var Field = (0, _react.useMemo)(function () {
|
|
227
|
+
return createFieldComponent(form);
|
|
228
|
+
}, [form]);
|
|
223
229
|
var useValue = (0, _react.useMemo)(function () {
|
|
224
230
|
return createUseValueHook(form);
|
|
225
231
|
}, [form]);
|
|
232
|
+
var useError = (0, _react.useMemo)(function () {
|
|
233
|
+
return createUseErrorHook(form);
|
|
234
|
+
}, [form]);
|
|
226
235
|
var useTransformer = (0, _react.useMemo)(function () {
|
|
227
236
|
return createUseTransformerHook(form);
|
|
228
237
|
}, [form]);
|
|
229
|
-
var Field = (0, _react.useMemo)(function () {
|
|
230
|
-
return createFieldComponent(form);
|
|
231
|
-
}, [form]);
|
|
232
238
|
var modifiedFields = useModifiedFields(form);
|
|
233
239
|
var modified = (0, _react.useMemo)(function () {
|
|
234
240
|
return modifiedFields.length > 0;
|
|
@@ -238,24 +244,27 @@ var useFormResponse = function useFormResponse(form) {
|
|
|
238
244
|
form: form,
|
|
239
245
|
Field: Field,
|
|
240
246
|
useValue: useValue,
|
|
247
|
+
useError: useError,
|
|
241
248
|
useTransformer: useTransformer,
|
|
242
249
|
modifiedFields: modifiedFields,
|
|
243
250
|
modified: modified
|
|
244
251
|
};
|
|
245
|
-
}, [Field, form, modified, modifiedFields, useTransformer, useValue]);
|
|
252
|
+
}, [Field, form, modified, modifiedFields, useError, useTransformer, useValue]);
|
|
246
253
|
};
|
|
247
254
|
var useForm = function useForm(initValues) {
|
|
248
255
|
var memoizedInitValues = (0, _useDeepEqualMemo["default"])(function () {
|
|
249
256
|
return initValues;
|
|
250
257
|
}, [initValues]);
|
|
251
|
-
var
|
|
252
|
-
|
|
258
|
+
var formRef = (0, _react.useRef)(new _Form["default"](memoizedInitValues));
|
|
259
|
+
(0, _react.useEffect)(function () {
|
|
260
|
+
formRef.current.initValues = memoizedInitValues;
|
|
261
|
+
formRef.current.reset();
|
|
253
262
|
}, [memoizedInitValues]);
|
|
254
|
-
return useFormResponse(
|
|
263
|
+
return useFormResponse(formRef.current);
|
|
255
264
|
};
|
|
256
265
|
exports.useForm = useForm;
|
|
257
266
|
var useExistingForm = function useExistingForm() {
|
|
258
|
-
var form = (0,
|
|
267
|
+
var form = (0, _useFormContext["default"])();
|
|
259
268
|
if (!form) throw new Error('Wrap your form in a FormProvider');
|
|
260
269
|
return useFormResponse(form);
|
|
261
270
|
};
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Form","initValues","values","errors","SubscribableData","clone","Object","keys","getAll","forEach","name","set","undefined","FormContext","createContext","FormProvider","form","children","createUseValueHook","useState","get","value","setValue","useEffect","subscription","subscribeToField","v","unsubscribe","useError","currentForm","useContext","Error","createUseTransformerHook","useValue","transformer","transformerRef","useRef","current","partialValues","entries","n","createFieldComponent","props","toValue","fromValue","render","transformedValue","useMemo","error","modified","isEqual","reset","useCallback","fromValueRef","onChange","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAllFields","isInitValue","fields","includes","filter","field","useFormResponse","useTransformer","Field","length","useForm","memoizedInitValues","useDeepEqualMemo","useExistingForm"],"sources":["../../src/index.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport SubscribableData from './SubscribableData';\nimport clone from './utils/clone';\nimport isEqual from './utils/isEqual';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './SubscriptionManager';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Values = Record<string, any>;\ntype Errors<TValues extends Values> = Record<keyof TValues, string | undefined>;\n\nexport class Form<\n TValues extends Values = Values,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public readonly initValues: TValues;\n\n public readonly values: SubscribableData<TValues>;\n\n public readonly errors: SubscribableData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new SubscribableData(clone(initValues));\n this.errors = new SubscribableData({} as TErrors);\n }\n\n public reset() {\n // Reset values\n Object.keys(this.values.getAll()).forEach((name) => {\n this.values.set(name, this.initValues[name]);\n });\n\n // Reset errors\n Object.keys(this.errors.getAll()).forEach((name) => {\n this.errors.set(name, undefined as any);\n });\n }\n}\n\nconst FormContext = createContext<any>(null);\n\ninterface FormProviderProps<TValues extends Values> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends Values>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends keyof TValues>(name: TName) => {\n const [value, setValue] = useState<TValues[TName]>(form.values.get(name));\n\n useEffect(() => {\n const subscription = form.values.subscribeToField(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport const useError = <\n TValues extends Values = Values,\n TName extends keyof TValues = keyof TValues\n>(\n name: TName,\n form?: Form<TValues>\n) => {\n const currentForm = useContext(FormContext) || form;\n if (!currentForm) throw new Error('Specify the form');\n const [value, setValue] = useState<string | undefined>(\n currentForm.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = currentForm.errors.subscribeToField(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [currentForm.errors, name]);\n\n return value;\n};\n\nexport type Transformer<TValues extends Values, TName extends keyof TValues> = (\n value: TValues[TName]\n) => Partial<TValues>;\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends keyof TValues>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n form.values.set(n, v);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<T> {\n value: T;\n onChange: (value: T) => void;\n}\ninterface FieldState {\n error: string | null;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldPropsWithoutTransformers<TName, TStateValue> {\n name: TName;\n toValue?: never;\n fromValue?: never;\n render: (\n inputProps: InputProps<TStateValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\ninterface FieldPropsWithTransformers<TName, TStateValue, TInputValue> {\n name: TName;\n toValue: (value: TStateValue) => TInputValue;\n fromValue?: (value: TInputValue) => TStateValue;\n render: (\n inputProps: InputProps<TInputValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\ntype FieldProps<TName, TStateValue, TInputValue> =\n | FieldPropsWithoutTransformers<TName, TStateValue>\n | FieldPropsWithTransformers<TName, TStateValue, TInputValue>;\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n return <TName extends keyof TValues>(\n props: FieldProps<TName, TValues[TName], any>\n ) => {\n const { name, toValue, fromValue, render } = props;\n\n const value = useValue(name);\n const transformedValue = useMemo<any>(\n () => (toValue ? toValue(value) : value),\n [toValue, value]\n );\n const error = useError<TValues>(name, form);\n\n const modified = useMemo(\n () => !isEqual(value, form.initValues[name]),\n [name, value]\n );\n const reset = useCallback(\n () => form.values.set(name, form.initValues[name]),\n [name]\n );\n\n const fromValueRef = useRef(fromValue);\n useEffect(() => {\n fromValueRef.current = fromValue;\n }, [fromValue]);\n\n const onChange = useCallback(\n (v: any) => {\n form.values.set(\n name,\n fromValueRef.current ? fromValueRef.current(v) : (v as TValues[TName])\n );\n form.errors.set(name, undefined);\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(\n () => ({ value: transformedValue, onChange }),\n [onChange, transformedValue]\n );\n const fieldState = useMemo(\n () => ({ error: error || null, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<keyof TValues>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAllFields((name, value) => {\n const isInitValue = isEqual(value, initValuesRef.current[name]);\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n const Field = useMemo(() => createFieldComponent(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n const form = useMemo(\n () => new Form<TValues>(memoizedInitValues),\n [memoizedInitValues]\n );\n return useFormResponse(form);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useContext<Form<TValues> | null>(FormContext);\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["createUseValueHook","form","name","useState","values","get","value","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","useRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","useDeepEqualMemo","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { PathReturn, RecursivePath, StringMap } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends RecursivePath<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends RecursivePath<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<\n TValues extends StringMap,\n TName extends RecursivePath<TValues>\n> = (value: PathReturn<TValues, TName>) => {\n [K in RecursivePath<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const useValue = createUseValueHook(form);\n return <TName extends RecursivePath<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as RecursivePath<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue> {\n name: TName;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends RecursivePath<TValues>>(\n props: FieldProps<TName, PathReturn<TValues, TName>>\n ) => {\n const { name, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n form.errors.set(name, undefined); // Reset the error when the value is changed\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends StringMap>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<\n Array<RecursivePath<TValues>>\n >([]);\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends StringMap>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends StringMap = StringMap>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends StringMap = StringMap>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type StringMap<T = any> = Record<string, T>;\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\ntype KeyOf<T> = Exclude<keyof T, symbol | keyof any[]>;\n\nexport type Path<T, K = KeyOf<T>> = T extends StringMap\n ?\n | K\n | (K extends keyof T\n ? T[K] extends StringMap\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\ntype Cast<T1, T2> = T1 extends T2 ? T1 : T2;\nexport type RecursivePath<T> = Path<T> extends infer U\n ? Cast<U, string>\n : never;\n\nexport type Errors<T> = Record<RecursivePath<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.FormProvider = FormProvider;
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
+
var FormContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
14
|
+
// eslint-disable-next-line react/function-component-definition
|
|
15
|
+
function FormProvider(_ref) {
|
|
16
|
+
var form = _ref.form,
|
|
17
|
+
children = _ref.children;
|
|
18
|
+
return /*#__PURE__*/_react["default"].createElement(FormContext.Provider, {
|
|
19
|
+
value: form
|
|
20
|
+
}, children);
|
|
21
|
+
}
|
|
22
|
+
function useFormContext() {
|
|
23
|
+
return (0, _react.useContext)(FormContext);
|
|
24
|
+
}
|
|
25
|
+
var _default = useFormContext;
|
|
26
|
+
exports["default"] = _default;
|
|
27
|
+
//# sourceMappingURL=useFormContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormContext.js","names":["FormContext","createContext","FormProvider","form","children","useFormContext","useContext"],"sources":["../../src/useFormContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useContext } from 'react';\nimport Form from './Form';\nimport { StringMap } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FormContext = createContext<any>(null);\n\nexport interface FormProviderProps<TValues extends StringMap> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends StringMap>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nfunction useFormContext<T>() {\n return useContext<T>(FormContext);\n}\n\nexport default useFormContext;\n"],"mappings":";;;;;;;;AAAA;AAAoE;AAAA;AAIpE;AACA,IAAMA,WAAW,gBAAG,IAAAC,oBAAa,EAAM,IAAI,CAAC;AAO5C;AACO,SAASC,YAAY,OAGG;EAAA,IAF7BC,IAAI,QAAJA,IAAI;IACJC,QAAQ,QAARA,QAAQ;EAER,oBAAO,gCAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAED;EAAK,GAAEC,QAAQ,CAAwB;AAC7E;AAEA,SAASC,cAAc,GAAM;EAC3B,OAAO,IAAAC,iBAAU,EAAIN,WAAW,CAAC;AACnC;AAAC,eAEcK,cAAc;AAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
var deleteFromArray = function deleteFromArray(arr, item) {
|
|
9
|
+
var index = arr.findIndex(function (i) {
|
|
10
|
+
return i === item;
|
|
11
|
+
});
|
|
12
|
+
if (index === -1) return;
|
|
13
|
+
arr.splice(index, 1);
|
|
14
|
+
};
|
|
15
|
+
var _default = deleteFromArray;
|
|
16
|
+
exports["default"] = _default;
|
|
17
|
+
//# sourceMappingURL=deleteFromArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteFromArray.js","names":["deleteFromArray","arr","item","index","findIndex","i","splice"],"sources":["../../../src/utils/deleteFromArray.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst deleteFromArray = (arr: any[], item: any) => {\n const index = arr.findIndex((i) => i === item);\n if (index === -1) return;\n arr.splice(index, 1);\n};\n\nexport default deleteFromArray;\n"],"mappings":";;;;;;AAAA;AACA,IAAMA,eAAe,GAAG,SAAlBA,eAAe,CAAIC,GAAU,EAAEC,IAAS,EAAK;EACjD,IAAMC,KAAK,GAAGF,GAAG,CAACG,SAAS,CAAC,UAACC,CAAC;IAAA,OAAKA,CAAC,KAAKH,IAAI;EAAA,EAAC;EAC9C,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE;EAClBF,GAAG,CAACK,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;AACtB,CAAC;AAAC,eAEaH,eAAe;AAAA"}
|