@magic-xpa/angular 4.1000.0-dev4100.32 → 4.1000.0-dev4100.320

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.
Files changed (58) hide show
  1. package/esm2020/src/magic.core.module.mjs +7 -9
  2. package/esm2020/src/services/accessor.magic.service.mjs +25 -3
  3. package/esm2020/src/services/magic-color.service.mjs +4 -4
  4. package/esm2020/src/services/subform.magic.service.mjs +1 -1
  5. package/esm2020/src/services/table.magic.service.mjs +5 -2
  6. package/esm2020/src/services/task.magics.service.mjs +18 -5
  7. package/esm2020/src/ui/components/base-magic-alert.component.mjs +3 -7
  8. package/esm2020/src/ui/components/base-magic-confirm.component.mjs +3 -7
  9. package/esm2020/src/ui/components/magic-alert.component.mjs +3 -35
  10. package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +3 -39
  11. package/esm2020/src/ui/directives/NonMagicControlDirective.mjs +6 -6
  12. package/esm2020/src/ui/directives/magic/combobox.magic.directive.mjs +11 -1
  13. package/esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs +3 -3
  14. package/esm2020/src/ui/directives/magic.directive.mjs +11 -11
  15. package/esm2020/src/ui/magic-modal/base-magic-overlay-container.mjs +1 -1
  16. package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +4 -18
  17. package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +4 -4
  18. package/esm2020/src/ui/magic-root.component.mjs +4 -38
  19. package/esm2020/src/ui/mgerror.magic.component.mjs +9 -9
  20. package/esm2020/src/ui/router-container.magic.component.mjs +4 -4
  21. package/esm2020/src/ui/subform.magic.component.mjs +4 -4
  22. package/esm2020/src/ui/task-base.magic.component.mjs +8 -2
  23. package/fesm2015/magic-xpa-angular.mjs +116 -191
  24. package/fesm2015/magic-xpa-angular.mjs.map +1 -1
  25. package/fesm2020/magic-xpa-angular.mjs +116 -191
  26. package/fesm2020/magic-xpa-angular.mjs.map +1 -1
  27. package/package.json +8 -8
  28. package/src/services/table.magic.service.d.ts +2 -0
  29. package/src/services/task.magics.service.d.ts +1 -0
  30. package/src/ui/components/base-magic-alert.component.d.ts +1 -1
  31. package/src/ui/components/base-magic-confirm.component.d.ts +1 -1
  32. package/src/ui/components/magic-alert.component.d.ts +1 -1
  33. package/src/ui/components/magic-confirmation-box.component.d.ts +1 -1
  34. package/src/ui/directives/NonMagicControlDirective.d.ts +1 -1
  35. package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +1 -1
  36. package/src/ui/directives/magic/checkbox.magic.directive.d.ts +1 -1
  37. package/src/ui/directives/magic/combobox.magic.directive.d.ts +2 -1
  38. package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +1 -1
  39. package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +1 -1
  40. package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +1 -1
  41. package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +1 -1
  42. package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +1 -1
  43. package/src/ui/directives/magic/row.magic.directive.d.ts +1 -1
  44. package/src/ui/directives/magic-focus.directive.d.ts +1 -1
  45. package/src/ui/directives/magic.directive.d.ts +2 -2
  46. package/src/ui/directives/magicViewContainerRef.directive.d.ts +1 -1
  47. package/src/ui/directives/mgformat.magic.directive.d.ts +1 -1
  48. package/src/ui/directives/range-validator.magic.directive.d.ts +1 -1
  49. package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +1 -1
  50. package/src/ui/magic-modal/magic-overlay-container.d.ts +1 -1
  51. package/src/ui/magic-root.component.d.ts +1 -1
  52. package/src/ui/mgerror.magic.component.d.ts +1 -1
  53. package/src/ui/pipes/date.magic.pipe.d.ts +1 -1
  54. package/src/ui/pipes/time.magic.pipe.d.ts +1 -1
  55. package/src/ui/router-container.magic.component.d.ts +1 -1
  56. package/src/ui/subform.magic.component.d.ts +1 -1
  57. package/src/ui/task-base.magic.component.d.ts +2 -1
  58. package/magic-xpa-angular.d.ts +0 -2
@@ -610,6 +610,9 @@ SubformMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: SubformMagicServic
610
610
  })();
611
611
 
