@insticc/genericform 1.0.11 → 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 +38 -62
- package/build/FormFields/CustomCheckboxGroup.js +87 -0
- package/build/FormFields/CustomComponent.js +42 -0
- package/build/FormFields/CustomDatePicker.js +51 -68
- package/build/FormFields/CustomDropdown.js +103 -26
- package/build/FormFields/CustomInput.js +51 -46
- package/build/FormFields/CustomJson.js +148 -0
- package/build/FormFields/CustomLabel.js +8 -14
- package/build/FormFields/CustomMultiDropdown.js +88 -0
- package/build/FormFields/CustomNumberInput.js +47 -44
- package/build/FormFields/CustomRadioGroup.js +91 -0
- package/build/FormFields/CustomSearch.js +56 -30
- package/build/FormFields/CustomSeparator.js +24 -0
- package/build/FormFields/CustomTextArea.js +52 -46
- 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 -57
- package/build/FormFields/MultipleCheckbox.js +0 -92
- package/build/FormFields/MultipleDropdown.js +0 -76
- package/build/FormFields/MultipleRadioButton.js +0 -90
- package/build/FormFields/YearDatePicker.js +0 -115
package/build/Demo2.js
ADDED
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _index = _interopRequireDefault(require("./index"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
+
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); }
|
|
11
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
12
|
+
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."); }
|
|
13
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
14
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
18
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
19
|
+
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); }
|
|
20
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
21
|
+
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."); }
|
|
22
|
+
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; } }
|
|
23
|
+
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; }
|
|
24
|
+
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; } }
|
|
25
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } /**
|
|
26
|
+
* @file Demo2.jsx
|
|
27
|
+
* GenericForm with full external state management.
|
|
28
|
+
*
|
|
29
|
+
* Mount anywhere: <Demo2 />
|
|
30
|
+
*/
|
|
31
|
+
// ── Option sets ───────────────────────────────────────────────────────────────
|
|
32
|
+
var COUNTRIES = [{
|
|
33
|
+
value: 'PT',
|
|
34
|
+
text: 'Portugal'
|
|
35
|
+
}, {
|
|
36
|
+
value: 'ES',
|
|
37
|
+
text: 'Spain'
|
|
38
|
+
}, {
|
|
39
|
+
value: 'FR',
|
|
40
|
+
text: 'France'
|
|
41
|
+
}, {
|
|
42
|
+
value: 'DE',
|
|
43
|
+
text: 'Germany'
|
|
44
|
+
}];
|
|
45
|
+
var PRIORITY_OPTIONS = [{
|
|
46
|
+
value: 'low',
|
|
47
|
+
text: 'Low'
|
|
48
|
+
}, {
|
|
49
|
+
value: 'medium',
|
|
50
|
+
text: 'Medium'
|
|
51
|
+
}, {
|
|
52
|
+
value: 'high',
|
|
53
|
+
text: 'High'
|
|
54
|
+
}];
|
|
55
|
+
var CITY_BY_COUNTRY = {
|
|
56
|
+
PT: 'Lisbon',
|
|
57
|
+
ES: 'Madrid',
|
|
58
|
+
FR: 'Paris',
|
|
59
|
+
DE: 'Berlin'
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// ── Initial values ────────────────────────────────────────────────────────────
|
|
63
|
+
var INITIAL = {
|
|
64
|
+
firstName: '',
|
|
65
|
+
lastName: '',
|
|
66
|
+
email: '',
|
|
67
|
+
age: '',
|
|
68
|
+
country: '',
|
|
69
|
+
city: '',
|
|
70
|
+
priority: 'medium',
|
|
71
|
+
notify: false,
|
|
72
|
+
notifyEmail: '',
|
|
73
|
+
notes: '',
|
|
74
|
+
perms: ['read']
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// ── Component ─────────────────────────────────────────────────────────────────
|
|
78
|
+
var Demo2 = function Demo2() {
|
|
79
|
+
var _useState = (0, _react.useState)(INITIAL),
|
|
80
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
81
|
+
formState = _useState2[0],
|
|
82
|
+
setFormState = _useState2[1];
|
|
83
|
+
var _useState3 = (0, _react.useState)([]),
|
|
84
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
85
|
+
fieldLog = _useState4[0],
|
|
86
|
+
setFieldLog = _useState4[1];
|
|
87
|
+
var _useState5 = (0, _react.useState)(null),
|
|
88
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
89
|
+
submitted = _useState6[0],
|
|
90
|
+
setSubmitted = _useState6[1];
|
|
91
|
+
|
|
92
|
+
// ── Handlers ────────────────────────────────────────────────────────────────
|
|
93
|
+
|
|
94
|
+
// onDataChange — full snapshot; becomes the new formState
|
|
95
|
+
var handleDataChange = (0, _react.useCallback)(function (data) {
|
|
96
|
+
setFormState(data);
|
|
97
|
+
}, []);
|
|
98
|
+
|
|
99
|
+
// onFieldChange — per-field reactions (dependent fields, logging)
|
|
100
|
+
var handleFieldChange = (0, _react.useCallback)(function (_ref) {
|
|
101
|
+
var name = _ref.name,
|
|
102
|
+
value = _ref.value,
|
|
103
|
+
option = _ref.option;
|
|
104
|
+
// Dependent field: auto-fill city when country is selected
|
|
105
|
+
if (name === 'country') {
|
|
106
|
+
setFormState(function (prev) {
|
|
107
|
+
var _CITY_BY_COUNTRY$valu;
|
|
108
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
109
|
+
city: (_CITY_BY_COUNTRY$valu = CITY_BY_COUNTRY[value]) !== null && _CITY_BY_COUNTRY$valu !== void 0 ? _CITY_BY_COUNTRY$valu : ''
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
setFieldLog(function (prev) {
|
|
114
|
+
return [{
|
|
115
|
+
time: new Date().toLocaleTimeString(),
|
|
116
|
+
name: name,
|
|
117
|
+
value: _typeof(value) === 'object' ? JSON.stringify(value) : String(value !== null && value !== void 0 ? value : ''),
|
|
118
|
+
option: option ? JSON.stringify(option) : undefined
|
|
119
|
+
}].concat(_toConsumableArray(prev)).slice(0, 10);
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
|
|
123
|
+
// Parent actions that write directly to formState
|
|
124
|
+
var loadProfile = function loadProfile() {
|
|
125
|
+
return setFormState(function (prev) {
|
|
126
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
127
|
+
firstName: 'Maria',
|
|
128
|
+
lastName: 'Santos',
|
|
129
|
+
email: 'maria@demo.com',
|
|
130
|
+
age: 34,
|
|
131
|
+
country: 'PT',
|
|
132
|
+
city: 'Lisbon',
|
|
133
|
+
priority: 'high',
|
|
134
|
+
notify: true,
|
|
135
|
+
notifyEmail: 'alerts@demo.com'
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
var resetForm = function resetForm() {
|
|
140
|
+
return setFormState(INITIAL);
|
|
141
|
+
};
|
|
142
|
+
var clearField = function clearField(name) {
|
|
143
|
+
return setFormState(function (prev) {
|
|
144
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, ''));
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// ── Fields — every value comes from formState ────────────────────────────────
|
|
149
|
+
var fields = [{
|
|
150
|
+
name: 'sep0',
|
|
151
|
+
type: 'hr'
|
|
152
|
+
}, {
|
|
153
|
+
name: 'lbl0',
|
|
154
|
+
type: 'label',
|
|
155
|
+
displayName: 'Personal info'
|
|
156
|
+
}, {
|
|
157
|
+
name: 'firstName',
|
|
158
|
+
type: 'text',
|
|
159
|
+
displayName: 'First name',
|
|
160
|
+
required: true,
|
|
161
|
+
inline: true,
|
|
162
|
+
value: formState.firstName
|
|
163
|
+
}, {
|
|
164
|
+
name: 'lastName',
|
|
165
|
+
type: 'text',
|
|
166
|
+
displayName: 'Last name',
|
|
167
|
+
required: true,
|
|
168
|
+
inline: true,
|
|
169
|
+
value: formState.lastName
|
|
170
|
+
}, {
|
|
171
|
+
name: 'email',
|
|
172
|
+
type: 'email',
|
|
173
|
+
displayName: 'Email',
|
|
174
|
+
required: true,
|
|
175
|
+
value: formState.email,
|
|
176
|
+
validate: function validate(v) {
|
|
177
|
+
return v && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v) ? 'Invalid email' : null;
|
|
178
|
+
}
|
|
179
|
+
}, {
|
|
180
|
+
name: 'age',
|
|
181
|
+
type: 'int',
|
|
182
|
+
displayName: 'Age',
|
|
183
|
+
value: formState.age,
|
|
184
|
+
min: 0,
|
|
185
|
+
max: 120
|
|
186
|
+
}, {
|
|
187
|
+
name: 'sep1',
|
|
188
|
+
type: 'hr'
|
|
189
|
+
}, {
|
|
190
|
+
name: 'lbl1',
|
|
191
|
+
type: 'label',
|
|
192
|
+
displayName: 'Preferences'
|
|
193
|
+
}, {
|
|
194
|
+
name: 'country',
|
|
195
|
+
type: 'select',
|
|
196
|
+
displayName: 'Country',
|
|
197
|
+
required: true,
|
|
198
|
+
value: formState.country,
|
|
199
|
+
options: COUNTRIES
|
|
200
|
+
}, {
|
|
201
|
+
name: 'city',
|
|
202
|
+
type: 'text',
|
|
203
|
+
displayName: 'City (auto-filled)',
|
|
204
|
+
value: formState.city,
|
|
205
|
+
disabled: true
|
|
206
|
+
}, {
|
|
207
|
+
name: 'priority',
|
|
208
|
+
type: 'radioGroup',
|
|
209
|
+
displayName: 'Priority',
|
|
210
|
+
value: formState.priority,
|
|
211
|
+
options: PRIORITY_OPTIONS
|
|
212
|
+
}, {
|
|
213
|
+
name: 'notify',
|
|
214
|
+
type: 'toggle',
|
|
215
|
+
displayName: 'Enable notifications',
|
|
216
|
+
value: formState.notify
|
|
217
|
+
}, {
|
|
218
|
+
name: 'notifyEmail',
|
|
219
|
+
type: 'email',
|
|
220
|
+
displayName: 'Notification email',
|
|
221
|
+
value: formState.notifyEmail,
|
|
222
|
+
hide: function hide(fd) {
|
|
223
|
+
return !fd.notify;
|
|
224
|
+
},
|
|
225
|
+
validate: function validate(v, fd) {
|
|
226
|
+
return fd.notify && !v ? 'Required when notifications are on' : null;
|
|
227
|
+
}
|
|
228
|
+
}, {
|
|
229
|
+
name: 'sep2',
|
|
230
|
+
type: 'hr'
|
|
231
|
+
}, {
|
|
232
|
+
name: 'notes',
|
|
233
|
+
type: 'textArea',
|
|
234
|
+
displayName: 'Notes',
|
|
235
|
+
value: formState.notes,
|
|
236
|
+
rows: 3,
|
|
237
|
+
maxLength: 500
|
|
238
|
+
}, {
|
|
239
|
+
name: 'sep3',
|
|
240
|
+
type: 'hr'
|
|
241
|
+
}, {
|
|
242
|
+
name: 'lbl3',
|
|
243
|
+
type: 'label',
|
|
244
|
+
displayName: 'Access'
|
|
245
|
+
}, {
|
|
246
|
+
name: 'perms',
|
|
247
|
+
type: 'checkboxGroup',
|
|
248
|
+
displayName: 'Permissions',
|
|
249
|
+
value: formState.perms,
|
|
250
|
+
options: [{
|
|
251
|
+
name: 'read',
|
|
252
|
+
label: 'Read'
|
|
253
|
+
}, {
|
|
254
|
+
name: 'write',
|
|
255
|
+
label: 'Write'
|
|
256
|
+
}, {
|
|
257
|
+
name: 'delete',
|
|
258
|
+
label: 'Delete'
|
|
259
|
+
}]
|
|
260
|
+
}, {
|
|
261
|
+
name: 'sep4',
|
|
262
|
+
type: 'hr'
|
|
263
|
+
}, {
|
|
264
|
+
name: 'lbl4',
|
|
265
|
+
type: 'label',
|
|
266
|
+
displayName: 'Advanced'
|
|
267
|
+
}, {
|
|
268
|
+
name: 'advanced',
|
|
269
|
+
type: 'accordion',
|
|
270
|
+
defaultOpen: false,
|
|
271
|
+
sections: [{
|
|
272
|
+
title: 'Config',
|
|
273
|
+
icon: '⚙️',
|
|
274
|
+
content: /*#__PURE__*/React.createElement("p", {
|
|
275
|
+
style: {
|
|
276
|
+
fontSize: '0.85rem',
|
|
277
|
+
color: '#555'
|
|
278
|
+
}
|
|
279
|
+
}, "Config fields go here.")
|
|
280
|
+
}, {
|
|
281
|
+
title: 'Danger zone',
|
|
282
|
+
icon: '⚠️',
|
|
283
|
+
content: /*#__PURE__*/React.createElement("p", {
|
|
284
|
+
style: {
|
|
285
|
+
fontSize: '0.85rem',
|
|
286
|
+
color: '#db2828'
|
|
287
|
+
}
|
|
288
|
+
}, "Destructive actions.")
|
|
289
|
+
}]
|
|
290
|
+
}];
|
|
291
|
+
|
|
292
|
+
// ── Derived ─────────────────────────────────────────────────────────────────
|
|
293
|
+
var required = ['firstName', 'lastName', 'email', 'country'];
|
|
294
|
+
var filled = required.filter(function (k) {
|
|
295
|
+
return formState[k];
|
|
296
|
+
});
|
|
297
|
+
var pct = Math.round(filled.length / required.length * 100);
|
|
298
|
+
|
|
299
|
+
// ── JSX ─────────────────────────────────────────────────────────────────────
|
|
300
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
301
|
+
style: {
|
|
302
|
+
maxWidth: 960,
|
|
303
|
+
margin: '2rem auto',
|
|
304
|
+
fontFamily: 'sans-serif',
|
|
305
|
+
display: 'grid',
|
|
306
|
+
gridTemplateColumns: '1fr 320px',
|
|
307
|
+
gap: 24,
|
|
308
|
+
alignItems: 'start'
|
|
309
|
+
}
|
|
310
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h1", {
|
|
311
|
+
style: {
|
|
312
|
+
fontSize: '1.3rem',
|
|
313
|
+
marginBottom: '0.25rem'
|
|
314
|
+
}
|
|
315
|
+
}, "Demo 2 \u2014 formState as field values"), /*#__PURE__*/React.createElement("p", {
|
|
316
|
+
style: {
|
|
317
|
+
color: '#666',
|
|
318
|
+
fontSize: '0.85rem',
|
|
319
|
+
marginBottom: '1rem'
|
|
320
|
+
}
|
|
321
|
+
}, "Every ", /*#__PURE__*/React.createElement("code", null, "field.value"), " reads from ", /*#__PURE__*/React.createElement("code", null, "formState"), ".", /*#__PURE__*/React.createElement("code", null, "onDataChange"), " keeps it in sync. Parent actions write directly to ", /*#__PURE__*/React.createElement("code", null, "formState"), "."), /*#__PURE__*/React.createElement("div", {
|
|
322
|
+
style: {
|
|
323
|
+
display: 'flex',
|
|
324
|
+
gap: 8,
|
|
325
|
+
marginBottom: '1.25rem',
|
|
326
|
+
flexWrap: 'wrap'
|
|
327
|
+
}
|
|
328
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
329
|
+
onClick: loadProfile,
|
|
330
|
+
style: {
|
|
331
|
+
padding: '6px 12px',
|
|
332
|
+
fontSize: '0.8rem',
|
|
333
|
+
cursor: 'pointer',
|
|
334
|
+
borderRadius: 5,
|
|
335
|
+
background: '#2185d0',
|
|
336
|
+
color: '#fff',
|
|
337
|
+
border: 'none'
|
|
338
|
+
}
|
|
339
|
+
}, "Load profile"), /*#__PURE__*/React.createElement("button", {
|
|
340
|
+
onClick: function onClick() {
|
|
341
|
+
return clearField('email');
|
|
342
|
+
},
|
|
343
|
+
style: {
|
|
344
|
+
padding: '6px 12px',
|
|
345
|
+
fontSize: '0.8rem',
|
|
346
|
+
cursor: 'pointer',
|
|
347
|
+
borderRadius: 5,
|
|
348
|
+
background: '#fff',
|
|
349
|
+
border: '1px solid #ccc'
|
|
350
|
+
}
|
|
351
|
+
}, "Clear email"), /*#__PURE__*/React.createElement("button", {
|
|
352
|
+
onClick: resetForm,
|
|
353
|
+
style: {
|
|
354
|
+
padding: '6px 12px',
|
|
355
|
+
fontSize: '0.8rem',
|
|
356
|
+
cursor: 'pointer',
|
|
357
|
+
borderRadius: 5,
|
|
358
|
+
background: '#fff',
|
|
359
|
+
border: '1px solid #ccc'
|
|
360
|
+
}
|
|
361
|
+
}, "Reset all")), /*#__PURE__*/React.createElement(_index["default"], {
|
|
362
|
+
title: "User profile",
|
|
363
|
+
fields: fields,
|
|
364
|
+
submitText: "Save profile",
|
|
365
|
+
cancelText: "Reset all",
|
|
366
|
+
validateOnChange: true,
|
|
367
|
+
validateOnSubmit: true,
|
|
368
|
+
onDataChange: handleDataChange,
|
|
369
|
+
onFieldChange: handleFieldChange,
|
|
370
|
+
onSubmit: function onSubmit(data) {
|
|
371
|
+
return setSubmitted(data);
|
|
372
|
+
},
|
|
373
|
+
onCancel: resetForm
|
|
374
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
375
|
+
style: {
|
|
376
|
+
position: 'sticky',
|
|
377
|
+
top: 16,
|
|
378
|
+
display: 'flex',
|
|
379
|
+
flexDirection: 'column',
|
|
380
|
+
gap: 14
|
|
381
|
+
}
|
|
382
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
383
|
+
style: {
|
|
384
|
+
background: '#f9f9f9',
|
|
385
|
+
border: '1px solid #e0e0e0',
|
|
386
|
+
borderRadius: 8,
|
|
387
|
+
padding: '12px 14px'
|
|
388
|
+
}
|
|
389
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
390
|
+
style: {
|
|
391
|
+
fontSize: '0.78rem',
|
|
392
|
+
fontWeight: 600,
|
|
393
|
+
marginBottom: 6,
|
|
394
|
+
color: '#444'
|
|
395
|
+
}
|
|
396
|
+
}, "Required \u2014 ", pct, "%"), /*#__PURE__*/React.createElement("div", {
|
|
397
|
+
style: {
|
|
398
|
+
background: '#e0e0e0',
|
|
399
|
+
borderRadius: 4,
|
|
400
|
+
height: 8,
|
|
401
|
+
overflow: 'hidden'
|
|
402
|
+
}
|
|
403
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
404
|
+
style: {
|
|
405
|
+
width: "".concat(pct, "%"),
|
|
406
|
+
height: '100%',
|
|
407
|
+
transition: 'width .3s',
|
|
408
|
+
background: pct === 100 ? '#21ba45' : '#2185d0'
|
|
409
|
+
}
|
|
410
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
411
|
+
style: {
|
|
412
|
+
background: '#f9f9f9',
|
|
413
|
+
border: '1px solid #e0e0e0',
|
|
414
|
+
borderRadius: 8,
|
|
415
|
+
padding: '12px 14px'
|
|
416
|
+
}
|
|
417
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
418
|
+
style: {
|
|
419
|
+
fontSize: '0.78rem',
|
|
420
|
+
fontWeight: 600,
|
|
421
|
+
marginBottom: 6,
|
|
422
|
+
color: '#444'
|
|
423
|
+
}
|
|
424
|
+
}, "formState (parent)"), /*#__PURE__*/React.createElement("pre", {
|
|
425
|
+
style: {
|
|
426
|
+
fontSize: '0.7rem',
|
|
427
|
+
maxHeight: 240,
|
|
428
|
+
overflow: 'auto',
|
|
429
|
+
margin: 0,
|
|
430
|
+
color: '#222'
|
|
431
|
+
}
|
|
432
|
+
}, JSON.stringify(formState, null, 2))), /*#__PURE__*/React.createElement("div", {
|
|
433
|
+
style: {
|
|
434
|
+
background: '#f9f9f9',
|
|
435
|
+
border: '1px solid #e0e0e0',
|
|
436
|
+
borderRadius: 8,
|
|
437
|
+
padding: '12px 14px'
|
|
438
|
+
}
|
|
439
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
440
|
+
style: {
|
|
441
|
+
fontSize: '0.78rem',
|
|
442
|
+
fontWeight: 600,
|
|
443
|
+
marginBottom: 6,
|
|
444
|
+
color: '#444'
|
|
445
|
+
}
|
|
446
|
+
}, "onFieldChange log"), fieldLog.length === 0 ? /*#__PURE__*/React.createElement("p", {
|
|
447
|
+
style: {
|
|
448
|
+
fontSize: '0.75rem',
|
|
449
|
+
color: '#888',
|
|
450
|
+
margin: 0
|
|
451
|
+
}
|
|
452
|
+
}, "No changes yet.") : fieldLog.map(function (e, i) {
|
|
453
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
454
|
+
key: i,
|
|
455
|
+
style: {
|
|
456
|
+
fontSize: '0.7rem',
|
|
457
|
+
borderBottom: '0.5px solid #eee',
|
|
458
|
+
paddingBottom: 3,
|
|
459
|
+
marginBottom: 3
|
|
460
|
+
}
|
|
461
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
462
|
+
style: {
|
|
463
|
+
color: '#aaa'
|
|
464
|
+
}
|
|
465
|
+
}, e.time), ' ', /*#__PURE__*/React.createElement("strong", null, e.name), " \u2192 ", /*#__PURE__*/React.createElement("code", null, e.value), e.option && /*#__PURE__*/React.createElement("div", {
|
|
466
|
+
style: {
|
|
467
|
+
color: '#888',
|
|
468
|
+
fontSize: '0.65rem'
|
|
469
|
+
}
|
|
470
|
+
}, "option: ", e.option));
|
|
471
|
+
})), submitted && /*#__PURE__*/React.createElement("div", {
|
|
472
|
+
style: {
|
|
473
|
+
background: '#f0f8f0',
|
|
474
|
+
border: '1px solid #b2dfb2',
|
|
475
|
+
borderRadius: 8,
|
|
476
|
+
padding: '12px 14px'
|
|
477
|
+
}
|
|
478
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
479
|
+
style: {
|
|
480
|
+
fontSize: '0.78rem',
|
|
481
|
+
fontWeight: 600,
|
|
482
|
+
marginBottom: 6,
|
|
483
|
+
color: '#2d6a2d'
|
|
484
|
+
}
|
|
485
|
+
}, "\u2713 Submitted"), /*#__PURE__*/React.createElement("pre", {
|
|
486
|
+
style: {
|
|
487
|
+
fontSize: '0.7rem',
|
|
488
|
+
maxHeight: 200,
|
|
489
|
+
overflow: 'auto',
|
|
490
|
+
margin: 0,
|
|
491
|
+
color: '#222'
|
|
492
|
+
}
|
|
493
|
+
}, JSON.stringify(submitted, null, 2)))));
|
|
494
|
+
};
|
|
495
|
+
var _default = exports["default"] = Demo2;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _semanticUiReact = require("semantic-ui-react");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
12
|
+
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."); }
|
|
13
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
14
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
15
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
16
|
+
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."); }
|
|
17
|
+
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; } }
|
|
18
|
+
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; }
|
|
19
|
+
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; } }
|
|
20
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
21
|
+
var CustomAccordion = function CustomAccordion(_ref) {
|
|
22
|
+
var name = _ref.name,
|
|
23
|
+
_ref$sections = _ref.sections,
|
|
24
|
+
sections = _ref$sections === void 0 ? [] : _ref$sections,
|
|
25
|
+
_ref$defaultOpen = _ref.defaultOpen,
|
|
26
|
+
defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
|
|
27
|
+
_ref$activeAllIndex = _ref.activeAllIndex,
|
|
28
|
+
activeAllIndex = _ref$activeAllIndex === void 0 ? false : _ref$activeAllIndex,
|
|
29
|
+
_ref$mainDivStyle = _ref.mainDivStyle,
|
|
30
|
+
mainDivStyle = _ref$mainDivStyle === void 0 ? {} : _ref$mainDivStyle,
|
|
31
|
+
_ref$inputStyle = _ref.inputStyle,
|
|
32
|
+
inputStyle = _ref$inputStyle === void 0 ? {} : _ref$inputStyle;
|
|
33
|
+
var allIndices = sections.map(function (_, i) {
|
|
34
|
+
return i;
|
|
35
|
+
});
|
|
36
|
+
var _useState = (0, _react.useState)(activeAllIndex ? allIndices : defaultOpen ? [0] : []),
|
|
37
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
38
|
+
activeIndex = _useState2[0],
|
|
39
|
+
setActiveIndex = _useState2[1];
|
|
40
|
+
var handleClick = function handleClick(_, _ref2) {
|
|
41
|
+
var index = _ref2.index;
|
|
42
|
+
return setActiveIndex(function (prev) {
|
|
43
|
+
return prev.includes(index) ? prev.filter(function (i) {
|
|
44
|
+
return i !== index;
|
|
45
|
+
}) : [].concat(_toConsumableArray(prev), [index]);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
var renderContent = function renderContent(content) {
|
|
49
|
+
var _content$;
|
|
50
|
+
if (!Array.isArray(content)) return content;
|
|
51
|
+
// Legacy {label, value} row format
|
|
52
|
+
if (content.length > 0 && ((_content$ = content[0]) === null || _content$ === void 0 ? void 0 : _content$.label) !== undefined) {
|
|
53
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
54
|
+
className: "ef-accordion-content"
|
|
55
|
+
}, content.map(function (item, idx) {
|
|
56
|
+
var _item$value;
|
|
57
|
+
return item.label === '---' ? /*#__PURE__*/React.createElement("hr", {
|
|
58
|
+
key: idx
|
|
59
|
+
}) : /*#__PURE__*/React.createElement("div", {
|
|
60
|
+
className: "ef-info-row",
|
|
61
|
+
key: idx
|
|
62
|
+
}, /*#__PURE__*/React.createElement("strong", null, item.label), /*#__PURE__*/React.createElement("span", null, (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : 'N/A'));
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
return content;
|
|
66
|
+
};
|
|
67
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
68
|
+
id: name,
|
|
69
|
+
style: mainDivStyle
|
|
70
|
+
}, /*#__PURE__*/React.createElement(_semanticUiReact.Accordion, {
|
|
71
|
+
fluid: true,
|
|
72
|
+
styled: true,
|
|
73
|
+
className: "ef-accordion",
|
|
74
|
+
style: inputStyle
|
|
75
|
+
}, sections.map(function (section, index) {
|
|
76
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
77
|
+
key: index
|
|
78
|
+
}, /*#__PURE__*/React.createElement(_semanticUiReact.Accordion.Title, {
|
|
79
|
+
active: activeIndex.includes(index),
|
|
80
|
+
index: index,
|
|
81
|
+
onClick: handleClick
|
|
82
|
+
}, /*#__PURE__*/React.createElement(_semanticUiReact.Icon, {
|
|
83
|
+
name: "dropdown"
|
|
84
|
+
}), section.icon && /*#__PURE__*/React.createElement("span", {
|
|
85
|
+
style: {
|
|
86
|
+
marginRight: 8
|
|
87
|
+
}
|
|
88
|
+
}, section.icon), section.title), /*#__PURE__*/React.createElement(_semanticUiReact.Accordion.Content, {
|
|
89
|
+
active: activeIndex.includes(index)
|
|
90
|
+
}, renderContent(section.content)));
|
|
91
|
+
})));
|
|
92
|
+
};
|
|
93
|
+
CustomAccordion.propTypes = {
|
|
94
|
+
name: _propTypes["default"].string.isRequired,
|
|
95
|
+
sections: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
96
|
+
title: _propTypes["default"].string,
|
|
97
|
+
icon: _propTypes["default"].node,
|
|
98
|
+
content: _propTypes["default"].node
|
|
99
|
+
})),
|
|
100
|
+
accordionStates: _propTypes["default"].object,
|
|
101
|
+
onToggle: _propTypes["default"].func,
|
|
102
|
+
mainDivStyle: _propTypes["default"].object,
|
|
103
|
+
inputStyle: _propTypes["default"].object
|
|
104
|
+
};
|
|
105
|
+
var _default = exports["default"] = CustomAccordion;
|