@insticc/genericform 2.1.0 → 2.1.2

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.
@@ -65,6 +65,8 @@ var CustomCheckboxGroup = function CustomCheckboxGroup(_ref2) {
65
65
  defaultCollapsed = _ref2$defaultCollapse === void 0 ? true : _ref2$defaultCollapse,
66
66
  _ref2$enableParent = _ref2.enableParent,
67
67
  enableParent = _ref2$enableParent === void 0 ? false : _ref2$enableParent,
68
+ _ref2$parentCheckAll = _ref2.parentCheckAll,
69
+ parentCheckAll = _ref2$parentCheckAll === void 0 ? true : _ref2$parentCheckAll,
68
70
  error = _ref2.error,
69
71
  _ref2$tooltip = _ref2.tooltip,
70
72
  tooltip = _ref2$tooltip === void 0 ? "" : _ref2$tooltip,
@@ -119,7 +121,7 @@ var CustomCheckboxGroup = function CustomCheckboxGroup(_ref2) {
119
121
  var handleParentChange = (0, _react.useCallback)(function (opt, state) {
120
122
  var parentVal = opt.name || opt.value;
121
123
  var children = getChildValues(opt);
122
- var data = state ? _toConsumableArray(new Set([].concat(_toConsumableArray(checked), [parentVal]))) : checked.filter(function (v) {
124
+ var data = state ? _toConsumableArray(new Set(parentCheckAll ? [].concat(_toConsumableArray(checked), [parentVal, children]) : [].concat(_toConsumableArray(checked), [parentVal]))) : checked.filter(function (v) {
123
125
  return v !== parentVal && !children.includes(v);
124
126
  });
125
127
  onChange === null || onChange === void 0 || onChange(name, data);
@@ -244,6 +246,7 @@ CustomCheckboxGroup.propTypes = {
244
246
  collapsible: _propTypes["default"].bool,
245
247
  defaultCollapsed: _propTypes["default"].bool,
246
248
  enableParent: _propTypes["default"].bool,
249
+ parentCheckAll: _propTypes["default"].bool,
247
250
  error: _propTypes["default"].string,
248
251
  tooltip: _propTypes["default"].string,
249
252
  mainDivStyle: _propTypes["default"].object,
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ 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); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _react = require("react");
10
+ var _defaults = require("./defaults");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
13
+ 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; }
14
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
15
+ 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); }
16
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
+ 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."); }
18
+ 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; } }
19
+ 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; }
20
+ 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; } }
21
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
+ var CustomInputAdd = function CustomInputAdd(_ref) {
23
+ var _ref$handleAdd = _ref.handleAdd,
24
+ handleAdd = _ref$handleAdd === void 0 ? function () {} : _ref$handleAdd,
25
+ _ref$addText = _ref.addText,
26
+ addText = _ref$addText === void 0 ? null : _ref$addText,
27
+ name = _ref.name,
28
+ label = _ref.label,
29
+ _ref$value = _ref.value,
30
+ value = _ref$value === void 0 ? "" : _ref$value,
31
+ _ref$type = _ref.type,
32
+ type = _ref$type === void 0 ? "text" : _ref$type,
33
+ _ref$disabled = _ref.disabled,
34
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
35
+ placeholder = _ref.placeholder,
36
+ error = _ref.error,
37
+ _ref$tooltip = _ref.tooltip,
38
+ tooltip = _ref$tooltip === void 0 ? "" : _ref$tooltip,
39
+ _ref$showHelp = _ref.showHelp,
40
+ showHelp = _ref$showHelp === void 0 ? false : _ref$showHelp,
41
+ _ref$helpText = _ref.helpText,
42
+ helpText = _ref$helpText === void 0 ? "" : _ref$helpText,
43
+ className = _ref.className,
44
+ _ref$mainDivStyle = _ref.mainDivStyle,
45
+ mainDivStyle = _ref$mainDivStyle === void 0 ? {} : _ref$mainDivStyle,
46
+ _ref$labelStyle = _ref.labelStyle,
47
+ labelStyle = _ref$labelStyle === void 0 ? {} : _ref$labelStyle,
48
+ _ref$spanStyle = _ref.spanStyle,
49
+ spanStyle = _ref$spanStyle === void 0 ? {} : _ref$spanStyle,
50
+ _ref$inputStyle = _ref.inputStyle,
51
+ inputStyle = _ref$inputStyle === void 0 ? {} : _ref$inputStyle,
52
+ _ref$tooltipStyle = _ref.tooltipStyle,
53
+ tooltipStyle = _ref$tooltipStyle === void 0 ? {} : _ref$tooltipStyle;
54
+ var _useState = (0, _react.useState)(value),
55
+ _useState2 = _slicedToArray(_useState, 2),
56
+ inputValue = _useState2[0],
57
+ setInputValue = _useState2[1];
58
+ var onAdd = function onAdd() {
59
+ if (!inputValue.trim()) return;
60
+ handleAdd === null || handleAdd === void 0 || handleAdd(inputValue);
61
+ setInputValue('');
62
+ };
63
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
64
+ className: "ufg-field-group",
65
+ id: name,
66
+ style: mainDivStyle,
67
+ children: [(0, _defaults.labelJsx)({
68
+ name: name,
69
+ labelStyle: labelStyle,
70
+ label: label,
71
+ spanStyle: spanStyle,
72
+ showHelp: showHelp,
73
+ helpText: helpText
74
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
75
+ className: "ufg-field-group",
76
+ style: {
77
+ flexDirection: 'row'
78
+ },
79
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
80
+ id: "form-input-".concat(name),
81
+ type: type,
82
+ name: name,
83
+ value: inputValue,
84
+ placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : label,
85
+ disabled: disabled,
86
+ className: "ufg-input".concat(error ? " error" : "").concat(className ? " ".concat(className) : ""),
87
+ style: inputStyle,
88
+ onChange: function onChange(e) {
89
+ return setInputValue(e.target.value);
90
+ },
91
+ onKeyDown: function onKeyDown(e) {
92
+ return e.key === 'Enter' && onAdd();
93
+ }
94
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
95
+ type: "button",
96
+ className: "ufg-button ufg-button-primary",
97
+ disabled: !inputValue.trim(),
98
+ onClick: onAdd,
99
+ children: addText || 'Add'
100
+ })]
101
+ }), (0, _defaults.tooltipJsx)(tooltip, tooltipStyle)]
102
+ });
103
+ };
104
+ CustomInputAdd.propTypes = _defineProperty(_defineProperty({
105
+ handleAdd: _propTypes["default"].func.isRequired,
106
+ addText: _propTypes["default"].string,
107
+ name: _propTypes["default"].string.isRequired,
108
+ label: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
109
+ value: _propTypes["default"].string,
110
+ type: _propTypes["default"].string,
111
+ disabled: _propTypes["default"].bool,
112
+ placeholder: _propTypes["default"].string,
113
+ error: _propTypes["default"].string,
114
+ tooltip: _propTypes["default"].string,
115
+ showHelp: _propTypes["default"].bool,
116
+ helpText: _propTypes["default"].string,
117
+ className: _propTypes["default"].string,
118
+ inputStyle: _propTypes["default"].object,
119
+ mainDivStyle: _propTypes["default"].object,
120
+ labelStyle: _propTypes["default"].object,
121
+ spanStyle: _propTypes["default"].object
122
+ }, "inputStyle", _propTypes["default"].object), "tooltipStyle", _propTypes["default"].object);
123
+ var _default = exports["default"] = CustomInputAdd;
@@ -15,45 +15,18 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
15
15
  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; }