612
612
  class RouterContainerMagicComponent {
613
+ static get LastRoute() {
614
+ return RouterContainerMagicComponent.lastRoute;
615
+ }
613
616
  constructor(activatedRoute, router, magic, containerTaskService, componentFactoryResolver, viewContainerRef, componentList, pendingCommandsCollector, routerCommandsMagicService) {
614
617
  this.activatedRoute = activatedRoute;
615
618
  this.router = router;
@@ -623,9 +626,6 @@ class RouterContainerMagicComponent {
623
626
  this.componentRef = null;
624
627
  this.parentMgSubformService = null;
625
628
  }
626
- static get LastRoute() {
627
- return RouterContainerMagicComponent.lastRoute;
628
- }
629
629
  ngOnInit() {
630
630
  let subformMagicService = SubformMagicService.currentCallerMgSubformServiceRef;
631
631
  let currentActiveRoute = SubformMagicService.getRelativeRoute(this.activatedRoute);
@@ -824,15 +824,11 @@ class BaseMagicConfirmComponent {
824
824
  }
825
825
  }
826
826
  BaseMagicConfirmComponent.ɵfac = function BaseMagicConfirmComponent_Factory(t) { return new (t || BaseMagicConfirmComponent)(); };
827
- BaseMagicConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BaseMagicConfirmComponent, selectors: [["mg-base-alert"]], inputs: { title: "title", message: "message" }, outputs: { onClose: "onClose" }, decls: 0, vars: 0, template: function BaseMagicConfirmComponent_Template(rf, ctx) { }, styles: [""] });
827
+ BaseMagicConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BaseMagicConfirmComponent, selectors: [["mg-base-alert"]], inputs: { title: "title", message: "message" }, outputs: { onClose: "onClose" }, decls: 0, vars: 0, template: function BaseMagicConfirmComponent_Template(rf, ctx) { } });
828
828
  (function () {
829
829
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseMagicConfirmComponent, [{
830
830
  type: Component,
831
- args: [{
832
- selector: 'mg-base-alert',
833
- template: '',
834
- styles: ['']
835
- }]
831
+ args: [{ selector: 'mg-base-alert', template: '' }]
836
832
  }], null, { title: [{
837
833
  type: Input
838
834
  }], message: [{
@@ -851,15 +847,11 @@ class BaseMagicAlertComponent {
851
847
  }
852
848
  }
853
849
  BaseMagicAlertComponent.ɵfac = function BaseMagicAlertComponent_Factory(t) { return new (t || BaseMagicAlertComponent)(); };
854
- BaseMagicAlertComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BaseMagicAlertComponent, selectors: [["mg-base-alert"]], inputs: { title: "title", message: "message" }, outputs: { onClose: "onClose" }, decls: 0, vars: 0, template: function BaseMagicAlertComponent_Template(rf, ctx) { }, styles: [""] });
850
+ BaseMagicAlertComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BaseMagicAlertComponent, selectors: [["mg-base-alert"]], inputs: { title: "title", message: "message" }, outputs: { onClose: "onClose" }, decls: 0, vars: 0, template: function BaseMagicAlertComponent_Template(rf, ctx) { } });
855
851
  (function () {
856
852
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseMagicAlertComponent, [{
857
853
  type: Component,
858
- args: [{
859
- selector: 'mg-base-alert',
860
- template: '',
861
- styles: ['']
862
- }]
854
+ args: [{ selector: 'mg-base-alert', template: '' }]
863
855
  }], null, { title: [{
864
856
  type: Input
865
857
  }], message: [{
@@ -993,13 +985,11 @@ MagicOverlayContainerWrapper.ɵcmp = i0.ɵɵdefineComponent({ type: MagicOverlay
993
985
  i0.ɵɵelement(6, "div", 5);
994
986
  i0.ɵɵelementEnd();
995
987
  }
996
- }, directives: [MagicFocusDirective, MagicViewContainerRef], styles: [".overlay-container-wrapper-background[_ngcontent-%COMP%]{position:fixed;z-index:999;inset:0}"] });
988
+ }, dependencies: [MagicFocusDirective, MagicViewContainerRef], styles: [".overlay-container-wrapper-background[_ngcontent-%COMP%]{position:fixed;z-index:999;inset:0}"] });
997
989
  (function () {
998
990
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicOverlayContainerWrapper, [{
999
991
  type: Component,
1000
- args: [{
1001
- selector: 'app-magic-overlay-container-wrapper',
1002
- template: `
992
+ args: [{ selector: 'app-magic-overlay-container-wrapper', template: `
1003
993
  <div>
1004
994
  <div class="overlay-container-wrapper-background" tabIndex="0" style="width: 0px; height: 0px;" magicFocus></div>
1005
995
  <div class="overlay-container-wrapper-background" #overlayContainerWrapper>
@@ -1008,19 +998,7 @@ MagicOverlayContainerWrapper.ɵcmp = i0.ɵɵdefineComponent({ type: MagicOverlay
1008
998
  </div>
1009
999
  <div class="overlay-container-wrapper-background" tabIndex="0" style="width: 0px; height: 0px;" ></div>
1010
1000
  </div>
1011
- `,
1012
- styles: [`
1013
- .overlay-container-wrapper-background {
1014
- /* modal background fixed across whole screen */
1015
- position: fixed;
1016
- top: 0;
1017
- z-index: 999;
1018
- right: 0;
1019
- bottom: 0;
1020
- left: 0;
1021
- }
1022
- `]
1023
- }]
1001
+ `, styles: [".overlay-container-wrapper-background{position:fixed;z-index:999;inset:0}\n"] }]
1024
1002
  }], function () { return [{ type: ComponentListMagicService }, { type: MagicLazyLoaderService }, { type: i0.Injector }, { type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.Compiler }]; }, { Component: [{
1025
1003
  type: Input
1026
1004
  }], Parameters: [{
@@ -1082,7 +1060,7 @@ function MagicOverlayContainer_button_2_Template(rf, ctx) {
1082
1060
  if (rf & 1) {
1083
1061
  const _r5 = i0.ɵɵgetCurrentView();
1084
1062
  i0.ɵɵelementStart(0, "button", 8);
1085
- i0.ɵɵlistener("click", function MagicOverlayContainer_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.OnClose(); });
1063
+ i0.ɵɵlistener("click", function MagicOverlayContainer_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.OnClose()); });
1086
1064
  i0.ɵɵtext(1, "X");
1087
1065
  i0.ɵɵelementEnd();
1088
1066
  }
@@ -1093,7 +1071,7 @@ function MagicOverlayContainer_div_5_Template(rf, ctx) {
1093
1071
  i0.ɵɵelementStart(0, "div", 9, 10);
1094
1072
  i0.ɵɵtext(2);
1095
1073
  i0.ɵɵelementStart(3, "button", 11);
1096
- i0.ɵɵlistener("click", function MagicOverlayContainer_div_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.OnClose(); });
1074
+ i0.ɵɵlistener("click", function MagicOverlayContainer_div_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.OnClose()); });
1097
1075
  i0.ɵɵtext(4, "X");
1098
1076
  i0.ɵɵelementEnd()();
1099
1077
  }
@@ -1206,7 +1184,7 @@ MagicOverlayContainer.ɵcmp = i0.ɵɵdefineComponent({ type: MagicOverlayContain
1206
1184
  i0.ɵɵadvance(1);
1207
1185
  i0.ɵɵproperty("ngStyle", ctx.getClientAreaStyles());
1208
1186
  }
1209
- }, directives: [i1.NgIf, i1.NgStyle, MagicViewContainerRef], styles: [".modal-foreground[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#fff}.modal-background[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#000;opacity:.75}.modal-header[_ngcontent-%COMP%]{background-color:beige;border-bottom:2px solid red}"] });
1187
+ }, dependencies: [i1.NgIf, i1.NgStyle, MagicViewContainerRef], styles: [".modal-foreground[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#fff}.modal-background[_ngcontent-%COMP%]{position:fixed;inset:0;background-color:#000;opacity:.75}.modal-header[_ngcontent-%COMP%]{background-color:beige;border-bottom:2px solid red}"] });
1210
1188
  (function () {
1211
1189
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicOverlayContainer, [{
1212
1190
  type: Component,
@@ -1281,46 +1259,14 @@ MagicAlertComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicAlertComponent,
1281
1259
  (function () {
1282
1260
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicAlertComponent, [{
1283
1261
  type: Component,
1284
- args: [{
1285
- selector: 'sample-magic-alert-component',
1286
- template: `<div>
1262
+ args: [{ selector: 'sample-magic-alert-component', template: `<div>
1287
1263
  <div class="mg-message-background">
1288
1264
  <h2> {{title}}</h2>
1289
1265
  <p>{{message}} </p>
1290
1266
 
1291
1267
  <button (click)="OnClose()">OK</button>
1292
1268
  </div>
1293
- </div>`,
1294
- styles: [`
1295
- .mg-message-background {
1296
- background-color: #F5F5F5;
1297
- text-align: center;
1298
- width: 40%;
1299
- font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
1300
- padding: 17px;
1301
- border-radius: 5px;
1302
- text-align: center;
1303
- margin-top: 10% ;
1304
- margin-left: auto;
1305
- margin-right: auto;
1306
- border: 1px solid gray;
1307
- }
1308
-
1309
- button {
1310
- background-color: #8CD4F5;
1311
- color: white;
1312
- border: none;
1313
- box-shadow: none;
1314
- font-size: 17px;
1315
- font-weight: 500;
1316
- -webkit-border-radius: 4px;
1317
- border-radius: 5px;
1318
- padding: 10px 32px;
1319
- margin: 26px 5px 0 5px;
1320
- cursor: pointer;
1321
- }
1322
- `]
1323
- }]
1269
+ </div>`, styles: [".mg-message-background{background-color:#f5f5f5;width:40%;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;padding:17px;border-radius:5px;text-align:center;margin-top:10%;margin-left:auto;margin-right:auto;border:1px solid gray}button{background-color:#8cd4f5;color:#fff;border:none;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:26px 5px 0;cursor:pointer}\n"] }]
1324
1270
  }], null, null);
1325
1271
  })();
1326
1272
 
@@ -1353,9 +1299,7 @@ MagicConfirmationBoxComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicConfir
1353
1299
  (function () {
1354
1300
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicConfirmationBoxComponent, [{
1355
1301
  type: Component,
1356
- args: [{
1357
- selector: 'sample-magic-confirmation-box',
1358
- template: `<div>
1302
+ args: [{ selector: 'sample-magic-confirmation-box', template: `<div>
1359
1303
  <div class="mg-message-background">
1360
1304
  <h2> {{title}}</h2>
1361
1305
  {{message}}
@@ -1365,41 +1309,7 @@ MagicConfirmationBoxComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicConfir
1365
1309
  <button (click)="OnClose(true)">OK</button>
1366
1310
  <button class="cancel" (click)="OnClose(false)">Cancel</button>
1367
1311
  </div>
1368
- </div>`,
1369
- styles: [`
1370
- .mg-message-background {
1371
- background-color: #F5F5F5;
1372
- text-align: center;
1373
- width: 40%;
1374
- font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
1375
- padding: 17px;
1376
- border-radius: 5px;
1377
- text-align: center;
1378
- margin-top: 10% ;
1379
- margin-left: auto;
1380
- margin-right: auto;
1381
- border: 1px solid gray;
1382
- }
1383
-
1384
- button {
1385
- background-color: #8CD4F5;
1386
- color: white;
1387
- border: none;
1388
- box-shadow: none;
1389
- font-size: 17px;
1390
- font-weight: 500;
1391
- -webkit-border-radius: 4px;
1392
- border-radius: 5px;
1393
- padding: 10px 32px;
1394
- margin: 26px 5px 0 5px;
1395
- cursor: pointer;
1396
- }
1397
-
1398
- button.cancel {
1399
- background-color: #C1C1C1;
1400
- }
1401
- `]
1402
- }]
1312
+ </div>`, styles: [".mg-message-background{background-color:#f5f5f5;width:40%;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;padding:17px;border-radius:5px;text-align:center;margin-top:10%;margin-left:auto;margin-right:auto;border:1px solid gray}button{background-color:#8cd4f5;color:#fff;border:none;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:26px 5px 0;cursor:pointer}button.cancel{background-color:#c1c1c1}\n"] }]
1403
1313
  }], null, null);
1404
1314
  })();
1405
1315
 
@@ -1629,6 +1539,7 @@ class TaskMagicService {
1629
1539
  this.OnSelectedRowChanged = new EventEmitter();
1630
1540
  this.customPropertiesSubject = new Subject();
1631
1541
  this.recordsCountChangeSubject = new Subject();
1542
+ this.mgLoadSubject = new Subject();
1632
1543
  this.oldPageSize = 0;
1633
1544
  this.Records.setGuiTopIndex(0);
1634
1545
  this.mgInputDateFormat = null;
@@ -1881,6 +1792,11 @@ class TaskMagicService {
1881
1792
  }
1882
1793
  }
1883
1794
  break;
1795
+ case CommandType.SET_CHUNK_SIZE:
1796
+ if (!isUndefined(command.number)) {
1797
+ this.tableService.setChunkSize(command.number);
1798
+ }
1799
+ break;
1884
1800
  case CommandType.SET_RECORDS_BEFORE_CURRENT_VIEW:
1885
1801
  this.updateRecordsBeforeCurrentView(command.number);
1886
1802
  break;
@@ -1908,7 +1824,8 @@ class TaskMagicService {
1908
1824
  break;
1909
1825
  case CommandType.SET_PROPERTY:
1910
1826
  this.handleSetProperty(command, isTableChild);
1911
- if (command.Operation == HtmlProperties.ReadOnly)
1827
+ if (command.Operation == HtmlProperties.ReadOnly ||
1828
+ command.Operation == HtmlProperties.ItemsList)
1912
1829
  this.refreshDom.next(command);
1913
1830
  break;
1914
1831
  case CommandType.PROP_SET_USER_PROPERTY:
@@ -1963,6 +1880,9 @@ class TaskMagicService {
1963
1880
  case CommandType.SET_FOCUS:
1964
1881
  this.refreshDom.next(command);
1965
1882
  break;
1883
+ case CommandType.SET_WC_IDLE:
1884
+ this.mgLoadSubject.next();
1885
+ break;
1966
1886
  }
1967
1887
  }
1968
1888
  customValidator(rowid, id) {
@@ -2021,7 +1941,10 @@ class TaskMagicService {
2021
1941
  return val;
2022
1942
  }
2023
1943
  case StorageAttribute.NUMERIC:
2024
- return +val;
1944
+ if (isUndefined(val))
1945
+ return val;
1946
+ else
1947
+ return (val != null) ? +val : null;
2025
1948
  default:
2026
1949
  return val;
2027
1950
  }
@@ -2158,10 +2081,10 @@ class TaskMagicService {
2158
2081
  mgOnRadioSelectionChanged(idx) {
2159
2082
  let result = this.getFormControl('0', idx);
2160
2083
  let guiEvent = getGuiEventObj('selectionchanged', idx, 0);
2161
- if (typeof result.value !== 'string')
2084
+ if (typeof result.value !== 'number')
2162
2085
  guiEvent.Value = result.value.index;
2163
2086
  else
2164
- guiEvent.Value = result.value;
2087
+ guiEvent.Value = result.value.toString();
2165
2088
  this.insertEvent(guiEvent);
2166
2089
  }
2167
2090
  close() {
@@ -2222,7 +2145,10 @@ class TableMagicService {
2222
2145
  refreshDataSource() {
2223
2146
  }
2224
2147
  getPageSize() {
2225
- return 10;
2148
+ return this.chunkSize;
2149
+ }
2150
+ setChunkSize(size) {
2151
+ this.chunkSize = size;
2226
2152
  }
2227
2153
  getMaxRowsInTable() {
2228
2154
  return this.task.Records.list.length;
@@ -2310,6 +2236,9 @@ const SYSTEM_BG = 4;
2310
2236
  const SYSTEM_FG_AND_SYSTEM_BG = 6;
2311
2237
  const TRANSPERENT_BG = 1;
2312
2238
  class MagicColorService {
2239
+ getColorFilePath() {
2240
+ return 'assets/' + this.colorFileName;
2241
+ }
2313
2242
  constructor(http, colorFile1 = 'clr_rnt.eng') {
2314
2243
  this.http = http;
2315
2244
  this.colorFileName = 'clr_rnt.eng';
@@ -2319,9 +2248,6 @@ class MagicColorService {
2319
2248
  else
2320
2249
  this.colorFileName = 'clr_rnt.eng';
2321
2250
  }
2322
- getColorFilePath() {
2323
- return 'assets/' + this.colorFileName;
2324
- }
2325
2251
  getColorData() {
2326
2252
  if (!this.colorsData) {
2327
2253
  this.http.get(this.getColorFilePath(), { responseType: 'text' }).subscribe(resp => {
@@ -2638,8 +2564,30 @@ class AccessorMagicService {
2638
2564
  let c = this.task.getFormControl(rowId, id);
2639
2565
  if (c.hasError('required'))
2640
2566
  return 'Control must be updated.';
2641
- if (c.hasError('pattern'))
2642
- return 'Required pattern is : ' + c.errors.pattern.requiredPattern;
2567
+ if (c.hasError('pattern')) {
2568
+ if (c.errors.pattern.actualValue < 0 && !c.errors.pattern.requiredPattern.includes('-'))
2569
+ return 'Value must be non-negative';
2570
+ if (c.errors.pattern.requiredPattern.includes('.')) {
2571
+ const numericFormat = Math.abs(c.errors.pattern.actualValue).toString().split('.')[0];
2572
+ const decimalFormat = Math.abs(c.errors.pattern.actualValue).toString().split('.')[1];
2573
+ const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
2574
+ const actualDecimalLimit = c.errors.pattern.requiredPattern.match(/(?:[^,]+,){2}(\d+)/)[1];
2575
+ if (numericFormat.length > actualNumericLimit || decimalFormat.length > actualDecimalLimit) {
2576
+ return "Numeric format is limited to " + actualNumericLimit + "." + actualDecimalLimit + " digits";
2577
+ }
2578
+ }
2579
+ else if (!c.errors.pattern.requiredPattern.includes('.') && !Number.isInteger(c.errors.pattern.actualValue)) {
2580
+ const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
2581
+ return "Numeric format is limited to " + actualNumericLimit + "." + 0 + " digits";
2582
+ }
2583
+ else {
2584
+ const numericFormat = Math.abs(c.errors.pattern.actualValue).toString();
2585
+ const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
2586
+ if (numericFormat.length > actualNumericLimit) {
2587
+ return "Numeric format is limited to " + actualNumericLimit + "." + 0 + " digits";
2588
+ }
2589
+ }
2590
+ }
2643
2591
  if (c.hasError('rangevalidator'))
2644
2592
  return c.errors.rangevalidator.errorMsg;
2645
2593
  if (c.hasError('maxlength'))
@@ -2779,6 +2727,9 @@ class TaskBaseMagicComponent {
2779
2727
  this.task.recordsCountChangeSubject.pipe().subscribe(value => {
2780
2728
  this.RecordsCountChanged(value);
2781
2729
  });
2730
+ this.task.mgLoadSubject.pipe().subscribe(value => {
2731
+ this.mgOnLoad();
2732
+ });
2782
2733
  }
2783
2734
  createFormControlsAccessor(formGroup) { }
2784
2735
  setInputDateFormat() { }
@@ -2786,11 +2737,13 @@ class TaskBaseMagicComponent {
2786
2737
  }
2787
2738
  RecordsCountChanged(recordsCount) {
2788
2739
  }
2740
+ mgOnLoad() {
2741
+ }
2789
2742
  ngAfterViewInit() {
2790
2743
  this.mgSub.init();
2791
2744
  }
2792
2745
  ngAfterContentChecked() {
2793
- if (this.task.oldPageSize != this.tableService.getPageSize()) {
2746
+ if (!isNullOrUndefined(this.tableService.getPageSize()) && this.task.oldPageSize != this.tableService.getPageSize()) {
2794
2747
  this.task.resize(this.tableService.getPageSize(), 0);
2795
2748
  this.task.oldPageSize = this.tableService.getPageSize();
2796
2749
  }
@@ -2872,6 +2825,16 @@ RowMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: RowMagicDirective, sele
2872
2825
  })();
2873
2826
 
2874
2827
  class MagicDirective {
2828
+ set magic(val) {
2829
+ this.id = val;
2830
+ this.selector = "magic";
2831
+ }
2832
+ ;
2833
+ set eventsOnly(val) {
2834
+ console.log("eventsOnly");
2835
+ this.eventsOnlyVal = true;
2836
+ }
2837
+ ;
2875
2838
  constructor(_task, element, renderer, vcRef, magicRow) {
2876
2839
  this._task = _task;
2877
2840
  this.element = element;
@@ -2884,16 +2847,6 @@ class MagicDirective {
2884
2847
  if (!(typeof magicRow === "undefined" || magicRow === null))
2885
2848
  this.rowId = magicRow.rowId;
2886
2849
  }
2887
- set magic(val) {
2888
- this.id = val;
2889
- this.selector = "magic";
2890
- }
2891
- ;
2892
- set eventsOnly(val) {
2893
- console.log("eventsOnly");
2894
- this.eventsOnlyVal = true;
2895
- }
2896
- ;
2897
2850
  get task() {
2898
2851
  return this._task;
2899
2852
  }
@@ -3073,11 +3026,11 @@ MagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MagicDirective, selectors:
3073
3026
  })();
3074
3027
 
3075
3028
  class NoControlMagicDirective extends MagicDirective {
3029
+ set magic(val) { this.id = val; this.selector = 'magicnc'; }
3030
+ ;
3076
3031
  constructor(_task, element, renderer, vcRef, magicRow) {
3077
3032
  super(_task, element, renderer, vcRef, magicRow);
3078
3033
  }
3079
- set magic(val) { this.id = val; this.selector = 'magicnc'; }
3080
- ;
3081
3034
  regEvents() {
3082
3035
  super.regEvents();
3083
3036
  if (this.htmlElement instanceof HTMLSelectElement) {
@@ -3703,14 +3656,14 @@ function SubformMagicComponent_ndc_dynamic_0_Template(rf, ctx) {
3703
3656
  }
3704
3657
  }
3705
3658
  class SubformMagicComponent {
3659
+ set magic(val) { this.id = val; }
3660
+ ;
3706
3661
  constructor(vcRef, mgSub) {
3707
3662
  this.vcRef = vcRef;
3708
3663
  this.mgSub = mgSub;
3709
3664
  this.component = null;
3710
3665
  this.component = (this.vcRef._hostLView).find(v => !isNullOrUndefined(v));
3711
3666
  }
3712
- set magic(val) { this.id = val; }
3713
- ;
3714
3667
  get Component() {
3715
3668
  return this.mgSub.mgGetComp(this.id);
3716
3669
  }
@@ -3726,7 +3679,7 @@ SubformMagicComponent.ɵcmp = i0.ɵɵdefineComponent({ type: SubformMagicCompone
3726
3679
  if (rf & 2) {
3727
3680
  i0.ɵɵproperty("ngIf", ctx.Component);
3728
3681
  }
3729
- }, directives: [i1.NgIf, i3.DynamicComponent, i3.DynamicIoDirective], encapsulation: 2 });
3682
+ }, dependencies: [i1.NgIf, i3.DynamicComponent, i3.DynamicIoDirective], encapsulation: 2 });
3730
3683
  (function () {
3731
3684
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SubformMagicComponent, [{
3732
3685
  type: Component,
@@ -3775,13 +3728,6 @@ function ErrorMagicComponent_div_0_Template(rf, ctx) {
3775
3728
  }
3776
3729
  const _c1 = ["*"];
3777
3730
  class ErrorMagicComponent {
3778
- constructor(_task, mgService, changeDetectorRef) {
3779
- this._task = _task;
3780
- this.mgService = mgService;
3781
- this.changeDetectorRef = changeDetectorRef;
3782
- this.defaultDisplay = true;
3783
- this.rowId = "0";
3784
- }
3785
3731
  set magic(val) {
3786
3732
  this.id = val;
3787
3733
  }
@@ -3795,6 +3741,13 @@ class ErrorMagicComponent {
3795
3741
  this.changeDetectorRef.detectChanges();
3796
3742
  }
3797
3743
  ;
3744
+ constructor(_task, mgService, changeDetectorRef) {
3745
+ this._task = _task;
3746
+ this.mgService = mgService;
3747
+ this.changeDetectorRef = changeDetectorRef;
3748
+ this.defaultDisplay = true;
3749
+ this.rowId = "0";
3750
+ }
3798
3751
  isEmpty(element) {
3799
3752
  const nodes = element.childNodes;
3800
3753
  for (let i = 0; i < nodes.length; i++) {
@@ -3843,7 +3796,7 @@ ErrorMagicComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ErrorMagicComponent,
3843
3796
  if (rf & 2) {
3844
3797
  i0.ɵɵproperty("ngIf", ctx.HasErrors(ctx.id));
3845
3798
  }
3846
- }, directives: [i1.NgIf], encapsulation: 2 });
3799
+ }, dependencies: [i1.NgIf], encapsulation: 2 });
3847
3800
  (function () {
3848
3801
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorMagicComponent, [{
3849
3802
  type: Component,
@@ -3902,10 +3855,18 @@ CheckboxMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: CheckboxMagicDirec
3902
3855
  class ComboboxMagicDirective {
3903
3856
  constructor(magicDirective) {
3904
3857
  this.magicDirective = magicDirective;
3858
+ this.magicDirective.task.refreshDom.pipe(filter(c => this.magicDirective.IsSameElement(c))).subscribe(value => {
3859
+ let command = value;
3860
+ if (command.Operation === HtmlProperties.ItemsList)
3861
+ this.onComboboxItemsListChanged();
3862
+ });
3905
3863
  }
3906
3864
  onChange($event) {
3907
3865
  this.magicDirective.task.onComboboxSelectionChanged($event, this.magicDirective.id, +this.magicDirective.rowId);
3908
3866
  }
3867
+ onComboboxItemsListChanged() {
3868
+ this.magicDirective.task.refreshView();
3869
+ }
3909
3870
  }
3910
3871
  ComboboxMagicDirective.ɵfac = function ComboboxMagicDirective_Factory(t) { return new (t || ComboboxMagicDirective)(i0.ɵɵdirectiveInject(MagicDirective)); };
3911
3872
  ComboboxMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: ComboboxMagicDirective, selectors: [["select", "magic", "", 3, "multiple", ""]], hostBindings: function ComboboxMagicDirective_HostBindings(rf, ctx) {
@@ -4097,14 +4058,11 @@ MagicShellComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicShellComponent,
4097
4058
  i0.ɵɵadvance(3);
4098
4059
  i0.ɵɵproperty("ngIf", ctx.showSpinner);
4099
4060
  }
4100
- }, directives: [i1.NgIf, i3.DynamicComponent, i3.DynamicIoDirective, MagicViewContainerRef, i1.NgTemplateOutlet], styles: [".mgSpinnerClass[_ngcontent-%COMP%]{border:10px solid #cccccc;border-top:10px solid black;border-radius:50%;position:fixed;margin:auto;inset:0;width:100px;height:100px;animation:spin 2s linear infinite}.spinner-background[_ngcontent-%COMP%]{position:fixed;z-index:1000;inset:0;opacity:.5}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"] });
4061
+ }, dependencies: [i1.NgIf, i1.NgTemplateOutlet, i3.DynamicComponent, i3.DynamicIoDirective, MagicViewContainerRef], styles: [".mgSpinnerClass[_ngcontent-%COMP%]{border:10px solid #cccccc;border-top:10px solid black;border-radius:50%;position:fixed;margin:auto;inset:0;width:100px;height:100px;animation:_ngcontent-%COMP%_spin 2s linear infinite}.spinner-background[_ngcontent-%COMP%]{position:fixed;z-index:1000;inset:0;opacity:.5}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"] });
4101
4062
  (function () {
4102
4063
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicShellComponent, [{
4103
4064
  type: Component,
4104
- args: [{
4105
- selector: 'magic-root',
4106
- providers: [],
4107
- template: `
4065
+ args: [{ selector: 'magic-root', providers: [], template: `
4108
4066
  <div #magicRoot>
4109
4067
  <ndc-dynamic
4110
4068
  *ngIf = "RootComponent !== null"
@@ -4123,38 +4081,7 @@ MagicShellComponent.ɵcmp = i0.ɵɵdefineComponent({ type: MagicShellComponent,
4123
4081
  <ng-template #defaultSpinner>
4124
4082
  <div class="mgSpinnerClass"></div>
4125
4083
  </ng-template>
4126
- `,
4127
- styles: [`
4128
- .mgSpinnerClass {
4129
- border: 10px solid #cccccc; /* Light grey */
4130
- border-top: 10px solid black; /* Blue */
4131
- border-radius: 50%;
4132
- position: fixed;
4133
- margin: auto;
4134
- top: 0;
4135
- right: 0;
4136
- bottom: 0;
4137
- left: 0;
4138
- width: 100px;
4139
- height: 100px;
4140
- animation: spin 2s linear infinite;
4141
- }
4142
- .spinner-background {
4143
- /* background fixed across whole screen */
4144
- position: fixed;
4145
- top: 0;
4146
- right: 0;
4147
- bottom: 0;
4148
- z-index: 1000;
4149
- left: 0;
4150
- opacity: 0.5;
4151
- }
4152
- @keyframes spin {
4153
- 0% { transform: rotate(0deg); }
4154
- 100% { transform: rotate(360deg); }
4155
- }
4156
- `]
4157
- }]
4084
+ `, styles: [".mgSpinnerClass{border:10px solid #cccccc;border-top:10px solid black;border-radius:50%;position:fixed;margin:auto;inset:0;width:100px;height:100px;animation:spin 2s linear infinite}.spinner-background{position:fixed;z-index:1000;inset:0;opacity:.5}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
4158
4085
  }], function () {
4159
4086
  return [{ type: EngineMagicService }, { type: ComponentListMagicService }, { type: i0.ChangeDetectorRef }, { type: i1$1.Title }, { type: OverlayWindowService }, { type: i1$2.HttpClient }, { type: CommandsCollectorMagicService }, { type: ExitMagicService, decorators: [{
4160
4087
  type: Optional
@@ -4343,6 +4270,11 @@ DateValueAccessor.ɵdir = i0.ɵɵdefineDirective({ type: DateValueAccessor, sele
4343
4270
  })();
4344
4271
 
4345
4272
  class NonMagicControlDirective {
4273
+ set magic(val) {
4274
+ this.id = val;
4275
+ this.selector = 'NonMagicControl';
4276
+ }
4277
+ ;
4346
4278
  constructor(_task, element, renderer, vcRef) {
4347
4279
  this._task = _task;
4348
4280
  this.element = element;
@@ -4352,11 +4284,6 @@ class NonMagicControlDirective {
4352
4284
  this.eventsOnlyVal = false;
4353
4285
  this.htmlElement = this.element.nativeElement;
4354
4286
  }
4355
- set magic(val) {
4356
- this.id = val;
4357
- this.selector = 'NonMagicControl';
4358
- }
4359
- ;
4360
4287
  get task() {
4361
4288
  return this._task;
4362
4289
  }
@@ -4422,14 +4349,12 @@ class MagicModule {
4422
4349
  }
4423
4350
  MagicModule.ɵfac = function MagicModule_Factory(t) { return new (t || MagicModule)(); };
4424
4351
  MagicModule.ɵmod = i0.ɵɵdefineNgModule({ type: MagicModule });
4425
- MagicModule.ɵinj = i0.ɵɵdefineInjector({ providers: [ConfirmationComponentsMagicProvider, OverlayContainerMagicProvider], imports: [[
4426
- CommonModule,
4427
- FormsModule,
4428
- ReactiveFormsModule,
4429
- RouterModule,
4430
- DynamicModule,
4431
- HttpClientModule
4432
- ]] });
4352
+ MagicModule.ɵinj = i0.ɵɵdefineInjector({ providers: [ConfirmationComponentsMagicProvider, OverlayContainerMagicProvider], imports: [CommonModule,
4353
+ FormsModule,
4354
+ ReactiveFormsModule,
4355
+ RouterModule,
4356
+ DynamicModule,
4357
+ HttpClientModule] });
4433
4358
  (function () {
4434
4359
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicModule, [{
4435
4360
  type: NgModule,