@insticc/genericform 1.0.10 → 2.0.0
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/build/Demo.js +559 -0
- package/build/Demo2.js +495 -0
- package/build/FormFields/CustomAccordion.js +105 -0
- package/build/FormFields/CustomCheckbox.js +50 -72
- package/build/FormFields/CustomCheckboxGroup.js +87 -0
- package/build/FormFields/CustomComponent.js +42 -0
- package/build/FormFields/CustomDatePicker.js +61 -77
- package/build/FormFields/CustomDropdown.js +103 -26
- package/build/FormFields/CustomInput.js +60 -54
- package/build/FormFields/CustomJson.js +148 -0
- package/build/FormFields/CustomLabel.js +13 -18
- package/build/FormFields/CustomMultiDropdown.js +88 -0
- package/build/FormFields/CustomNumberInput.js +56 -52
- package/build/FormFields/CustomRadioGroup.js +91 -0
- package/build/FormFields/CustomSearch.js +66 -39
- package/build/FormFields/CustomSeparator.js +24 -0
- package/build/FormFields/CustomTextArea.js +62 -55
- package/build/FormFields/CustomToggle.js +73 -0
- package/build/FormFields/defaults.js +32 -0
- package/build/index.css +450 -12
- package/build/index.js +739 -385
- package/package.json +28 -14
- package/build/FormFields/CustomRadioButton.js +0 -56
- package/build/FormFields/MultipleCheckbox.js +0 -91
- package/build/FormFields/MultipleDropdown.js +0 -75
- package/build/FormFields/MultipleRadioButton.js +0 -89
- package/build/FormFields/YearDatePicker.js +0 -114
package/build/index.js
CHANGED
|
@@ -3,435 +3,789 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "Demo", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _Demo["default"];
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "Demo2", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _Demo2["default"];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
6
18
|
exports["default"] = void 0;
|
|
7
|
-
var _react =
|
|
8
|
-
var
|
|
9
|
-
var
|
|
19
|
+
var _react = require("react");
|
|
20
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
21
|
+
var _CustomAccordion = _interopRequireDefault(require("./FormFields/CustomAccordion"));
|
|
10
22
|
var _CustomCheckbox = _interopRequireDefault(require("./FormFields/CustomCheckbox"));
|
|
23
|
+
var _CustomCheckboxGroup = _interopRequireDefault(require("./FormFields/CustomCheckboxGroup"));
|
|
24
|
+
var _CustomComponent = _interopRequireDefault(require("./FormFields/CustomComponent"));
|
|
11
25
|
var _CustomDatePicker = _interopRequireDefault(require("./FormFields/CustomDatePicker"));
|
|
12
26
|
var _CustomDropdown = _interopRequireDefault(require("./FormFields/CustomDropdown"));
|
|
13
27
|
var _CustomInput = _interopRequireDefault(require("./FormFields/CustomInput"));
|
|
28
|
+
var _CustomJson = _interopRequireDefault(require("./FormFields/CustomJson"));
|
|
14
29
|
var _CustomLabel = _interopRequireDefault(require("./FormFields/CustomLabel"));
|
|
30
|
+
var _CustomMultiDropdown = _interopRequireDefault(require("./FormFields/CustomMultiDropdown"));
|
|
15
31
|
var _CustomNumberInput = _interopRequireDefault(require("./FormFields/CustomNumberInput"));
|
|
16
|
-
var
|
|
32
|
+
var _CustomRadioGroup = _interopRequireDefault(require("./FormFields/CustomRadioGroup"));
|
|
17
33
|
var _CustomSearch = _interopRequireDefault(require("./FormFields/CustomSearch"));
|
|
34
|
+
var _CustomSeparator = _interopRequireDefault(require("./FormFields/CustomSeparator"));
|
|
18
35
|
var _CustomTextArea = _interopRequireDefault(require("./FormFields/CustomTextArea"));
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var _YearDatePicker = _interopRequireDefault(require("./FormFields/YearDatePicker"));
|
|
36
|
+
var _CustomToggle = _interopRequireDefault(require("./FormFields/CustomToggle"));
|
|
37
|
+
var _Demo = _interopRequireDefault(require("./Demo"));
|
|
38
|
+
var _Demo2 = _interopRequireDefault(require("./Demo2"));
|
|
23
39
|
require("./index.css");
|
|
24
40
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
25
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
26
41
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
42
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
43
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
44
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
45
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
27
46
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
28
47
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
29
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
30
|
-
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."); }
|
|
31
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
32
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
33
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
34
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
35
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
36
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
37
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
38
|
-
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
39
|
-
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
40
|
-
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
41
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
42
|
-
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
43
|
-
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
44
|
-
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
45
48
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
46
49
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
47
50
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
51
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
52
|
+
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."); }
|
|
53
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
54
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
55
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
56
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } // #region FormFields
|
|
48
57
|
require('react-datetime/css/react-datetime.css');
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
|
|
59
|
+
// #region Pure helpers
|
|
60
|
+
var sortFieldsFn = function sortFieldsFn(fields) {
|
|
61
|
+
var grouped = {},
|
|
62
|
+
ungrouped = [];
|
|
63
|
+
fields.forEach(function (field) {
|
|
64
|
+
if (field.group) {
|
|
65
|
+
if (!grouped[field.group]) grouped[field.group] = [];
|
|
66
|
+
grouped[field.group].push(field);
|
|
67
|
+
} else ungrouped.push(field);
|
|
68
|
+
});
|
|
69
|
+
return Object.keys(grouped).sort().flatMap(function (g) {
|
|
70
|
+
return grouped[g];
|
|
71
|
+
}).concat(ungrouped);
|
|
72
|
+
};
|
|
73
|
+
var groupByInline = function groupByInline(fields) {
|
|
74
|
+
var groups = [];
|
|
75
|
+
var buffer = [];
|
|
76
|
+
fields.forEach(function (field, index) {
|
|
77
|
+
if (field.inline) {
|
|
78
|
+
buffer.push({
|
|
79
|
+
field: field,
|
|
80
|
+
index: index
|
|
66
81
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
} else {
|
|
83
|
+
if (buffer.length) {
|
|
84
|
+
groups.push({
|
|
85
|
+
type: 'inline',
|
|
86
|
+
fields: buffer
|
|
87
|
+
});
|
|
88
|
+
buffer = [];
|
|
89
|
+
}
|
|
90
|
+
groups.push({
|
|
91
|
+
type: 'single',
|
|
92
|
+
field: field,
|
|
93
|
+
index: index
|
|
73
94
|
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
if (buffer.length) groups.push({
|
|
98
|
+
type: 'inline',
|
|
99
|
+
fields: buffer
|
|
100
|
+
});
|
|
101
|
+
return groups;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// #region GenericForm Props
|
|
105
|
+
var GenericForm = function GenericForm(_ref) {
|
|
106
|
+
var _ref$externalData = _ref.externalData,
|
|
107
|
+
externalData = _ref$externalData === void 0 ? {} : _ref$externalData,
|
|
108
|
+
_ref$fields = _ref.fields,
|
|
109
|
+
fields = _ref$fields === void 0 ? [] : _ref$fields,
|
|
110
|
+
title = _ref.title,
|
|
111
|
+
titleIcon = _ref.titleIcon,
|
|
112
|
+
_ref$containerStyle = _ref.containerStyle,
|
|
113
|
+
containerStyle = _ref$containerStyle === void 0 ? {} : _ref$containerStyle,
|
|
114
|
+
formStyle = _ref.formStyle,
|
|
115
|
+
_ref$splitForm = _ref.splitForm,
|
|
116
|
+
splitForm = _ref$splitForm === void 0 ? false : _ref$splitForm,
|
|
117
|
+
splitField = _ref.splitField,
|
|
118
|
+
splitGroup = _ref.splitGroup,
|
|
119
|
+
_ref$disableDefaultCo = _ref.disableDefaultContainer,
|
|
120
|
+
disableDefaultContainer = _ref$disableDefaultCo === void 0 ? false : _ref$disableDefaultCo,
|
|
121
|
+
handleSubmit = _ref.handleSubmit,
|
|
122
|
+
onSubmit = _ref.onSubmit,
|
|
123
|
+
onCancel = _ref.onCancel,
|
|
124
|
+
_ref$haveSaveButton = _ref.haveSaveButton,
|
|
125
|
+
haveSaveButton = _ref$haveSaveButton === void 0 ? true : _ref$haveSaveButton,
|
|
126
|
+
_ref$showSubmit = _ref.showSubmit,
|
|
127
|
+
showSubmit = _ref$showSubmit === void 0 ? true : _ref$showSubmit,
|
|
128
|
+
_ref$showCancel = _ref.showCancel,
|
|
129
|
+
showCancel = _ref$showCancel === void 0 ? true : _ref$showCancel,
|
|
130
|
+
_ref$submitText = _ref.submitText,
|
|
131
|
+
submitText = _ref$submitText === void 0 ? 'Save' : _ref$submitText,
|
|
132
|
+
_ref$cancelText = _ref.cancelText,
|
|
133
|
+
cancelText = _ref$cancelText === void 0 ? 'Cancel' : _ref$cancelText,
|
|
134
|
+
_ref$validateOnChange = _ref.validateOnChange,
|
|
135
|
+
validateOnChange = _ref$validateOnChange === void 0 ? true : _ref$validateOnChange,
|
|
136
|
+
_ref$validateOnSubmit = _ref.validateOnSubmit,
|
|
137
|
+
validateOnSubmit = _ref$validateOnSubmit === void 0 ? true : _ref$validateOnSubmit,
|
|
138
|
+
onDataChange = _ref.onDataChange,
|
|
139
|
+
onFieldChange = _ref.onFieldChange,
|
|
140
|
+
handleSearchChange = _ref.handleSearchChange,
|
|
141
|
+
handleResultSelect = _ref.handleResultSelect,
|
|
142
|
+
resultRenderer = _ref.resultRenderer,
|
|
143
|
+
_ref$customActions = _ref.customActions,
|
|
144
|
+
customActions = _ref$customActions === void 0 ? [] : _ref$customActions,
|
|
145
|
+
_ref$enableModal = _ref.enableModal,
|
|
146
|
+
enableModal = _ref$enableModal === void 0 ? false : _ref$enableModal,
|
|
147
|
+
_ref$modalShow = _ref.modalShow,
|
|
148
|
+
modalShow = _ref$modalShow === void 0 ? false : _ref$modalShow,
|
|
149
|
+
_ref$modalSize = _ref.modalSize,
|
|
150
|
+
modalSize = _ref$modalSize === void 0 ? 'lg' : _ref$modalSize;
|
|
151
|
+
var _useState = (0, _react.useState)([]),
|
|
152
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
153
|
+
sortedFields = _useState2[0],
|
|
154
|
+
setSortedFields = _useState2[1];
|
|
155
|
+
var _useState3 = (0, _react.useState)({}),
|
|
156
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
157
|
+
internalFormData = _useState4[0],
|
|
158
|
+
setInternalFormData = _useState4[1];
|
|
159
|
+
var formDataRef = (0, _react.useRef)({});
|
|
160
|
+
var _useState5 = (0, _react.useState)({}),
|
|
161
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
162
|
+
errors = _useState6[0],
|
|
163
|
+
setErrors = _useState6[1];
|
|
164
|
+
var _useState7 = (0, _react.useState)(false),
|
|
165
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
166
|
+
isSubmitting = _useState8[0],
|
|
167
|
+
setIsSubmitting = _useState8[1];
|
|
168
|
+
var prevFieldValuesRef = (0, _react.useRef)({});
|
|
169
|
+
|
|
170
|
+
// ── Sync fields ─────────────────────────────────────────────────────────────
|
|
171
|
+
(0, _react.useEffect)(function () {
|
|
172
|
+
var prev = prevFieldValuesRef.current;
|
|
173
|
+
var next = {};
|
|
174
|
+
fields.forEach(function (field) {
|
|
175
|
+
if (field.name !== undefined) next[field.name] = field.value;
|
|
74
176
|
});
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
value
|
|
90
|
-
options: field.options,
|
|
91
|
-
onChange: _this.props.handleChange,
|
|
92
|
-
disabled: field.disabled,
|
|
93
|
-
upward: field.openUpward,
|
|
94
|
-
placeholder: field.placeholder || 'Select option'
|
|
95
|
-
});
|
|
96
|
-
var findList = list.find(function (l) {
|
|
97
|
-
return l.name === field.name;
|
|
177
|
+
|
|
178
|
+
// Detect which field.value props actually changed
|
|
179
|
+
var changed = Object.entries(next).filter(function (_ref2) {
|
|
180
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
181
|
+
name = _ref3[0],
|
|
182
|
+
val = _ref3[1];
|
|
183
|
+
return prev[name] !== val;
|
|
184
|
+
});
|
|
185
|
+
prevFieldValuesRef.current = next;
|
|
186
|
+
|
|
187
|
+
// First mount — initialise everything
|
|
188
|
+
if (Object.keys(prev).length === 0) {
|
|
189
|
+
var data = {};
|
|
190
|
+
fields.forEach(function (field) {
|
|
191
|
+
if (field.name && field.value !== undefined) data[field.name] = field.value;
|
|
98
192
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
193
|
+
setInternalFormData(data);
|
|
194
|
+
formDataRef.current = data;
|
|
195
|
+
setSortedFields(sortFieldsFn(fields));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Subsequent renders — only merge fields whose .value changed
|
|
200
|
+
if (changed.length > 0) {
|
|
201
|
+
var patch = Object.fromEntries(changed.filter(function (_ref4) {
|
|
202
|
+
var _ref5 = _slicedToArray(_ref4, 2),
|
|
203
|
+
val = _ref5[1];
|
|
204
|
+
return val !== undefined;
|
|
205
|
+
}).map(function (_ref6) {
|
|
206
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
207
|
+
name = _ref7[0],
|
|
208
|
+
val = _ref7[1];
|
|
209
|
+
return [name, val];
|
|
210
|
+
}));
|
|
211
|
+
setInternalFormData(function (prev) {
|
|
212
|
+
var merged = _objectSpread(_objectSpread({}, prev), patch);
|
|
213
|
+
formDataRef.current = merged;
|
|
214
|
+
if (validateOnChange) {
|
|
215
|
+
setErrors(function (prevErrors) {
|
|
216
|
+
var nextErrors = _objectSpread({}, prevErrors);
|
|
217
|
+
Object.keys(patch).forEach(function (name) {
|
|
218
|
+
var field = fields.find(function (f) {
|
|
219
|
+
return f.name === name;
|
|
220
|
+
});
|
|
221
|
+
if (field) nextErrors[name] = validateField(field, patch[name], merged) || undefined;
|
|
222
|
+
});
|
|
223
|
+
return nextErrors;
|
|
125
224
|
});
|
|
126
|
-
return toReturn;
|
|
127
225
|
}
|
|
128
|
-
return
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
_defineProperty(_this, "renderContent", function () {
|
|
132
|
-
var _this$props = _this.props,
|
|
133
|
-
divStyle = _this$props.divStyle,
|
|
134
|
-
formStyle = _this$props.formStyle,
|
|
135
|
-
_this$props$haveSaveB = _this$props.haveSaveButton,
|
|
136
|
-
haveSaveButton = _this$props$haveSaveB === void 0 ? true : _this$props$haveSaveB,
|
|
137
|
-
handleSubmit = _this$props.handleSubmit,
|
|
138
|
-
_this$props$splitForm = _this$props.splitForm,
|
|
139
|
-
splitForm = _this$props$splitForm === void 0 ? false : _this$props$splitForm,
|
|
140
|
-
splitField = _this$props.splitField,
|
|
141
|
-
splitGroup = _this$props.splitGroup;
|
|
142
|
-
var sortedFields = _this.state.sortedFields;
|
|
143
|
-
|
|
144
|
-
// Group fields by their group name or 'ungrouped'
|
|
145
|
-
var groupedFields = {};
|
|
146
|
-
sortedFields.forEach(function (field) {
|
|
147
|
-
var group = field.group || 'ungrouped';
|
|
148
|
-
if (!groupedFields[group]) groupedFields[group] = [];
|
|
149
|
-
groupedFields[group].push(field);
|
|
226
|
+
return merged;
|
|
150
227
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
formStyle = formStyle || {
|
|
155
|
-
margin: 'auto'
|
|
156
|
-
};
|
|
228
|
+
}
|
|
229
|
+
setSortedFields(sortFieldsFn(fields));
|
|
230
|
+
}, [fields]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
157
231
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
232
|
+
// #region Validation
|
|
233
|
+
var validateField = (0, _react.useCallback)(function (field, value, currentFormData) {
|
|
234
|
+
if (['hr', 'label', 'component', 'accordion'].includes(field.type)) return null;
|
|
235
|
+
var errs = [];
|
|
236
|
+
if (field.required) {
|
|
237
|
+
var empty = value === undefined || value === null || value === '' || Array.isArray(value) && value.length === 0;
|
|
238
|
+
if (empty) errs.push(field.errorMessage || "".concat(typeof field.label === 'string' && field.label || field.displayName || field.name, " is required"));
|
|
239
|
+
}
|
|
240
|
+
if (field.type === 'email' && value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) errs.push(field.errorMessage || 'Invalid email format');
|
|
241
|
+
if (field.minLength && value && value.length < field.minLength) errs.push(field.errorMessage || "Minimum ".concat(field.minLength, " characters required"));
|
|
242
|
+
if (field.maxLength && value && value.length > field.maxLength) errs.push(field.errorMessage || "Maximum ".concat(field.maxLength, " characters allowed"));
|
|
243
|
+
if (field.min !== undefined && value !== '' && Number(value) < field.min) errs.push(field.errorMessage || "Minimum value is ".concat(field.min));
|
|
244
|
+
if (field.max !== undefined && value !== '' && Number(value) > field.max) errs.push(field.errorMessage || "Maximum value is ".concat(field.max));
|
|
245
|
+
if (typeof field.validate === 'function') {
|
|
246
|
+
var custom = field.validate(value, currentFormData || internalFormData);
|
|
247
|
+
if (custom) errs.push(custom);
|
|
248
|
+
}
|
|
249
|
+
return errs.length ? errs[0] : null;
|
|
250
|
+
}, [internalFormData]);
|
|
251
|
+
var validateForm = (0, _react.useCallback)(function () {
|
|
252
|
+
if (!validateOnSubmit) return true;
|
|
253
|
+
var newErrors = {};
|
|
254
|
+
var isValid = true;
|
|
255
|
+
fields.forEach(function (field) {
|
|
256
|
+
var hidden = typeof field.hide === 'function' ? field.hide(internalFormData, field) : field.hide;
|
|
257
|
+
if (field.name && !hidden) {
|
|
258
|
+
var _internalFormData$fie;
|
|
259
|
+
var err = validateField(field, (_internalFormData$fie = internalFormData[field.name]) !== null && _internalFormData$fie !== void 0 ? _internalFormData$fie : field.value, internalFormData);
|
|
260
|
+
if (err) {
|
|
261
|
+
newErrors[field.name] = err;
|
|
262
|
+
isValid = false;
|
|
168
263
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
setErrors(newErrors);
|
|
267
|
+
return isValid;
|
|
268
|
+
}, [fields, internalFormData, validateField, validateOnSubmit]);
|
|
174
269
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});
|
|
185
|
-
};
|
|
270
|
+
// #region Field handlers
|
|
271
|
+
var handleFieldChange = (0, _react.useCallback)(function (name, value, field) {
|
|
272
|
+
var _field$onChange;
|
|
273
|
+
var next = _objectSpread(_objectSpread({}, formDataRef.current), {}, _defineProperty({}, name, value));
|
|
274
|
+
formDataRef.current = next;
|
|
275
|
+
setInternalFormData(next);
|
|
276
|
+
if (validateOnChange) {
|
|
277
|
+
var err = validateField(field, value, next);
|
|
278
|
+
setErrors(function (e) {
|
|
279
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, err || undefined));
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
onDataChange === null || onDataChange === void 0 || onDataChange(next);
|
|
283
|
+
field === null || field === void 0 || (_field$onChange = field.onChange) === null || _field$onChange === void 0 || _field$onChange.call(field, value, next);
|
|
284
|
+
}, [validateOnChange, validateField, onDataChange]);
|
|
186
285
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
286
|
+
/** onChange(name, value) */
|
|
287
|
+
var fieldHandler = (0, _react.useCallback)(function (field) {
|
|
288
|
+
return function (name, value) {
|
|
289
|
+
handleFieldChange(name, value, field);
|
|
290
|
+
onFieldChange === null || onFieldChange === void 0 || onFieldChange({
|
|
291
|
+
name: name,
|
|
292
|
+
value: value
|
|
293
|
+
});
|
|
294
|
+
};
|
|
295
|
+
}, [handleFieldChange, onFieldChange]);
|
|
192
296
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
297
|
+
/**
|
|
298
|
+
* date / datetime / time / year fields.
|
|
299
|
+
* Datetime calls onChange(momentObj | string, name) — we normalise to a
|
|
300
|
+
* formatted string before storing so the value is always serialisable.
|
|
301
|
+
*
|
|
302
|
+
* Stored value format:
|
|
303
|
+
* type="date" → "DD/MM/YYYY"
|
|
304
|
+
* type="datetime" → "DD/MM/YYYY HH:mm"
|
|
305
|
+
* type="time" → "HH:mm"
|
|
306
|
+
* type="year" → "YYYY"
|
|
307
|
+
*/
|
|
308
|
+
var dateFieldHandler = (0, _react.useCallback)(function (field) {
|
|
309
|
+
return function (momentOrString, name) {
|
|
310
|
+
var scalar = momentOrString;
|
|
311
|
+
if (momentOrString && typeof momentOrString.format === "function") {
|
|
312
|
+
switch (field.type) {
|
|
313
|
+
case "year":
|
|
314
|
+
scalar = momentOrString.format("YYYY");
|
|
315
|
+
break;
|
|
316
|
+
case "time":
|
|
317
|
+
scalar = momentOrString.format("HH:mm");
|
|
318
|
+
break;
|
|
319
|
+
case "datetime":
|
|
320
|
+
scalar = momentOrString.format("DD/MM/YYYY HH:mm");
|
|
321
|
+
break;
|
|
322
|
+
default:
|
|
323
|
+
scalar = momentOrString.format("DD/MM/YYYY");
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
handleFieldChange(name, scalar, field);
|
|
327
|
+
onFieldChange === null || onFieldChange === void 0 || onFieldChange({
|
|
328
|
+
name: name,
|
|
329
|
+
value: scalar
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
}, [handleFieldChange, onFieldChange]);
|
|
212
333
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
334
|
+
// ── Form submit ─────────────────────────────────────────────────────────────
|
|
335
|
+
var onFormSubmit = (0, _react.useCallback)(/*#__PURE__*/function () {
|
|
336
|
+
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
|
|
337
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
338
|
+
while (1) switch (_context.prev = _context.next) {
|
|
339
|
+
case 0:
|
|
340
|
+
e.preventDefault();
|
|
341
|
+
if (validateForm()) {
|
|
342
|
+
_context.next = 3;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
return _context.abrupt("return");
|
|
346
|
+
case 3:
|
|
347
|
+
if (!handleSubmit) {
|
|
348
|
+
_context.next = 6;
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
handleSubmit(e);
|
|
352
|
+
return _context.abrupt("return");
|
|
353
|
+
case 6:
|
|
354
|
+
if (onSubmit) {
|
|
355
|
+
_context.next = 8;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
return _context.abrupt("return");
|
|
359
|
+
case 8:
|
|
360
|
+
setIsSubmitting(true);
|
|
361
|
+
_context.prev = 9;
|
|
362
|
+
_context.next = 12;
|
|
363
|
+
return onSubmit(internalFormData);
|
|
364
|
+
case 12:
|
|
365
|
+
_context.next = 17;
|
|
366
|
+
break;
|
|
367
|
+
case 14:
|
|
368
|
+
_context.prev = 14;
|
|
369
|
+
_context.t0 = _context["catch"](9);
|
|
370
|
+
console.error('GenericForm submission error:', _context.t0);
|
|
371
|
+
case 17:
|
|
372
|
+
_context.prev = 17;
|
|
373
|
+
setIsSubmitting(false);
|
|
374
|
+
return _context.finish(17);
|
|
375
|
+
case 20:
|
|
376
|
+
case "end":
|
|
377
|
+
return _context.stop();
|
|
236
378
|
}
|
|
379
|
+
}, _callee, null, [[9, 14, 17, 20]]);
|
|
380
|
+
}));
|
|
381
|
+
return function (_x) {
|
|
382
|
+
return _ref8.apply(this, arguments);
|
|
383
|
+
};
|
|
384
|
+
}(), [validateForm, handleSubmit, onSubmit, internalFormData]);
|
|
237
385
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
className: "form-columns"
|
|
246
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
247
|
-
className: "form-column"
|
|
248
|
-
}, Object.keys(groupedFields).map(function (group) {
|
|
249
|
-
var fields = groupedFields[group];
|
|
250
|
-
var _splitByField = splitByField(fields),
|
|
251
|
-
left = _splitByField.left;
|
|
252
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
253
|
-
key: group
|
|
254
|
-
}, group !== 'ungrouped' && /*#__PURE__*/_react["default"].createElement("h2", null, group), renderFields(left));
|
|
255
|
-
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
256
|
-
className: "form-column"
|
|
257
|
-
}, Object.keys(groupedFields).map(function (group) {
|
|
258
|
-
var fields = groupedFields[group];
|
|
259
|
-
var _splitByField2 = splitByField(fields),
|
|
260
|
-
right = _splitByField2.right;
|
|
261
|
-
if (right.length === 0) return null;
|
|
262
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
263
|
-
key: group
|
|
264
|
-
}, group !== 'ungrouped' && /*#__PURE__*/_react["default"].createElement("h2", null, group), renderFields(right));
|
|
265
|
-
})))));
|
|
386
|
+
// ── JSON validation ─────────────────────────────────────────────────────────
|
|
387
|
+
var validateJsonField = (0, _react.useCallback)(function (name, rawValue, isMultipleMode, skipTypeCheck, field) {
|
|
388
|
+
var parseStrict = function parseStrict(str) {
|
|
389
|
+
try {
|
|
390
|
+
return JSON.parse(str);
|
|
391
|
+
} catch (_unused) {
|
|
392
|
+
throw new Error(str.includes("'") ? "Use double quotes instead of single quotes" : 'Invalid JSON format');
|
|
266
393
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
394
|
+
};
|
|
395
|
+
var parsed;
|
|
396
|
+
try {
|
|
397
|
+
if (isMultipleMode) {
|
|
398
|
+
parsed = parseStrict(rawValue);
|
|
399
|
+
} else if (field.datatype === 'object') {
|
|
400
|
+
parsed = parseStrict(rawValue);
|
|
401
|
+
if (_typeof(parsed) !== 'object' || Array.isArray(parsed)) throw new Error('Expected an object');
|
|
402
|
+
} else if (field.datatype === 'number') {
|
|
403
|
+
var n = Number(rawValue);
|
|
404
|
+
if (Number.isNaN(n)) throw new Error('Expected a number');
|
|
405
|
+
parsed = n;
|
|
406
|
+
} else {
|
|
407
|
+
parsed = rawValue;
|
|
408
|
+
}
|
|
409
|
+
} catch (err) {
|
|
410
|
+
setErrors(function (e) {
|
|
411
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, err.message));
|
|
412
|
+
});
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
if (isMultipleMode && !Array.isArray(parsed)) {
|
|
416
|
+
setErrors(function (e) {
|
|
417
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, "Multiple mode requires a ".concat(field.datatype, " array")));
|
|
418
|
+
});
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
if (!skipTypeCheck && !isMultipleMode && field.datatype) {
|
|
422
|
+
var actual = Array.isArray(parsed) ? 'array' : _typeof(parsed);
|
|
423
|
+
if (actual !== field.datatype) {
|
|
424
|
+
setErrors(function (e) {
|
|
425
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, "Expected ".concat(field.datatype, " but got ").concat(actual)));
|
|
426
|
+
});
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
setErrors(function (e) {
|
|
431
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, undefined));
|
|
279
432
|
});
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
433
|
+
if (!field.storeAsString) setInternalFormData(function (prev) {
|
|
434
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, parsed));
|
|
435
|
+
});
|
|
436
|
+
}, []);
|
|
437
|
+
|
|
438
|
+
// #region RenderField
|
|
439
|
+
var renderField = (0, _react.useCallback)(function (field) {
|
|
440
|
+
var _internalFormData$fie2;
|
|
441
|
+
var isHidden = typeof field.hide === 'function' ? field.hide(internalFormData, field) : field.hide;
|
|
442
|
+
if (isHidden) return null;
|
|
443
|
+
var error = errors[field.name];
|
|
444
|
+
var value = (_internalFormData$fie2 = internalFormData[field.name]) !== null && _internalFormData$fie2 !== void 0 ? _internalFormData$fie2 : field.value;
|
|
445
|
+
|
|
446
|
+
// Props shared by all interactive fields
|
|
447
|
+
var cp = {
|
|
448
|
+
name: field.name,
|
|
449
|
+
displayName: field.label || field.displayName,
|
|
450
|
+
disabled: field.disabled,
|
|
451
|
+
required: field.required
|
|
452
|
+
};
|
|
453
|
+
var sp = {
|
|
454
|
+
mainDivStyle: field.style,
|
|
455
|
+
labelStyle: field.labelStyle,
|
|
456
|
+
spanStyle: field.spanStyle,
|
|
457
|
+
inputStyle: field.inputStyle,
|
|
458
|
+
tooltipStyle: field.tooltipStyle
|
|
459
|
+
};
|
|
460
|
+
var fp = {
|
|
461
|
+
error: error,
|
|
462
|
+
tooltip: field.tooltip,
|
|
463
|
+
showHelp: field.showHelp,
|
|
464
|
+
helpText: field.helpText
|
|
465
|
+
};
|
|
466
|
+
switch (field.type) {
|
|
467
|
+
// Abstract
|
|
468
|
+
case 'hr':
|
|
469
|
+
return /*#__PURE__*/React.createElement(_CustomSeparator["default"], {
|
|
470
|
+
key: field.name || "sep-".concat(Math.random()),
|
|
471
|
+
mainDivStyle: field.style
|
|
472
|
+
});
|
|
473
|
+
case 'label':
|
|
474
|
+
return /*#__PURE__*/React.createElement(_CustomLabel["default"], _extends({
|
|
475
|
+
key: field.name
|
|
476
|
+
}, cp, {
|
|
477
|
+
mainDivStyle: field.style,
|
|
478
|
+
labelStyle: field.labelStyle
|
|
479
|
+
}));
|
|
480
|
+
|
|
481
|
+
// Simple
|
|
482
|
+
case 'string':
|
|
483
|
+
case 'text':
|
|
484
|
+
case 'email':
|
|
485
|
+
case 'password':
|
|
486
|
+
return /*#__PURE__*/React.createElement(_CustomInput["default"], _extends({
|
|
487
|
+
key: field.name
|
|
488
|
+
}, cp, sp, fp, {
|
|
489
|
+
value: value,
|
|
490
|
+
type: field.type === 'email' ? 'email' : field.type === 'password' ? 'password' : 'text',
|
|
491
|
+
placeholder: field.placeholder,
|
|
492
|
+
onChange: fieldHandler(field),
|
|
318
493
|
inputStyle: field.inputStyle,
|
|
319
494
|
className: field.className
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
495
|
+
}));
|
|
496
|
+
case 'int':
|
|
497
|
+
case 'number':
|
|
498
|
+
return /*#__PURE__*/React.createElement(_CustomNumberInput["default"], _extends({
|
|
499
|
+
key: field.name
|
|
500
|
+
}, cp, sp, fp, {
|
|
501
|
+
value: value,
|
|
502
|
+
placeholder: field.placeholder,
|
|
503
|
+
min: field.min,
|
|
504
|
+
max: field.max,
|
|
505
|
+
step: field.step,
|
|
506
|
+
onChange: fieldHandler(field)
|
|
507
|
+
}));
|
|
508
|
+
case 'textArea':
|
|
509
|
+
return /*#__PURE__*/React.createElement(_CustomTextArea["default"], _extends({
|
|
510
|
+
key: field.name
|
|
511
|
+
}, cp, sp, fp, {
|
|
512
|
+
value: value,
|
|
513
|
+
placeholder: field.placeholder,
|
|
514
|
+
rows: field.rows,
|
|
515
|
+
height: field.height,
|
|
516
|
+
onChange: fieldHandler(field)
|
|
517
|
+
}));
|
|
518
|
+
|
|
519
|
+
// Date
|
|
520
|
+
case 'date':
|
|
521
|
+
case 'datetime':
|
|
522
|
+
case 'time':
|
|
523
|
+
case 'year':
|
|
524
|
+
return /*#__PURE__*/React.createElement(_CustomDatePicker["default"], _extends({
|
|
525
|
+
key: field.name
|
|
526
|
+
}, cp, sp, fp, {
|
|
527
|
+
value: value,
|
|
528
|
+
placeholder: field.placeholder,
|
|
529
|
+
onChange: dateFieldHandler(field),
|
|
530
|
+
dateFormat: field.type === 'time' ? false : field.type === 'year' ? 'YYYY' : 'DD/MM/YYYY',
|
|
531
|
+
timeFormat: field.type === 'datetime' || field.type === 'time' ? 'HH:mm' : false
|
|
532
|
+
}));
|
|
533
|
+
|
|
534
|
+
// Option
|
|
535
|
+
case 'select':
|
|
536
|
+
return /*#__PURE__*/React.createElement(_CustomDropdown["default"], _extends({
|
|
537
|
+
key: field.name
|
|
538
|
+
}, cp, sp, fp, {
|
|
539
|
+
value: value,
|
|
540
|
+
options: field.options,
|
|
541
|
+
placeholder: field.placeholder,
|
|
542
|
+
multiple: field.multiple,
|
|
543
|
+
onChange: function onChange(name, val, fullOption) {
|
|
544
|
+
handleFieldChange(name, val, field);
|
|
545
|
+
onFieldChange === null || onFieldChange === void 0 || onFieldChange({
|
|
546
|
+
name: name,
|
|
547
|
+
value: val,
|
|
548
|
+
option: fullOption
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}));
|
|
552
|
+
case 'multipleDropdown':
|
|
553
|
+
return /*#__PURE__*/React.createElement(_CustomMultiDropdown["default"], _extends({
|
|
554
|
+
key: field.name
|
|
555
|
+
}, cp, sp, fp, {
|
|
556
|
+
value: value,
|
|
557
|
+
options: field.options,
|
|
558
|
+
placeholder: field.placeholder,
|
|
559
|
+
onChange: fieldHandler(field)
|
|
560
|
+
}));
|
|
561
|
+
case 'search':
|
|
562
|
+
return /*#__PURE__*/React.createElement(_CustomSearch["default"], _extends({
|
|
563
|
+
key: field.name
|
|
564
|
+
}, cp, sp, fp, {
|
|
565
|
+
value: value,
|
|
566
|
+
options: field.options,
|
|
567
|
+
placeholder: field.placeholder,
|
|
568
|
+
isLoading: field.isLoading,
|
|
340
569
|
onChange: handleSearchChange,
|
|
341
570
|
handleResultSelect: handleResultSelect,
|
|
342
|
-
resultRenderer: resultRenderer
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
571
|
+
resultRenderer: resultRenderer
|
|
572
|
+
}));
|
|
573
|
+
case 'accordion':
|
|
574
|
+
return /*#__PURE__*/React.createElement(_CustomAccordion["default"], {
|
|
575
|
+
key: field.name,
|
|
576
|
+
name: field.name,
|
|
577
|
+
sections: field.sections,
|
|
578
|
+
defaultOpen: field.defaultOpen,
|
|
579
|
+
activeAllIndex: field.activeAllIndex,
|
|
580
|
+
mainDivStyle: field.style,
|
|
581
|
+
inputStyle: field.inputStyle
|
|
582
|
+
});
|
|
583
|
+
case 'toggle':
|
|
584
|
+
return /*#__PURE__*/React.createElement(_CustomToggle["default"], _extends({
|
|
585
|
+
key: field.name
|
|
586
|
+
}, cp, sp, fp, {
|
|
587
|
+
value: !!value,
|
|
588
|
+
onChange: fieldHandler(field)
|
|
589
|
+
}));
|
|
590
|
+
case 'checkbox':
|
|
591
|
+
return /*#__PURE__*/React.createElement(_CustomCheckbox["default"], _extends({
|
|
592
|
+
key: field.name
|
|
593
|
+
}, cp, sp, fp, {
|
|
594
|
+
checked: !!value,
|
|
595
|
+
onChange: fieldHandler(field),
|
|
596
|
+
onOptionChange: field.onOptionChange
|
|
597
|
+
}));
|
|
598
|
+
case 'checkboxGroup':
|
|
599
|
+
return /*#__PURE__*/React.createElement(_CustomCheckboxGroup["default"], _extends({
|
|
600
|
+
key: field.name
|
|
601
|
+
}, cp, sp, fp, {
|
|
602
|
+
checked: value !== null && value !== void 0 ? value : [],
|
|
369
603
|
options: field.options,
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
604
|
+
onChange: fieldHandler(field),
|
|
605
|
+
onOptionChange: field.onOptionChange
|
|
606
|
+
}));
|
|
607
|
+
case 'radioGroup':
|
|
608
|
+
case 'radioGroupInline':
|
|
609
|
+
return /*#__PURE__*/React.createElement(_CustomRadioGroup["default"], _extends({
|
|
610
|
+
key: field.name
|
|
611
|
+
}, cp, sp, fp, {
|
|
612
|
+
value: value,
|
|
376
613
|
options: field.options,
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
614
|
+
inline: field.type === 'radioGroupInline',
|
|
615
|
+
onChange: fieldHandler(field),
|
|
616
|
+
onOptionChange: field.onOptionChange,
|
|
617
|
+
formData: internalFormData
|
|
618
|
+
}));
|
|
619
|
+
|
|
620
|
+
// Other
|
|
621
|
+
case 'component':
|
|
622
|
+
return /*#__PURE__*/React.createElement(_CustomComponent["default"], _extends({
|
|
623
|
+
key: field.name || "cmp-".concat(Math.random())
|
|
624
|
+
}, cp, sp, {
|
|
380
625
|
component: field.component
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
626
|
+
}));
|
|
627
|
+
case 'json':
|
|
628
|
+
return /*#__PURE__*/React.createElement(_CustomJson["default"], _extends({
|
|
629
|
+
key: field.name
|
|
630
|
+
}, cp, sp, fp, {
|
|
631
|
+
value: value,
|
|
632
|
+
datatype: field.datatype,
|
|
633
|
+
allowModeSwitch: field.allowModeSwitch,
|
|
634
|
+
storeAsString: field.storeAsString,
|
|
635
|
+
rows: field.rows,
|
|
636
|
+
onChange: function onChange(name, raw, isMulti) {
|
|
637
|
+
setInternalFormData(function (prev) {
|
|
638
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, raw));
|
|
639
|
+
});
|
|
640
|
+
setErrors(function (e) {
|
|
641
|
+
return _objectSpread(_objectSpread({}, e), {}, _defineProperty({}, name, undefined));
|
|
642
|
+
});
|
|
643
|
+
if (raw.trim()) validateJsonField(name, raw, isMulti, true, field);
|
|
644
|
+
},
|
|
645
|
+
onValidate: function onValidate(name, raw, isMulti) {
|
|
646
|
+
return validateJsonField(name, raw, isMulti, false, field);
|
|
647
|
+
}
|
|
648
|
+
}));
|
|
649
|
+
default:
|
|
650
|
+
return /*#__PURE__*/React.createElement(_CustomInput["default"], _extends({
|
|
651
|
+
key: field.name
|
|
652
|
+
}, cp, sp, fp, {
|
|
653
|
+
value: value,
|
|
654
|
+
type: "text",
|
|
655
|
+
placeholder: field.placeholder,
|
|
656
|
+
onChange: fieldHandler(field),
|
|
657
|
+
inputStyle: field.inputStyle,
|
|
658
|
+
className: field.className
|
|
659
|
+
}));
|
|
660
|
+
}
|
|
661
|
+
}, [
|
|
662
|
+
// eslint-disable-line react-hooks/exhaustive-deps
|
|
663
|
+
internalFormData, errors, fieldHandler, fieldHandler, dateFieldHandler, handleSearchChange, handleResultSelect, resultRenderer, validateJsonField]);
|
|
664
|
+
|
|
665
|
+
// #region Grouped fields map
|
|
666
|
+
var groupedFields = (0, _react.useMemo)(function () {
|
|
667
|
+
var map = {};
|
|
668
|
+
sortedFields.forEach(function (field) {
|
|
669
|
+
var g = field.group || 'ungrouped';
|
|
670
|
+
if (!map[g]) map[g] = [];
|
|
671
|
+
map[g].push(field);
|
|
386
672
|
});
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
673
|
+
return map;
|
|
674
|
+
}, [sortedFields]);
|
|
675
|
+
var renderFields = function renderFields(fieldList) {
|
|
676
|
+
return groupByInline(fieldList).map(function (group, idx) {
|
|
677
|
+
return group.type === 'inline' ? /*#__PURE__*/React.createElement("div", {
|
|
678
|
+
key: idx,
|
|
679
|
+
className: "ufg-field-row"
|
|
680
|
+
}, group.fields.map(function (_ref9) {
|
|
681
|
+
var field = _ref9.field;
|
|
682
|
+
return renderField(field);
|
|
683
|
+
})) : renderField(group.field);
|
|
684
|
+
});
|
|
685
|
+
};
|
|
686
|
+
var renderGroupSection = function renderGroupSection(g, fieldList) {
|
|
687
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
688
|
+
key: g,
|
|
689
|
+
className: "ufg-form",
|
|
690
|
+
style: formStyle
|
|
691
|
+
}, g !== 'ungrouped' && /*#__PURE__*/React.createElement("h2", null, g), renderFields(fieldList));
|
|
692
|
+
};
|
|
693
|
+
var splitByField = function splitByField(fieldList) {
|
|
694
|
+
var idx = fieldList.findIndex(function (f) {
|
|
695
|
+
return f.name === splitField;
|
|
696
|
+
});
|
|
697
|
+
if (idx === -1) return {
|
|
698
|
+
left: fieldList,
|
|
699
|
+
right: []
|
|
407
700
|
};
|
|
408
|
-
return
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
value: function componentDidUpdate(prevProps) {
|
|
420
|
-
var _this2 = this;
|
|
421
|
-
var fields = this.props.fields;
|
|
422
|
-
if (!(0, _shallowequal["default"])(fields, prevProps.fields)) {
|
|
423
|
-
fields.forEach(function (element) {
|
|
424
|
-
if (element.type === 'list') {
|
|
425
|
-
_this2.reRenderDropdown(element, true);
|
|
426
|
-
}
|
|
701
|
+
return {
|
|
702
|
+
left: fieldList.slice(0, idx + 1),
|
|
703
|
+
right: fieldList.slice(idx + 1)
|
|
704
|
+
};
|
|
705
|
+
};
|
|
706
|
+
var buildContent = function buildContent() {
|
|
707
|
+
var groups = Object.keys(groupedFields);
|
|
708
|
+
if (splitForm && splitField && splitGroup) {
|
|
709
|
+
var splitIdx = groups.findIndex(function (g) {
|
|
710
|
+
return groupedFields[g].some(function (f) {
|
|
711
|
+
return f.name === splitField;
|
|
427
712
|
});
|
|
428
|
-
|
|
429
|
-
|
|
713
|
+
});
|
|
714
|
+
if (splitIdx === -1) return groups.map(function (g) {
|
|
715
|
+
return renderGroupSection(g, groupedFields[g]);
|
|
716
|
+
});
|
|
717
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
718
|
+
className: "ufg-form-columns"
|
|
719
|
+
}, /*#__PURE__*/React.createElement("div", null, groups.slice(0, splitIdx + 1).map(function (g) {
|
|
720
|
+
return renderGroupSection(g, groupedFields[g]);
|
|
721
|
+
})), /*#__PURE__*/React.createElement("div", null, groups.slice(splitIdx + 1).map(function (g) {
|
|
722
|
+
return renderGroupSection(g, groupedFields[g]);
|
|
723
|
+
})));
|
|
430
724
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
725
|
+
if (splitForm && splitField) {
|
|
726
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
727
|
+
className: "ufg-form-columns"
|
|
728
|
+
}, /*#__PURE__*/React.createElement("div", null, groups.map(function (g) {
|
|
729
|
+
return renderGroupSection(g, splitByField(groupedFields[g]).left);
|
|
730
|
+
})), /*#__PURE__*/React.createElement("div", null, groups.map(function (g) {
|
|
731
|
+
var _splitByField = splitByField(groupedFields[g]),
|
|
732
|
+
right = _splitByField.right;
|
|
733
|
+
return right.length ? renderGroupSection(g, right) : null;
|
|
734
|
+
})));
|
|
435
735
|
}
|
|
436
|
-
|
|
437
|
-
|
|
736
|
+
return groups.map(function (g) {
|
|
737
|
+
return renderGroupSection(g, groupedFields[g]);
|
|
738
|
+
});
|
|
739
|
+
};
|
|
740
|
+
|
|
741
|
+
// #endregion
|
|
742
|
+
// #region Actions bar
|
|
743
|
+
var hasErrors = Object.values(errors).some(Boolean);
|
|
744
|
+
var actionsBar = /*#__PURE__*/React.createElement("div", {
|
|
745
|
+
className: "ufg-actions"
|
|
746
|
+
}, customActions.map(function (action, idx) {
|
|
747
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
748
|
+
key: idx,
|
|
749
|
+
type: "button",
|
|
750
|
+
className: "ufg-button ".concat(action.className || 'ufg-button-secondary'),
|
|
751
|
+
onClick: action.onClick,
|
|
752
|
+
disabled: !!action.disabled,
|
|
753
|
+
style: action.style
|
|
754
|
+
}, action.icon, action.label);
|
|
755
|
+
}), showSubmit && haveSaveButton && /*#__PURE__*/React.createElement("button", {
|
|
756
|
+
type: "submit",
|
|
757
|
+
className: "ufg-button ufg-button-primary",
|
|
758
|
+
disabled: isSubmitting || hasErrors
|
|
759
|
+
}, isSubmitting ? 'Saving…' : submitText), onCancel && showCancel && /*#__PURE__*/React.createElement("button", {
|
|
760
|
+
type: "button",
|
|
761
|
+
className: "ufg-button ufg-button-secondary",
|
|
762
|
+
onClick: onCancel
|
|
763
|
+
}, cancelText));
|
|
764
|
+
|
|
765
|
+
// #endregion
|
|
766
|
+
// #region Form JSX
|
|
767
|
+
var formJSX = /*#__PURE__*/React.createElement("form", {
|
|
768
|
+
className: "ufg-form",
|
|
769
|
+
style: formStyle || {
|
|
770
|
+
margin: 'auto'
|
|
771
|
+
},
|
|
772
|
+
onSubmit: onFormSubmit
|
|
773
|
+
}, buildContent(), actionsBar);
|
|
774
|
+
if (enableModal) {
|
|
775
|
+
return /*#__PURE__*/React.createElement(_reactBootstrap.Modal, {
|
|
776
|
+
show: modalShow,
|
|
777
|
+
onHide: onCancel,
|
|
778
|
+
size: modalSize,
|
|
779
|
+
style: containerStyle
|
|
780
|
+
}, /*#__PURE__*/React.createElement(_reactBootstrap.Modal.Header, {
|
|
781
|
+
closeButton: true
|
|
782
|
+
}, /*#__PURE__*/React.createElement(_reactBootstrap.Modal.Title, null, titleIcon, " ", /*#__PURE__*/React.createElement("span", null, title))), /*#__PURE__*/React.createElement(_reactBootstrap.Modal.Body, null, formJSX));
|
|
783
|
+
}
|
|
784
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
785
|
+
className: disableDefaultContainer ? '' : 'ufg-container',
|
|
786
|
+
style: containerStyle
|
|
787
|
+
}, title && /*#__PURE__*/React.createElement("div", {
|
|
788
|
+
className: "ufg-title"
|
|
789
|
+
}, titleIcon, /*#__PURE__*/React.createElement("span", null, title)), formJSX);
|
|
790
|
+
};
|
|
791
|
+
var _default = exports["default"] = GenericForm;
|