16
16
  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; } }
17
17
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
18
- var COUNTRY_CODES = [{
19
- label: "🇵🇹 +351",
20
- value: "+351"
21
- }, {
22
- label: "🇪🇸 +34",
23
- value: "+34"
24
- }, {
25
- label: "🇬🇧 +44",
26
- value: "+44"
27
- }, {
28
- label: "🇺🇸 +1",
29
- value: "+1"
30
- }, {
31
- label: "🇫🇷 +33",
32
- value: "+33"
33
- }, {
34
- label: "🇩🇪 +49",
35
- value: "+49"
36
- }
37
- // ...
38
- ];
39
-
40
- /**
41
- * Mobile phone input with country code selector.
42
- * value format: "+351 916999999"
43
- * onChange(value, name) — same signature as other custom inputs.
44
- */
45
18
  var CustomMobilePhone = function CustomMobilePhone(_ref) {
46
19
  var onChange = _ref.onChange,
47
20
  name = _ref.name,
48
21
  label = _ref.label,
49
22
  _ref$value = _ref.value,
50
- value = _ref$value === void 0 ? "" : _ref$value,
23
+ externalValue = _ref$value === void 0 ? "" : _ref$value,
51
24
  _ref$disabled = _ref.disabled,
52
25
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
53
26
  _ref$required = _ref.required,
54
27
  required = _ref$required === void 0 ? false : _ref$required,
55
28
  _ref$placeholder = _ref.placeholder,
56
- placeholder = _ref$placeholder === void 0 ? "912 345 678" : _ref$placeholder,
29
+ placeholder = _ref$placeholder === void 0 ? "+351 912345678" : _ref$placeholder,
57
30
  error = _ref.error,
58
31
  _ref$tooltip = _ref.tooltip,
59
32
  tooltip = _ref$tooltip === void 0 ? "" : _ref$tooltip,
@@ -70,33 +43,33 @@ var CustomMobilePhone = function CustomMobilePhone(_ref) {
70
43
  _ref$inputStyle = _ref.inputStyle,
71
44
  inputStyle = _ref$inputStyle === void 0 ? {} : _ref$inputStyle,
72
45
  _ref$tooltipStyle = _ref.tooltipStyle,
73
- tooltipStyle = _ref$tooltipStyle === void 0 ? {} : _ref$tooltipStyle,
74
- _ref$countryCodes = _ref.countryCodes,
75
- countryCodes = _ref$countryCodes === void 0 ? COUNTRY_CODES : _ref$countryCodes,
76
- _ref$defaultCountryCo = _ref.defaultCountryCode,
77
- defaultCountryCode = _ref$defaultCountryCo === void 0 ? "+351" : _ref$defaultCountryCo;
78
- // Split stored value into prefix + local number
79
- var _ref2 = function () {
80
- if (!value) return [defaultCountryCode, ""];
81
- var found = countryCodes.find(function (c) {
82
- return value.startsWith(c.value);
83
- });
84
- if (found) return [found.value, value.slice(found.value.length)];
85
- return [defaultCountryCode, value];
86
- }(),
87
- _ref3 = _slicedToArray(_ref2, 2),
88
- prefix = _ref3[0],
89
- localNumber = _ref3[1];
90
- var handlePrefixChange = (0, _react.useCallback)(function (e) {
91
- return onChange === null || onChange === void 0 ? void 0 : onChange(name, "".concat(e.target.value).concat(localNumber));
92
- }, [onChange, name, localNumber]);
93
- var handleNumberChange = (0, _react.useCallback)(function (e) {
94
- var digits = e.target.value.replace(/[^\d]/g, "");
95
- onChange === null || onChange === void 0 || onChange(name, "".concat(prefix).concat(digits));
96
- }, [onChange, name, prefix]);
46
+ tooltipStyle = _ref$tooltipStyle === void 0 ? {} : _ref$tooltipStyle;
47
+ var _useState = (0, _react.useState)(externalValue),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ localValue = _useState2[0],
50
+ setLocalValue = _useState2[1];
51
+
52
+ // Sync with external value
53
+ (0, _react.useEffect)(function () {
54
+ setLocalValue(externalValue);
55
+ }, [externalValue]);
56
+ var handleChange = (0, _react.useCallback)(function (e) {
57
+ var rawValue = e.target.value;
58
+
59
+ // Auto-add "+" if user starts typing digits without it
60
+ var newValue = rawValue;
61
+ if (rawValue && !rawValue.startsWith('+')) {
62
+ var digits = rawValue.replace(/\D/g, '');
63
+ newValue = "+".concat(digits);
64
+ } else {
65
+ // Keep existing + and clean other characters
66
+ newValue = rawValue.replace(/[^\d+]/g, '');
67
+ }
68
+ setLocalValue(newValue);
69
+ onChange === null || onChange === void 0 || onChange(name, newValue);
70
+ }, [onChange, name]);
97
71
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
98
72
  className: "ufg-field-group",
99
- id: "form-telDiv-".concat(name),
100
73
  style: mainDivStyle,
101
74
  children: [(0, _defaults.labelJsx)({
102
75
  name: name,
@@ -106,37 +79,20 @@ var CustomMobilePhone = function CustomMobilePhone(_ref) {
106
79
  spanStyle: spanStyle,
107
80
  showHelp: showHelp,
108
81
  helpText: helpText
109
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
110
- style: {
111
- display: "flex",
112
- gap: "8px"
113
- },
114
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("select", {
115
- value: prefix,
116
- disabled: disabled,
117
- onChange: handlePrefixChange,
118
- className: "ufg-input".concat(error ? " error" : ""),
119
- style: {
120
- width: "110px",
121
- flexShrink: 0
122
- },
123
- children: countryCodes.map(function (c) {
124
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", {
125
- value: c.value,
126
- children: c.label
127
- }, c.value);
128
- })
129
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
130
- id: "form-input-".concat(name),
131
- type: "tel",
132
- value: localNumber,
133
- disabled: disabled,
134
- required: required,
135
- placeholder: placeholder,
136
- onChange: handleNumberChange,
137
- className: "ufg-input".concat(error ? " error" : ""),
138
- style: inputStyle
139
- })]
82
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
83
+ id: "form-input-".concat(name),
84
+ type: "tel",
85
+ value: localValue,
86
+ disabled: disabled,
87
+ required: required,
88
+ placeholder: placeholder,
89
+ onChange: handleChange,
90
+ className: "ufg-input".concat(error ? " error" : ""),
91
+ style: inputStyle,
92
+ inputMode: "numeric",
93
+ pattern: "[0-9+]*",
94
+ autoComplete: "tel",
95
+ title: "Phone number (auto-adds + prefix)"
140
96
  }), (0, _defaults.errorJsx)(error), (0, _defaults.tooltipJsx)(tooltip, tooltipStyle)]
