datasync-dynamic-form 1.0.27 → 1.0.28

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.
@@ -15,6 +15,8 @@ var _multiselectReactDropdown = _interopRequireDefault(require("multiselect-reac
15
15
  var _datasyncCore = require("datasync-core");
16
16
  var _datasyncCommonLibrary = require("datasync-common-library");
17
17
  var _datasyncBlob = require("datasync-blob");
18
+ var _reactDatepicker = _interopRequireWildcard(require("react-datepicker"));
19
+ require("react-datepicker/dist/react-datepicker.css");
18
20
  var _reactstrap = require("reactstrap");
19
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -105,24 +107,24 @@ class DsDynamicForm extends _react.Component {
105
107
  //Ensure props.foreign_keys is a json object - PMAB on 2025-04-10
106
108
  if (this.props.foreign_keys && typeof this.props.foreign_keys !== "object") throw new Error("foreign_keys must be a json object !");
107
109
  this.local_data_blob.data_tier = Object.assign(this.props.foreign_keys ? this.props.foreign_keys : {}, duplicate_data_tier);
108
- console.log("28:this.local_data_blob.data_tier ->", this.local_data_blob.data_tier);
109
- console.log("28:this.props.data_blob.data_tier ->", this.props.data_blob && this.props.data_blob.data_tier ? this.props.data_blob.data_tier : "props data_blob not set");
110
+ console.log("this.local_data_blob.data_tier ->", this.local_data_blob.data_tier);
111
+ console.log("this.props.data_blob.data_tier ->", this.props.data_blob && this.props.data_blob.data_tier ? this.props.data_blob.data_tier : "props data_blob not set");
110
112
  };
111
- getFieldData = pFieldObject => {
113
+ getFieldData = fieldName => {
112
114
  /** Return data value form field object */
113
- let nextFieldData = this.local_data_blob.data_tier[pFieldObject.name] ? this.local_data_blob.data_tier[pFieldObject.name] : "";
114
- if (globals.parameters.debugging) console.log("01:getFieldData[", pFieldObject.name, "] nextFieldData->", nextFieldData);
115
+ let nextFieldData = this.local_data_blob.data_tier[fieldName] ? this.local_data_blob.data_tier[fieldName] : "";
116
+ if (globals.parameters.debugging) console.log("getFieldData[", fieldName, "] nextFieldData->", nextFieldData);
115
117
  return nextFieldData;
116
118
  };
117
- setFieldData = (pFieldObject, value) => {
118
- this.local_data_blob.data_tier[pFieldObject.name] = value;
119
+ setFieldData = (fieldName, value) => {
120
+ this.local_data_blob.data_tier[fieldName] = value;
119
121
 
120
- //onFormChange handler return current form value to caller - PMAB onn 2025-02-03
122
+ //onFormChange handler return current form value to caller - PMAB on 2025-02-03
121
123
  if (this.props.onFormChange) this.props.onFormChange(this.local_data_blob.data_tier);
122
124
  if (globals.parameters.debugging) {
123
- console.log("01:setFieldData[", pFieldObject.name, "] value->", value);
124
- console.log("01:setFieldData[", pFieldObject.name, "] this.local_data_blob.data_tier ->", this.local_data_blob.data_tier);
125
- console.log("01:setFieldData[", pFieldObject.name, "] this.data_blob ->", this.local_data_blob);
125
+ console.log("setFieldData[", fieldName, "] value->", value);
126
+ console.log("setFieldData[", fieldName, "] this.local_data_blob.data_tier ->", this.local_data_blob.data_tier);
127
+ console.log("setFieldData[", fieldName, "] this.data_blob ->", this.local_data_blob);
126
128
  }
127
129
  };
128
130
  getSelectedFieldValues_V1 = pFieldObject => {
@@ -184,7 +186,7 @@ class DsDynamicForm extends _react.Component {
184
186
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
185
187
  readOnly: this.props.read_only ? this.props.read_only : false,
186
188
  type: field.input_type,
187
- value: this.getFieldData(field),
189
+ value: this.getFieldData(field.name),
188
190
  placeholder: field.placeholder,
189
191
  autocomplete: "on",
190
192
  id: field.name,
@@ -208,7 +210,7 @@ class DsDynamicForm extends _react.Component {
208
210
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
209
211
  readOnly: this.props.read_only ? this.props.read_only : false,
210
212
  type: field.input_type,
211
- value: this.getFieldData(field),
213
+ value: this.getFieldData(field.name),
212
214
  placeholder: field.placeholder,
213
215
  autocomplete: "on",
214
216
  id: field.name,
@@ -226,7 +228,7 @@ class DsDynamicForm extends _react.Component {
226
228
  return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
227
229
  readOnly: this.props.read_only ? this.props.read_only : false,
228
230
  type: field.input_type,
229
- value: this.getFieldData(field),
231
+ value: this.getFieldData(field.name),
230
232
  placeholder: field.placeholder,
231
233
  autocomplete: "off",
232
234
  onChange: e => {
@@ -242,7 +244,7 @@ class DsDynamicForm extends _react.Component {
242
244
  return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
243
245
  readOnly: this.props.read_only ? this.props.read_only : false,
244
246
  type: field.input_type,
245
- value: this.getFieldData(field),
247
+ value: this.getFieldData(field.name),
246
248
  placeholder: field.placeholder,
247
249
  pattern: "[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$",
248
250
  autocomplete: "on",
@@ -262,7 +264,7 @@ class DsDynamicForm extends _react.Component {
262
264
  className: "form-control",
263
265
  readOnly: this.props.read_only ? this.props.read_only : false,
264
266
  type: field.input_type,
265
- value: this.getFieldData(field),
267
+ value: this.getFieldData(field.name),
266
268
  placeholder: field.placeholder,
267
269
  rows: field.rows,
268
270
  onChange: e => {
@@ -280,14 +282,14 @@ class DsDynamicForm extends _react.Component {
280
282
  options: field.combo_list,
281
283
  isObject: false,
282
284
  displayValue: "key",
283
- selectedValues: this.getFieldData(field) ? this.getFieldData(field).split(";") : [],
285
+ selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name.name).split(";") : [],
284
286
  placeholder: field.placeholder,
285
287
  emptyRecordMsg: "",
286
288
  onSelect: (selectedList, selectedItem) => {
287
- this.setFieldData(field, selectedList.join(";"));
289
+ this.setFieldData(field.name, selectedList.join(";"));
288
290
  },
289
291
  onRemove: (selectedList, selectedItem) => {
290
- this.setFieldData(field, selectedList.join(";"));
292
+ this.setFieldData(field.name, selectedList.join(";"));
291
293
  },
292
294
  disable: this.props.read_only,
293
295
  singleSelect: true
@@ -299,19 +301,110 @@ class DsDynamicForm extends _react.Component {
299
301
  options: field.combo_list,
300
302
  isObject: false,
301
303
  displayValue: "key",
302
- selectedValues: this.getFieldData(field) ? this.getFieldData(field).split(";") : [],
304
+ selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name).split(";") : [],
303
305
  placeholder: field.placeholder,
304
306
  emptyRecordMsg: "",
305
307
  onSelect: (selectedList, selectedItem) => {
306
- this.setFieldData(field, selectedList.join(";"));
308
+ this.setFieldData(field.name, selectedList.join(";"));
307
309
  },
308
310
  onRemove: (selectedList, selectedItem) => {
309
- this.setFieldData(field, selectedList.join(";"));
311
+ this.setFieldData(field.name, selectedList.join(";"));
310
312
  },
311
313
  disable: this.props.read_only,
312
314
  singleSelect: false
313
315
  }), this._error_label(field));
314
316
  };
317
+ _date_field = field => {
318
+ return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(_reactDatepicker.default
319
+ //locale="fr"
320
+ , {
321
+ value: this.getFieldData(field.name),
322
+ placeholder: "dd-mm-yyyy",
323
+ onChange: p_oDate => {
324
+ this.handle_date_picker({
325
+ selection: p_oDate,
326
+ fieldObject: field
327
+ });
328
+ }
329
+ }), this._error_label(field));
330
+ };
331
+ _time_field = field => {
332
+ return /*#__PURE__*/_react.default.createElement("div", {
333
+ className: "time-div"
334
+ }, /*#__PURE__*/_react.default.createElement("div", {
335
+ className: "time-hour-div"
336
+ }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
337
+ showArrow: true,
338
+ options: ["07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"],
339
+ isObject: false,
340
+ displayValue: "key",
341
+ selectedValues: this.getFieldData(field.name + "__hour") ? this.getFieldData(field.name + "__hour").split(";") : [],
342
+ placeholder: field.placeholder,
343
+ emptyRecordMsg: "",
344
+ onSelect: (selectedList, selectedItem) => {
345
+ this.handle_time_picker({
346
+ fieldObject: field,
347
+ name: field.name,
348
+ sub_name: "__hour",
349
+ value: selectedList.join(";")
350
+ });
351
+ },
352
+ onRemove: (selectedList, selectedItem) => {
353
+ this.handle_time_picker({
354
+ fieldObject: field,
355
+ name: field.name,
356
+ sub_name: "__hour",
357
+ value: selectedList.join(";")
358
+ });
359
+ },
360
+ disable: this.props.read_only,
361
+ singleSelect: true
362
+ })), /*#__PURE__*/_react.default.createElement("div", {
363
+ className: "time-min-div"
364
+ }, /*#__PURE__*/_react.default.createElement(_multiselectReactDropdown.default, {
365
+ showArrow: false,
366
+ options: ["00", "15", "20", "25", "30", "35", "40", "45", "50", "55"],
367
+ isObject: false,
368
+ displayValue: "key",
369
+ selectedValues: this.getFieldData(field.name + "__min") ? this.getFieldData(field.name + "__min").split(";") : [],
370
+ placeholder: field.placeholder,
371
+ emptyRecordMsg: "",
372
+ onSelect: (selectedList, selectedItem) => {
373
+ this.handle_time_picker({
374
+ fieldObject: field,
375
+ name: field.name,
376
+ sub_name: "__min",
377
+ value: selectedList.join(";")
378
+ });
379
+ },
380
+ onRemove: (selectedList, selectedItem) => {
381
+ this.handle_time_picker({
382
+ fieldObject: field,
383
+ name: field.name,
384
+ sub_name: "__min",
385
+ value: selectedList.join(";")
386
+ });
387
+ },
388
+ disable: this.props.read_only,
389
+ singleSelect: true
390
+ })), this._error_label(field));
391
+ };
392
+ _time_field_DISABLED = field => {
393
+ return /*#__PURE__*/_react.default.createElement("div", null, this.getFieldLabelTitle(field), /*#__PURE__*/_react.default.createElement(TimePickerPackage, {
394
+ hour_title: "heure",
395
+ hour_placeholder: "heure",
396
+ minutes_title: "minutes",
397
+ minutes_placeholder: "minutes",
398
+ required: false,
399
+ onChange: timeValuePack => {
400
+ console.log("valuepack in EventForm ==>", timeValuePack);
401
+ this.setState({
402
+ hour: timeValuePack.hour,
403
+ minutes: timeValuePack.minutes
404
+ });
405
+ }
406
+ }), this._error_label(field));
407
+ };
315
408
  saveFormToDatasyncProcess = () => {
316
409
  //Everything sounds ok in Form, Go ahead
317
410
  let hasDataGuid = this.props.datasync_object && this.props.datasync_object.data_guid;
@@ -395,7 +488,7 @@ class DsDynamicForm extends _react.Component {
395
488
  /** Get field properties */
396
489
  let min = pFieldObject.min_length;
397
490
  let max = pFieldObject.max_length;
398
- let fieldValue = this.getFieldData(pFieldObject);
491
+ let fieldValue = this.getFieldData(pFieldObject.name);
399
492
  console.log("d3t3:checkValidation fieldValue->", fieldValue);
400
493
  let errorsFieldName = `err_${fieldName}`; /** Error data displayed in dedicated error label, beside input field in Form */
401
494
  let nextErrors = [];
@@ -414,6 +507,11 @@ class DsDynamicForm extends _react.Component {
414
507
  if (pFieldObject.input_type.toLowerCase() == "email") {
415
508
  if (!fieldValue.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i)) nextErrors.push(`Format de mail incorrect !`);
416
509
  }
510
+
511
+ //Date check
512
+ if (pFieldObject.input_type.toLowerCase() == "date") {
513
+ if (!fieldValue.match(/^(\d{2}\/\d{2}\/\d{4})$/i)) nextErrors.push(`Format de date incorrect !`);
514
+ }
417
515
  if (max > 0 && fieldValue.trim().length > max) nextErrors.push(`trop long, ${fieldValue.trim().length - max} caractères en trop.`);
418
516
  /* Special validation handlers
419
517
  if (parseInt(this.state[fieldName]) !== (this.state.v1 + this.state.v2))
@@ -446,7 +544,7 @@ class DsDynamicForm extends _react.Component {
446
544
  dynamicInputTextChangeHandler = eventObject => {
447
545
  if (eventObject && eventObject.event) eventObject.event.preventDefault();
448
546
  if (globals.parameters.debugging) console.log(`d3t:dynamicInputTextChangeHandler eventObject -> `, eventObject);
449
- this.setFieldData(eventObject.fieldObject, eventObject.event.target.value);
547
+ this.setFieldData(eventObject.fieldObject.name, eventObject.event.target.value);
450
548
 
451
549
  //Validate field
452
550
  this.checkValidation(eventObject.fieldObject);
@@ -454,12 +552,61 @@ class DsDynamicForm extends _react.Component {
454
552
  dynamicInputNumericChangeHandler = eventObject => {
455
553
  if (eventObject && eventObject.event) eventObject.event.preventDefault();
456
554
  if (globals.parameters.debugging) console.log(`d3t:dynamicInputNumericChangeHandler ${eventObject.fieldObject.name} Input field has changed`);
457
- if (eventObject.event.target.value.length == 0 || !isNaN(eventObject.event.target.value) && !isNaN(parseFloat(eventObject.event.target.value))) this.setFieldData(eventObject.fieldObject, eventObject.event.target.value);else {
555
+ 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 {
458
556
  if (globals.parameters.debugging) console.log(`d3t:Value rejected -> ${eventObject.event.target.value}`);
459
557
  }
460
558
 
461
559
  //Validate field
462
- if (globals.parameters.debugging) console.log(`#${eventObject.fieldObject.name} => ${this.getFieldData(eventObject.fieldObject)}`);
560
+ if (globals.parameters.debugging) console.log(`#${eventObject.fieldObject.name} => ${this.getFieldData(eventObject.fieldObject.name)}`);
561
+ this.checkValidation(eventObject.fieldObject);
562
+ };
563
+ convertDate = p_o_day_month_year => {
564
+ function pad(s) {
565
+ return s < 10 ? '0' + s : s;
566
+ }
567
+ return {
568
+ asString: [pad(p_o_day_month_year.day), pad(p_o_day_month_year.month), p_o_day_month_year.year].join('/'),
569
+ asDate: {
570
+ day: p_o_day_month_year.day,
571
+ month: p_o_day_month_year.month,
572
+ year: p_o_day_month_year.year
573
+ }
574
+ };
575
+ };
576
+ handle_date_picker = eventObject => {
577
+ let p_oDate = eventObject.selection;
578
+ //Convert date picker string as day month year object
579
+ let dateConvertedObject = this.convertDate({
580
+ day: p_oDate.getDate(),
581
+ month: 1 + p_oDate.getMonth(),
582
+ year: p_oDate.getFullYear()
583
+ });
584
+ if (globals.parameters.debugging) {
585
+ console.log("p_oDate =>", p_oDate);
586
+ console.log("dateConvertedObject =>", dateConvertedObject);
587
+ console.log("dateConvertedObject.asString =>", dateConvertedObject.asString);
588
+ }
589
+ this.setFieldData(eventObject.fieldObject.name, dateConvertedObject.asString);
590
+ this.setFieldData(eventObject.fieldObject.name + "__day", dateConvertedObject.asDate.day);
591
+ this.setFieldData(eventObject.fieldObject.name + "__month", dateConvertedObject.asDate.month);
592
+ this.setFieldData(eventObject.fieldObject.name + "__year", dateConvertedObject.asDate.year);
593
+
594
+ //Validate field
595
+ this.checkValidation(eventObject.fieldObject);
596
+ };
597
+ handle_time_picker = eventObject => {
598
+ //Set hour or min
599
+ this.setFieldData(eventObject.name + eventObject.sub_name, eventObject.value);
600
+ //update fulll time field
601
+ this.setFieldData(eventObject.name, this.getFieldData(eventObject.name + "__hour") + ":" + this.getFieldData(eventObject.name + "__min"));
602
+ if (true) {
603
+ console.clear();
604
+ console.log("__hour ->", this.getFieldData(eventObject.name + "__hour"));
605
+ console.log("__min ->", this.getFieldData(eventObject.name + "__min"));
606
+ console.log(eventObject.name, " ->", this.getFieldData(eventObject.name));
607
+ }
608
+
609
+ //Validate field
463
610
  this.checkValidation(eventObject.fieldObject);
464
611
  };
465
612
  _colRendering = col => {
@@ -488,7 +635,7 @@ class DsDynamicForm extends _react.Component {
488
635
  data_tier_migration = (field, ii) => {
489
636
  if (!this.props.data_blob) return; //Discard migration
490
637
  return;
491
- //data_tier_migration disbled
638
+ //data_tier_migration disabled
492
639
  console.log("09/07:data_tier_migration ### Migration check !!!");
493
640
  console.log("09/07:this.data_blob.modified ->", this.local_data_blob && this.local_data_blob.modified ? this.local_data_blob.modified : "null");
494
641
  //Check if migration required
@@ -536,7 +683,7 @@ class DsDynamicForm extends _react.Component {
536
683
  console.log("09/07:_fieldRendering -> data_tier_migration call");
537
684
  this.data_tier_migration(field, ii);
538
685
  //Do not display field if empty in read only mode
539
- if (this.props.read_only && (this.getFieldData(field) == null || !this.getFieldData(field) || this.getFieldData(field).trim().length == 0)) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
686
+ 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);
540
687
 
541
688
  //Do not display hidden field
542
689
  if (field.hidden && !this.props.show_hidden) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
@@ -561,14 +708,14 @@ class DsDynamicForm extends _react.Component {
561
708
  options: ["Oui", "Non"],
562
709
  isObject: false,
563
710
  displayValue: "key",
564
- selectedValues: this.getFieldData(field) ? this.getFieldData(field).split(";") : [],
711
+ selectedValues: this.getFieldData(field.name) ? this.getFieldData(field.name).split(";") : [],
565
712
  placeholder: field.placeholder,
566
713
  emptyRecordMsg: "",
567
714
  onSelect: (selectedList, selectedItem) => {
568
- this.setFieldData(field, selectedList.join(";"));
715
+ this.setFieldData(field.name, selectedList.join(";"));
569
716
  },
570
717
  onRemove: (selectedList, selectedItem) => {
571
- this.setFieldData(field, selectedList.join(";"));
718
+ this.setFieldData(field.name, selectedList.join(";"));
572
719
  },
573
720
  disable: this.props.read_only,
574
721
  singleSelect: true
@@ -579,9 +726,9 @@ class DsDynamicForm extends _react.Component {
579
726
  }, /*#__PURE__*/_react.default.createElement(_datasyncBlob.DsBlob, {
580
727
  readOnly: this.props.read_only ? this.props.read_only : false,
581
728
  Caption: `${this.getFieldPrompt(field)} ...`,
582
- data: this.getFieldData(field),
729
+ data: this.getFieldData(field.name),
583
730
  uploadPicture: UploadFile => {
584
- this.setFieldData(field, UploadFile.data);
731
+ this.setFieldData(field.name, UploadFile.data);
585
732
  this.checkValidation(field);
586
733
  },
587
734
  pictureStyle: "pic",
@@ -603,6 +750,10 @@ class DsDynamicForm extends _react.Component {
603
750
  return this._combo_field(field);
604
751
  case "multi":
605
752
  return this._multi_field(field);
753
+ case "date":
754
+ return this._date_field(field);
755
+ case "time":
756
+ return this._time_field(field);
606
757
  case "numeric":
607
758
  return this._numeric_field_with_add_on(field, "*");
608
759
  case "amount":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datasync-dynamic-form",
3
- "version": "1.0.27",
3
+ "version": "1.0.28",
4
4
  "description": "Datasync Dynamic Form component",
5
5
  "main": "./dist/components/DsDynamicForm",
6
6
  "types": "./dist/components/DsDynamicForm",
@@ -45,6 +45,8 @@
45
45
  "datasync-blob": "^1.0.2",
46
46
  "datasync-common-library": "^1.0.5",
47
47
  "datasync-core": "^1.0.28",
48
+ "datasync-dynamic-form": "^1.0.27",
49
+ "react-datepicker": "^8.3.0",
48
50
  "universal-cookie": "^7.2.2"
49
51
  }
50
52
  }