datasync-dynamic-form 1.1.18 → 1.1.19

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.
@@ -1,818 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "CGUID", {
7
- enumerable: true,
8
- get: function () {
9
- return _datasyncCommonLibrary.CGUID;
10
- }
11
- });
12
- exports.DsDynamicForm = void 0;
13
- var _react = _interopRequireWildcard(require("react"));
14
- var _multiselectReactDropdown = _interopRequireDefault(require("multiselect-react-dropdown"));
15
- var _datasyncCore = require("datasync-core");
16
- var _datasyncCommonLibrary = require("datasync-common-library");
17
- var _datasyncBlob = require("datasync-blob");
18
- var _reactstrap = require("reactstrap");
19
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
21
- // react plugin that creates an input with badges
22
- {/** Blob must be defined as npm component
23
- <Blob
24
- import Blob from "components/Blob/Blob";*/}
25
-
26
- // reactstrap components
27
-
28
- const debugging = true;
29
- const local = true;
30
- const production = !local;
31
- const globals = {
32
- parameters: {
33
- debugging: debugging,
34
- local: true,
35
- production: false,
36
- use_navigate: false,
37
- save_failed_alert: false,
38
- form_version: "1.0",
39
- form_modified_version: 2
40
- }
41
- };
42
- class DsDynamicForm extends _react.Component {
43
- constructor(props) {
44
- super(props);
45
- if (globals.parameters.debugging) {
46
- console.log("30:DynamicForm3Tiers2::this.props.data_blob", this.props.data_blob);
47
- console.log("30DynamicForm3Tiers::this.props.form", this.props.form);
48
- }
49
- this.state = {
50
- form: {}
51
- };
52
- }
53
- componentDidMount = () => {
54
- //Component initialization in edit mode
55
- if (this.props.form) {
56
- this.clearForm();
57
- }
58
- };
59
- componentDidUpdate(prevProps) {
60
- // Typical usage (don't forget to compare props):
61
- if (this.props.form !== prevProps.form) {
62
- //Lookup field props has changed
63
- this.clearForm();
64
- }
65
- if (this.props.data_blob !== prevProps.data_blob) {
66
- //Lookup field props has changed
67
- this.clearForm();
68
- }
69
- }
70
-
71
- /**
72
- * Prototype : clearForm
73
- */
74
- clearForm = () => {
75
- this.setState({
76
- fieldError: [],
77
- form: {},
78
- captcha1: (0, _datasyncCommonLibrary.Randomize)(0, 5),
79
- captcha2: (0, _datasyncCommonLibrary.Randomize)(0, 5)
80
- },
81
- //Clear forced
82
- () => {
83
- this.setState({
84
- form: this.props.form,
85
- fieldError: []
86
- }); //No need to override form property with clearObject2 anymore because data are written outside form.
87
- });
88
-
89
- //Real efficient fix
90
- let duplicate_data_tier = this.props.data_blob && this.props.data_blob.data_tier ? JSON.parse(JSON.stringify(this.props.data_blob.data_tier)) : {};
91
-
92
- //duplicate_data_tier = Object.assign(duplicate_data_tier, (this.props.data_blob && this.props.data_blob.data_tier)?this.props.data_blob.data_tier:{})
93
- this.local_data_blob = {
94
- data_tier: {}
95
- };
96
- //this.local_data_blob.data_tier = Object.assign({}, duplicate_data_tier);
97
-
98
- //Ensure props.foreign_keys is a json object - PMAB on 2025-04-10
99
- if (this.props.foreign_keys && typeof this.props.foreign_keys !== "object") throw new Error("foreign_keys must be a json object !");
100
- this.local_data_blob.data_tier = Object.assign(this.props.foreign_keys ? this.props.foreign_keys : {}, duplicate_data_tier);
101
- if (globals.parameters.debugging) console.log("clearForm->this.local_data_blob.data_tier =>", this.local_data_blob.data_tier);
102
- };
103
- getFieldData = fieldName => {
104
- /** Return data value form field object */
105
- let nextFieldData = this.local_data_blob.data_tier[fieldName] ? this.local_data_blob.data_tier[fieldName] : "";
106
- return nextFieldData;
107
- };
108
- setFieldData = (fieldName, value) => {
109
- try {
110
- if (globals.parameters.debugging) console.log("setFieldData:fieldName ->", fieldName, " value ->", value);
111
- let duplicate_data_tier = JSON.parse(JSON.stringify(this.local_data_blob.data_tier));
112
- duplicate_data_tier[fieldName] = value;
113
- this.local_data_blob.data_tier = duplicate_data_tier;
114
- //this.local_data_blob.data_tier[fieldName] = value
115
- } catch (error) {
116
- alert(error);
117
- }
118
-
119
- //onFormChange handler return current form value to caller - PMAB on 2025-02-03
120
- if (this.props.onFormChange) this.props.onFormChange(this.local_data_blob.data_tier);
121
- };
122
- getSelectedFieldValues_V1 = pFieldObject => {
123
- return pFieldObject.selected_values ? pFieldObject.selected_values : "";
124
- };
125
- setFieldError = (pFieldObject, value) => {
126
- try {
127
- let nextFieldError = this.state.fieldError;
128
- nextFieldError[pFieldObject.name] = value;
129
- this.setState({
130
- fieldError: nextFieldError
131
- });
132
- //Scroll form to first erroneous field
133
- (0, _datasyncCommonLibrary.WScrollTo)(pFieldObject.name);
134
- } catch (e) {
135
- console.error(`Error caught on ${e}`);
136
- }
137
- };
138
- getFieldError = pFieldObject => {
139
- /** Return data value form field object */
140
- try {
141
- if (globals.parameters.debugging) console.log(`getFieldError(${JSON.stringify(pFieldObject)}) -> ${this.state.fieldError}`);
142
- let dbg = this.state.fieldError[pFieldObject.name] ? this.state.fieldError[pFieldObject.name] : "";
143
- return `${dbg}`;
144
- } catch (e) {
145
- console.error(`getFieldError raises -> ${e}`);
146
- return ``;
147
- }
148
- };
149
- _error_label = field => {
150
- return /*#__PURE__*/_react.default.createElement("label", {
151
- className: "dynamic-form-error"
152
- }, this.getFieldError(field));
153
- };
154
- getFieldLabelTitle = pFieldObject => {
155
- return /*#__PURE__*/_react.default.createElement("h6", {
156
- id: pFieldObject.name
157
- }, pFieldObject.title ? pFieldObject.title : pFieldObject.placeholder, pFieldObject.required && !this.props.read_only && /*#__PURE__*/_react.default.createElement("span", {
158
- className: "icon-danger"
159
- }, "*"));
160
- };
161
- getCaptchaFieldLabelTitle = pFieldObject => {
162
- return /*#__PURE__*/_react.default.createElement("h6", {
163
- id: pFieldObject.name
164
- }, `${this.state.captcha1} + ${this.state.captcha2}`, pFieldObject.required && /*#__PURE__*/_react.default.createElement("span", {
165
- className: "icon-danger"
166
- }, "*"));
167
- };
168
- getFieldData_V1 = pFieldObject => {
169
- return pFieldObject.value ? pFieldObject.value : pFieldObject.default_value ? pFieldObject.default_value : "";
170
- };
171
- getFieldPrompt = pFieldObject => {
172
- return pFieldObject.placeholder ? pFieldObject.placeholder : pFieldObject.title;
173
- };
174
- _numeric_field_with_add_on = (field, fa_symbol) => {
175
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroup, {
176
- className: "border-input"
177
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
178
- readOnly: this.props.read_only ? this.props.read_only : false,
179
- type: field.input_type,
180
- value: this.getFieldData(field.name),
181
- placeholder: field.placeholder,
182
- autocomplete: "on",
183
- id: field.name,
184
- name: field.name,
185
- err: "",
186
- onChange: e => {
187
- e.preventDefault();
188
- this.dynamicInputNumericChangeHandler({
189
- event: e,
190
- fieldObject: field
191
- });
192
- }
193
- }), fa_symbol && /*#__PURE__*/_react.default.createElement("div", {
194
- className: "input-group-append"
195
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroupText, null, /*#__PURE__*/_react.default.createElement("i", {
196
- className: `fa ${fa_symbol}`
197
- })))), this._error_label(field));
198
- };
199
- _captcha_field = (field, fa_symbol) => {
200
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, this.getCaptchaFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroup, {
201
- className: "border-input"
202
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
203
- readOnly: this.props.read_only ? this.props.read_only : false,
204
- type: field.input_type,
205
- value: this.getFieldData(field.name),
206
- placeholder: field.placeholder,
207
- autocomplete: "on",
208
- id: field.name,
209
- name: field.name,
210
- onChange: e => {
211
- e.preventDefault();
212
- this.dynamicInputNumericChangeHandler({
213
- event: e,
214
- fieldObject: field
215
- });
216
- }
217
- })), this._error_label(field));
218
- };
219
- _text_field = field => {
220
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
221
- readOnly: this.props.read_only ? this.props.read_only : false,
222
- type: field.input_type,
223
- value: this.getFieldData(field.name),
224
- placeholder: field.placeholder,
225
- autocomplete: "off",
226
- onChange: e => {
227
- e.preventDefault();
228
- this.dynamicInputTextChangeHandler({
229
- event: e,
230
- fieldObject: field
231
- });
232
- }
233
- }), this._error_label(field));
234
- };
235
- _email_field = field => {
236
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
237
- readOnly: this.props.read_only ? this.props.read_only : false,
238
- type: field.input_type,
239
- value: this.getFieldData(field.name),
240
- placeholder: field.placeholder,
241
- pattern: "[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$",
242
- autocomplete: "on",
243
- id: field.name,
244
- name: field.name,
245
- onChange: e => {
246
- e.preventDefault();
247
- this.dynamicInputTextChangeHandler({
248
- event: e,
249
- fieldObject: field
250
- });
251
- }
252
- }), this._error_label(field));
253
- };
254
- _memo_field = field => {
255
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement("textarea", {
256
- className: "form-control",
257
- readOnly: this.props.read_only ? this.props.read_only : false,
258
- type: field.input_type,
259
- value: this.getFieldData(field.name),
260
- placeholder: field.placeholder,
261
- rows: field.rows,
262
- onChange: e => {
263
- e.preventDefault();
264
- this.dynamicInputTextChangeHandler({
265
- event: e,
266
- fieldObject: field
267
- });
268
- }
269
- }), this._error_label(field));
270
- };
271
- _combo_field = field => {
272
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
273
- showArrow: true,
274
- options: field.combo_list,
275
- isObject: false,
276
- displayValue: "key",
277
- selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name).split(";") : [],
278
- placeholder: field.placeholder,
279
- emptyRecordMsg: "",
280
- onSelect: (selectedList, selectedItem) => {
281
- this.setFieldData(field.name, selectedList.join(";"));
282
- },
283
- onRemove: (selectedList, selectedItem) => {
284
- this.setFieldData(field.name, selectedList.join(";"));
285
- },
286
- disable: this.props.read_only,
287
- singleSelect: true
288
- }), this._error_label(field));
289
- };
290
- _multi_field = field => {
291
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
292
- showArrow: true,
293
- options: field.combo_list,
294
- isObject: false,
295
- displayValue: "key",
296
- selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name).split(";") : [],
297
- placeholder: field.placeholder,
298
- emptyRecordMsg: "",
299
- onSelect: (selectedList, selectedItem) => {
300
- this.setFieldData(field.name, selectedList.join(";"));
301
- },
302
- onRemove: (selectedList, selectedItem) => {
303
- this.setFieldData(field.name, selectedList.join(";"));
304
- },
305
- disable: this.props.read_only,
306
- singleSelect: false
307
- }), this._error_label(field));
308
- };
309
- _date_field = field => {
310
- return /*#__PURE__*/_react.default.createElement("div", {
311
- className: "date-div"
312
- }, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement("div", {
313
- className: "date-day-month-year-container-div"
314
- }, /*#__PURE__*/_react.default.createElement("div", {
315
- className: "date-day-div"
316
- }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
317
- showArrow: true,
318
- options: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"],
319
- isObject: false,
320
- displayValue: "key",
321
- selectedValues: this.getFieldData(field.name_hour) ? this.getFieldData(field.name_hour).split(";") : [],
322
- placeholder: field.placeholder,
323
- emptyRecordMsg: "",
324
- onSelect: (selectedList, selectedItem) => {
325
- this.handle_date_picker({
326
- fieldObject: field,
327
- sub_field_name: field.name_day,
328
- value: selectedList.join(";")
329
- });
330
- },
331
- onRemove: (selectedList, selectedItem) => {
332
- this.handle_date_picker({
333
- fieldObject: field,
334
- sub_field_name: field.name_day,
335
- value: selectedList.join(";")
336
- });
337
- },
338
- disable: this.props.read_only,
339
- singleSelect: true
340
- })), /*#__PURE__*/_react.default.createElement("div", {
341
- className: "date-month-div"
342
- }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
343
- showArrow: false,
344
- options: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
345
- isObject: false,
346
- displayValue: "key",
347
- selectedValues: this.getFieldData(field.name_min) ? this.getFieldData(field.name_min).split(";") : [],
348
- placeholder: field.placeholder,
349
- emptyRecordMsg: "",
350
- onSelect: (selectedList, selectedItem) => {
351
- this.handle_date_picker({
352
- fieldObject: field,
353
- sub_field_name: field.name_month,
354
- value: selectedList.join(";")
355
- });
356
- },
357
- onRemove: (selectedList, selectedItem) => {
358
- this.handle_date_picker({
359
- fieldObject: field,
360
- sub_field_name: field.name_month,
361
- value: selectedList.join(";")
362
- });
363
- },
364
- disable: this.props.read_only,
365
- singleSelect: true
366
- })), /*#__PURE__*/_react.default.createElement("div", {
367
- className: "date-year-div"
368
- }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
369
- showArrow: false,
370
- options: ["2025", "2026", "2027", "2028", "2030"],
371
- isObject: false,
372
- displayValue: "key",
373
- selectedValues: this.getFieldData(field.name_min) ? this.getFieldData(field.name_min).split(";") : [],
374
- placeholder: field.placeholder,
375
- emptyRecordMsg: "",
376
- onSelect: (selectedList, selectedItem) => {
377
- this.handle_date_picker({
378
- fieldObject: field,
379
- sub_field_name: field.name_year,
380
- value: selectedList.join(";")
381
- });
382
- },
383
- onRemove: (selectedList, selectedItem) => {
384
- this.handle_date_picker({
385
- fieldObject: field,
386
- sub_field_name: field.name_year,
387
- value: selectedList.join(";")
388
- });
389
- },
390
- disable: this.props.read_only,
391
- singleSelect: true
392
- }))), this._error_label(field));
393
- };
394
- _time_field = field => {
395
- return /*#__PURE__*/_react.default.createElement("div", {
396
- className: "time-div"
397
- }, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement("div", {
398
- className: "time-hour-and-min-container-div"
399
- }, /*#__PURE__*/_react.default.createElement("div", {
400
- className: "time-hour-div"
401
- }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
402
- showArrow: true,
403
- options: ["07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"],
404
- isObject: false,
405
- displayValue: "key",
406
- selectedValues: this.getFieldData(field.name_hour) ? this.getFieldData(field.name_hour).split(";") : [],
407
- placeholder: field.placeholder,
408
- emptyRecordMsg: "",
409
- onSelect: (selectedList, selectedItem) => {
410
- this.handle_time_picker({
411
- fieldObject: field,
412
- sub_field_name: field.name_hour,
413
- value: selectedList.join(";")
414
- });
415
- },
416
- onRemove: (selectedList, selectedItem) => {
417
- this.handle_time_picker({
418
- fieldObject: field,
419
- sub_field_name: field.name_hour,
420
- value: selectedList.join(";")
421
- });
422
- },
423
- disable: this.props.read_only,
424
- singleSelect: true
425
- })), /*#__PURE__*/_react.default.createElement("div", {
426
- className: "time-min-div"
427
- }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
428
- showArrow: false,
429
- options: ["00", "15", "20", "25", "30", "35", "40", "45", "50", "55"],
430
- isObject: false,
431
- displayValue: "key",
432
- selectedValues: this.getFieldData(field.name_min) ? this.getFieldData(field.name_min).split(";") : [],
433
- placeholder: field.placeholder,
434
- emptyRecordMsg: "",
435
- onSelect: (selectedList, selectedItem) => {
436
- this.handle_time_picker({
437
- fieldObject: field,
438
- sub_field_name: field.name_min,
439
- value: selectedList.join(";")
440
- });
441
- },
442
- onRemove: (selectedList, selectedItem) => {
443
- this.handle_time_picker({
444
- fieldObject: field,
445
- sub_field_name: field.name_min,
446
- value: selectedList.join(";")
447
- });
448
- },
449
- disable: this.props.read_only,
450
- singleSelect: true
451
- }))), this._error_label(field));
452
- };
453
- saveFormToDatasyncProcess = () => {
454
- //Everything sounds ok in Form, Go ahead
455
- let hasDataGuid = this.props.datasync_object && this.props.datasync_object.data_guid;
456
- (0, _datasyncCore.SaveDataTierToDatasync)(this.props.datasync_url, hasDataGuid ? this.props.datasync_object.data_guid : null,
457
- //data_guid
458
- this.local_data_blob,
459
- //p_o_data_blob,
460
- this.props.company_guid,
461
- //p_s_company_guid,
462
- this.props.table_guid,
463
- //p_s_table_guid,
464
- hasDataGuid ? this.props.datasync_object.createstamp : (0, _datasyncCommonLibrary.CTimeStamp)(),
465
- //p_dt_createstamp,
466
- hasDataGuid ? (0, _datasyncCommonLibrary.CTimeStamp)() : null,
467
- //p_dt_updatestamp,
468
- null,
469
- //p_dt_deletestamp,
470
- this.onFormSavedLocalHandler, this.onFormUpdatedLocalHandler, this.onFormFailedLocalHandler, null);
471
- };
472
-
473
- /** Form Handlers */
474
- onClickSubmitFormHandler = async event => {
475
- try {
476
- if (event) event.preventDefault();
477
-
478
- //Force all fields check
479
- let canSubmit = true;
480
- let iRow = 0;
481
- while (iRow < this.state.form.Rows.length && canSubmit) {
482
- let iCol = 0;
483
- while (iCol < this.state.form.Rows[iRow].Cols.length && canSubmit) {
484
- let ii = 0;
485
- while (ii < this.state.form.Rows[iRow].Cols[iCol].Fields.length && (canSubmit &= this.checkValidation(this.state.form.Rows[iRow].Cols[iCol].Fields[ii]))) {
486
- ii++;
487
- }
488
- iCol++;
489
- }
490
- iRow++;
491
- }
492
- if (!canSubmit) {
493
- let err_message = "Le formulaire comporte des erreurs !";
494
- if (this.props.onFormFailed) this.props.onFormFailed(err_message);else alert(`${err_message}`);
495
- return false;
496
- }
497
-
498
- //Invoke onFormSubmit props
499
-
500
- if (this.props.onFormSubmit) {
501
- if (globals.parameters.debugging) alert("onFormSubmit => filter log with AsyncDebug:: prefixe");
502
- //If props function return false then cancel form submit and do not save !
503
- this.props.onFormSubmit(this.local_data_blob);
504
- } else {
505
- //Call save anyway
506
- this.saveFormToDatasyncProcess();
507
- }
508
- } catch (error) {
509
- console.error(`onClickSubmitFormHandler raises "${error}"`);
510
- }
511
- };
512
- onFormSavedLocalHandler = blob => {
513
- if (this.props.onFormSaved) this.props.onFormSaved(blob);else console.error("DynamicForm3Tiers2.onFormSaved props is not defined !");
514
- //clear form
515
- if (this.props.clearOnSave) this.clearForm();
516
- //Call onTerminated if set by user
517
- if (this.props.onTerminated) this.props.onTerminated();
518
- };
519
- onFormUpdatedLocalHandler = blob => {
520
- try {
521
- if (this.props.onFormUpdated) this.props.onFormUpdated(blob);else console.error("DynamicForm3Tiers2.onFormUpdated props is not defined !");
522
- //clear form
523
- if (this.props.clearOnUpdate) this.clearForm();
524
- //Call onTerminated if set by user
525
- if (this.props.onTerminated) this.props.onTerminated();
526
- } catch (error) {
527
- console.error(`onFormUpdatedLocalHandler raises "${error}"`);
528
- }
529
- };
530
- onFormFailedLocalHandler = err => {
531
- if (this.props.onFormFailed) this.props.onFormFailed(err);else {
532
- console.error("DynamicForm3Tiers2.onFormFailed props is not defined !");
533
- alert("Erreur de sauvegarde !!!");
534
- }
535
- };
536
- checkValidation = pFieldObject => {
537
- /** Get field properties */
538
- let min = pFieldObject.min_length;
539
- let max = pFieldObject.max_length;
540
- let fieldValue = this.getFieldData(pFieldObject.name);
541
- let nextErrors = [];
542
-
543
- /** Check basic field validity except combo and radio */
544
- if (pFieldObject.required && fieldValue.trim().length <= 0) nextErrors.push(`obligatoire`);
545
- if (min > 0 && pFieldObject.required && fieldValue.trim().length < min) nextErrors.push(`trop court.`);
546
-
547
- //Captcha check
548
- if (pFieldObject.input_type.toLowerCase() == "captcha") {
549
- if (parseInt(fieldValue) !== this.state.captcha1 + this.state.captcha2) nextErrors.push(`calcul faux !`);
550
- }
551
-
552
- //Email check
553
- if (pFieldObject.input_type.toLowerCase() == "email") {
554
- if (!fieldValue.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i)) nextErrors.push(`Format de mail incorrect !`);
555
- }
556
-
557
- //Date check
558
- if (pFieldObject.input_type.toLowerCase() == "date") {
559
- if (!fieldValue.match(/^(\d{2}\/\d{2}\/\d{4})$/i)) nextErrors.push(`Format de date incorrect !`);
560
- }
561
- if (max > 0 && fieldValue.trim().length > max) nextErrors.push(`trop long, ${fieldValue.trim().length - max} caractères en trop.`);
562
- if (globals.parameters.debugging) {
563
- console.log(`pFieldObject.name->`, JSON.stringify(pFieldObject.name));
564
- console.log(`nextErrors->`, JSON.stringify(nextErrors));
565
- console.log(`-----------`);
566
- }
567
-
568
- //update error field
569
- this.setFieldError(pFieldObject, nextErrors.join("/"));
570
-
571
- //Return validation predicate
572
- return nextErrors.length === 0; //returns true if no error occurs
573
- };
574
- dynamicInputTextChangeHandler = eventObject => {
575
- if (eventObject && eventObject.event) eventObject.event.preventDefault();
576
- this.setFieldData(eventObject.fieldObject.name, eventObject.event.target.value);
577
-
578
- //Validate field
579
- this.checkValidation(eventObject.fieldObject);
580
- };
581
- dynamicInputNumericChangeHandler = eventObject => {
582
- if (eventObject && eventObject.event) eventObject.event.preventDefault();
583
- if (eventObject.event.target.value.length == 0 || !isNaN(eventObject.event.target.value) && !isNaN(parseFloat(eventObject.event.target.value))) this.setFieldData(eventObject.fieldObject.name, eventObject.event.target.value);else {
584
- if (globals.parameters.debugging) console.error(`Value rejected -> ${eventObject.event.target.value}`);
585
- }
586
- this.checkValidation(eventObject.fieldObject);
587
- };
588
- convertDate = p_o_day_month_year => {
589
- function pad(s) {
590
- return s < 10 ? '0' + s : s;
591
- }
592
- return {
593
- asString: [pad(p_o_day_month_year.day), pad(p_o_day_month_year.month), p_o_day_month_year.year].join('/'),
594
- asDate: {
595
- day: p_o_day_month_year.day,
596
- month: p_o_day_month_year.month,
597
- year: p_o_day_month_year.year
598
- }
599
- };
600
- };
601
- OLD_handle_date_picker = eventObject => {
602
- let p_oDate = eventObject.selection;
603
- //Convert date picker string as day month year object
604
- let dateConvertedObject = this.convertDate({
605
- day: p_oDate.getDate(),
606
- month: 1 + p_oDate.getMonth(),
607
- year: p_oDate.getFullYear()
608
- });
609
- this.setFieldData(eventObject.fieldObject.name, dateConvertedObject.asString);
610
- this.setFieldData(eventObject.fieldObject.name_day, dateConvertedObject.asDate.day);
611
- this.setFieldData(eventObject.fieldObject.name_month, dateConvertedObject.asDate.month);
612
- this.setFieldData(eventObject.fieldObject.name_year, dateConvertedObject.asDate.year);
613
-
614
- //Validate field
615
- this.checkValidation(eventObject.fieldObject);
616
- };
617
- handle_date_picker = eventObject => {
618
- //Set date
619
- this.setFieldData(eventObject.sub_field_name, eventObject.value);
620
- //update full date field
621
- this.setFieldData(eventObject.fieldObject.name, this.getFieldData(eventObject.fieldObject.name_day) + "/" + this.getFieldData(eventObject.fieldObject.name_month) + "/" + this.getFieldData(eventObject.fieldObject.name_year));
622
-
623
- //Validate field
624
- this.checkValidation(eventObject.fieldObject);
625
- };
626
- handle_time_picker = eventObject => {
627
- //Set hour or min
628
- this.setFieldData(eventObject.sub_field_name, eventObject.value);
629
- //update fulll time field
630
- this.setFieldData(eventObject.fieldObject.name, this.getFieldData(eventObject.fieldObject.name_hour) + ":" + this.getFieldData(eventObject.fieldObject.name_min));
631
-
632
- //Validate field
633
- this.checkValidation(eventObject.fieldObject);
634
- };
635
- _rowRendering = row => {
636
- try {
637
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Row, null, row.Cols.map((col, ii) => {
638
- return this._colRendering(col);
639
- }));
640
- } catch (err) {
641
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, "Error ", err.message);
642
- }
643
- };
644
- _colRendering = col => {
645
- try {
646
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, col.Fields.map((field, ii) => {
647
- return this._fieldRendering(field, ii);
648
- }));
649
- } catch (err) {
650
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, "Error ", err.message);
651
- }
652
- };
653
- _fieldRendering = (field, ii) => {
654
- try {
655
- //Do not display field if empty in read only mode
656
- if (this.props.read_only && (this.getFieldData(field.name) == null || !this.getFieldData(field.name) || this.getFieldData(field.name).trim().length == 0)) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
657
-
658
- //Do not display hidden field
659
- if (field.hidden && !this.props.show_hidden) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
660
- switch (field.input_type.toLowerCase()) {
661
- /** Dynamic fields */
662
- case "checkbox-DISABLED":
663
- return /*#__PURE__*/_react.default.createElement(_reactstrap.FormGroup, {
664
- check: true
665
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Label, {
666
- check: true
667
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
668
- defaultValue: "",
669
- type: "checkbox",
670
- readOnly: this.props.read_only ? this.props.read_only : false
671
- }), field.placeholder, /*#__PURE__*/_react.default.createElement("span", {
672
- className: "form-check-sign"
673
- })));
674
- case "checkbox":
675
- /* Checkbox is override with combobox */
676
- return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
677
- showArrow: true,
678
- options: ["Oui", "Non"],
679
- isObject: false,
680
- displayValue: "key",
681
- selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name).split(";") : [],
682
- placeholder: field.placeholder,
683
- emptyRecordMsg: "",
684
- onSelect: (selectedList, selectedItem) => {
685
- this.setFieldData(field.name, selectedList.join(";"));
686
- },
687
- onRemove: (selectedList, selectedItem) => {
688
- this.setFieldData(field.name, selectedList.join(";"));
689
- },
690
- disable: this.props.read_only,
691
- singleSelect: true
692
- }), this._error_label(field));
693
- case "blob":
694
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement("div", {
695
- className: "col-md-10"
696
- }, /*#__PURE__*/_react.default.createElement(_datasyncBlob.DsBlob, {
697
- readOnly: this.props.read_only ? this.props.read_only : false,
698
- Caption: `${this.getFieldPrompt(field)} ...`,
699
- data: this.getFieldData(field.name),
700
- uploadPicture: UploadFile => {
701
- this.setFieldData(field.name, UploadFile.data);
702
- this.checkValidation(field);
703
- },
704
- pictureStyle: "pic",
705
- buttonStyle: "btn btn-secondary",
706
- width: field.width ? field.width : null,
707
- height: field.height ? field.height : null,
708
- maxWidth: field.maxWidth ? field.maxWidth : null,
709
- maxHeight: field.maxHeight ? field.maxHeight : null,
710
- reduceImage: field.reduceImage ? field.reduceImage : null
711
- }), this._error_label(field)));
712
- case "email":
713
- return this._email_field(field);
714
- case "text":
715
- return this._text_field(field);
716
- case "memo":
717
- return this._memo_field(field);
718
- case "combo":
719
- case "radio":
720
- return this._combo_field(field);
721
- case "multi":
722
- return this._multi_field(field);
723
- case "date":
724
- //set day month and year fields
725
- if (!field.name_day) field.name_day = "__day";
726
- if (!field.name_month) field.name_month = "__month";
727
- if (!field.name_year) field.name_year = "__year";
728
- return this._date_field(field);
729
- case "time":
730
- //set day month and year fields
731
- if (!field.name_hour) field.name_hour = "__hour";
732
- if (!field.name_min) field.name_min = "__min";
733
- return this._time_field(field);
734
- case "numeric":
735
- return this._numeric_field_with_add_on(field, "*");
736
- case "amount":
737
- return this._numeric_field_with_add_on(field, "fa-euro");
738
- case "percent":
739
- return this._numeric_field_with_add_on(field, "%");
740
- case "captcha":
741
- return this._captcha_field(field);
742
- default:
743
- console.error("alert incorrect field type");
744
- }
745
- } catch (error) {
746
- console.error(`_fieldRendering raises "${error}"`);
747
- }
748
- };
749
- _cancelButton = () => {
750
- let buttonIsHidden = this.props.read_only || this.props.buttons_options && this.props.buttons_options.cancel_button_hidden;
751
- let buttonCaption = this.props.buttons_options && this.props.buttons_options.cancel_button_caption ? this.props.buttons_options.cancel_button_caption : "Annuler";
752
- if (buttonIsHidden) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);else {
753
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
754
- md: "4",
755
- sm: "4"
756
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
757
- block: true,
758
- className: "btn-round",
759
- color: "danger",
760
- outline: true,
761
- type: "reset",
762
- onClick: () => {
763
- this.clearForm();
764
- }
765
- }, buttonCaption));
766
- }
767
- };
768
- _submitButton = () => {
769
- let buttonIsHidden = this.props.read_only || this.props.buttons_options && this.props.buttons_options.submit_button_hidden;
770
- let buttonCaption = this.props.buttons_options && this.props.buttons_options.submit_button_caption ? this.props.buttons_options.submit_button_caption : "Soumettre";
771
- if (buttonIsHidden) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);else {
772
- return /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
773
- md: "4",
774
- sm: "4"
775
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
776
- block: true,
777
- className: "btn-round",
778
- color: "danger",
779
- outline: true,
780
- type: "submit",
781
- onClick: () => {
782
- this.onClickSubmitFormHandler();
783
- }
784
- }, buttonCaption));
785
- }
786
- };
787
- render = () => {
788
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !this.state.form && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h1", null, "Form loading...")), /*#__PURE__*/_react.default.createElement("form", null, this.state.form && this.state.form.Rows && this.state.form.Rows.map(row => {
789
- return this._rowRendering(row);
790
- })), /*#__PURE__*/_react.default.createElement(_reactstrap.Row, {
791
- className: "buttons-row"
792
- }, this._cancelButton(), this._submitButton(), this.props.custom_button_caption && /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
793
- md: "4",
794
- sm: "4"
795
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
796
- block: true,
797
- className: "btn-round",
798
- color: "primary",
799
- type: "submit",
800
- onClick: e => {
801
- if (this.props.custom_button_handler) this.props.custom_button_handler(this.state.form);else console.error("custom_button_handler unset !");
802
- }
803
- }, this.props.custom_button_caption)), this.props.custom_button_caption2 && /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
804
- md: "4",
805
- sm: "4"
806
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
807
- block: true,
808
- className: "btn-round",
809
- color: "primary",
810
- type: "submit",
811
- onClick: e => {
812
- if (this.props.custom_button_handler2) this.props.custom_button_handler2(this.state.form);else console.error("custom_button_handler2 unset !");
813
- }
814
- }, this.props.custom_button_caption2))));
815
- };
816
- }
817
- exports.DsDynamicForm = DsDynamicForm;
818
- ;