141
97
  });
142
98
  };
@@ -156,11 +112,6 @@ CustomMobilePhone.propTypes = {
156
112
  labelStyle: _propTypes["default"].object,
157
113
  spanStyle: _propTypes["default"].object,
158
114
  inputStyle: _propTypes["default"].object,
159
- tooltipStyle: _propTypes["default"].object,
160
- countryCodes: _propTypes["default"].arrayOf(_propTypes["default"].shape({
161
- label: _propTypes["default"].string.isRequired,
162
- value: _propTypes["default"].string.isRequired
163
- })),
164
- defaultCountryCode: _propTypes["default"].string
115
+ tooltipStyle: _propTypes["default"].object
165
116
  };
166
117
  var _default = exports["default"] = CustomMobilePhone;
package/build/index.js CHANGED
@@ -51,6 +51,12 @@ Object.defineProperty(exports, "CustomInput", {
51
51
  return _CustomInput["default"];
52
52
  }
53
53
  });
54
+ Object.defineProperty(exports, "CustomInputAdd", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _CustomInputAdd["default"];
58
+ }
59
+ });
54
60
  Object.defineProperty(exports, "CustomJson", {
55
61
  enumerable: true,
56
62
  get: function get() {
@@ -117,6 +123,7 @@ var _CustomDatePicker = _interopRequireDefault(require("./FormFields/CustomDateP
117
123
  var _CustomDropdown = _interopRequireDefault(require("./FormFields/CustomDropdown"));
118
124
  var _CustomFileInput = _interopRequireDefault(require("./FormFields/CustomFileInput"));
119
125
  var _CustomInput = _interopRequireDefault(require("./FormFields/CustomInput"));
126
+ var _CustomInputAdd = _interopRequireDefault(require("./FormFields/CustomInputAdd"));
120
127
  var _CustomJson = _interopRequireDefault(require("./FormFields/CustomJson"));
121
128
  var _CustomLabel = _interopRequireDefault(require("./FormFields/CustomLabel"));
122
129
  var _CustomMobilePhone = _interopRequireDefault(require("./FormFields/CustomMobilePhone"));
@@ -615,9 +622,7 @@ var GenericForm = function GenericForm(_ref) {
615
622
  case 'tel':
616
623
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_CustomMobilePhone["default"], _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, cp), sp), fp), {}, {
617
624
  value: value,
618
- onChange: fieldHandler,
619
- countryCodes: field.countryCodes,
620
- defaultCountryCode: field.defaultCountryCode
625
+ onChange: fieldHandler(field)
621
626
  }), field.name);
622
627
 
623
628
  // Date
@@ -744,6 +749,13 @@ var GenericForm = function GenericForm(_ref) {
744
749
  accept: field.accept,
745
750
  onChange: fieldHandler(field)
746
751
  }), field.name);
752
+ case 'inputAdd':
753
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_CustomInputAdd["default"], _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, cp), sp), fp), {}, {
754
+ value: value,
755
+ handleAdd: field.handleAdd,
756
+ addText: field.addText,
757
+ addStyle: field.addStyle
758
+ }), field.name);
747
759
  default:
748
760
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_CustomInput["default"], _objectSpread(_objectSpread(_objectSpread(_objectSpread({
749
761
  type: field.type
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@insticc/genericform",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "A generic form with a comprehensive set of field types, validation, and external state management",
5
5
  "main": "build/index.js",
6
6
  "scripts": {