@zeedhi/teknisa-components-common 1.40.0 → 1.44.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.
Files changed (31) hide show
  1. package/coverage/clover.xml +851 -749
  2. package/coverage/coverage-final.json +31 -30
  3. package/coverage/lcov-report/index.html +39 -25
  4. package/coverage/lcov.info +1566 -1353
  5. package/dist/tek-components-common.esm.js +281 -29
  6. package/dist/tek-components-common.umd.js +280 -27
  7. package/package.json +2 -2
  8. package/tests/unit/components/tek-grid/grid.spec.ts +446 -7
  9. package/tests/unit/components/tek-grid/layout_options.spec.ts +156 -2
  10. package/tests/unit/components/tek-iterable-component-render/iterable-component-render.spec.ts +9 -0
  11. package/tests/unit/components/tek-loading/Loading.spec.ts +30 -0
  12. package/tests/unit/components/tek-product-card/product-card.spec.ts +9 -0
  13. package/tests/unit/components/tree-grid/tree-grid.spec.ts +159 -2
  14. package/tests/unit/utils/grid-base/grid-controller.spec.ts +106 -3
  15. package/types/components/index.d.ts +2 -0
  16. package/types/components/tek-datasource/memory-datasource.d.ts +4 -2
  17. package/types/components/tek-grid/grid-column.d.ts +4 -1
  18. package/types/components/tek-grid/grid.d.ts +10 -0
  19. package/types/components/tek-grid/interfaces.d.ts +6 -3
  20. package/types/components/tek-grid/layout-options.d.ts +4 -1
  21. package/types/components/tek-iterable-component-render/interfaces.d.ts +3 -0
  22. package/types/components/tek-iterable-component-render/iterable-component-render.d.ts +12 -0
  23. package/types/components/tek-loading/interfaces.d.ts +6 -0
  24. package/types/components/tek-loading/loading.d.ts +24 -0
  25. package/types/components/tek-product-card/interfaces.d.ts +3 -0
  26. package/types/components/tek-product-card/product-card.d.ts +12 -0
  27. package/types/components/tek-tree-grid/interfaces.d.ts +3 -1
  28. package/types/components/tek-tree-grid/tree-grid.d.ts +6 -0
  29. package/types/utils/grid-base/grid-base.d.ts +42 -34
  30. package/types/utils/grid-base/grid-controller.d.ts +7 -3
  31. package/types/utils/index.d.ts +2 -2
@@ -1,4 +1,4 @@
1
- import { KeyMap, I18n, FormatterParserProvider, Messages, Metadata, DatasourceFactory, RestDatasource, URL, MemoryDatasource, normalize, Loader, dayjs, Config } from '@zeedhi/core';
1
+ import { KeyMap, I18n, FormatterParserProvider, Messages, Metadata, DatasourceFactory, RestDatasource, URL, MemoryDatasource, Utils, Loader, dayjs, Config } from '@zeedhi/core';
2
2
  import { Form, Button, Tooltip, GridEditable, Grid, ComponentRender, Iterable, Carousel, ModalService, GridColumnEditable, Report, IterableColumnsButtonController, IterableColumnsButton, TreeGridEditable } from '@zeedhi/common';
3
3
  import get from 'lodash.get';
4
4
  import debounce from 'lodash.debounce';
@@ -411,6 +411,18 @@ class ProductCard extends ComponentRender {
411
411
  * Card width
412
412
  */
413
413
  this.width = '';
414
+ /**
415
+ * Sets the height for the component.
416
+ */
417
+ this.height = 'auto';
418
+ /**
419
+ * Sets the maximum height for the component.
420
+ */
421
+ this.maxHeight = 'none';
422
+ /**
423
+ * Sets the minimum height for the component.
424
+ */
425
+ this.minHeight = 'none';
414
426
  this.currencyFormatterFn = FormatterParserProvider.getFormatter('ZdCurrency');
415
427
  this.id = this.getInitValue('id', props.id, this.id);
416
428
  this.productName = this.getInitValue('productName', props.productName, this.productName);
@@ -422,6 +434,9 @@ class ProductCard extends ComponentRender {
422
434
  this.errorImagePath = this.getInitValue('errorImagePath', props.errorImagePath, this.errorImagePath);
423
435
  this.errorImageText = this.getInitValue('errorImageText', props.errorImageText, this.errorImageText);
424
436
  this.width = this.getInitValue('width', props.width, this.width);
437
+ this.height = this.getInitValue('height', props.height, this.height);
438
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
439
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
425
440
  this.createAccessors();
426
441
  }
427
442
  get productPriceFormat() {
@@ -474,6 +489,18 @@ class IterableComponentRender extends Iterable {
474
489
  text: 'NO_RESULT',
475
490
  },
476
491
  ];
492
+ /**
493
+ * Sets the height for the component.
494
+ */
495
+ this.height = 'auto';
496
+ /**
497
+ * Sets the maximum height for the component.
498
+ */
499
+ this.maxHeight = 'none';
500
+ /**
501
+ * Sets the minimum height for the component.
502
+ */
503
+ this.minHeight = 'none';
477
504
  /**
478
505
  * Components that will be rendered in error case
479
506
  */
@@ -487,6 +514,9 @@ class IterableComponentRender extends Iterable {
487
514
  this.errorSlot = props.errorSlot || this.errorSlot;
488
515
  this.noDataSlot = this.changeDefaultSlotNames(this.noDataSlot);
489
516
  this.noResultSlot = this.changeDefaultSlotNames(this.noResultSlot);
517
+ this.height = this.getInitValue('height', props.height, this.height);
518
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
519
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
490
520
  this.createAccessors();
491
521
  }
492
522
  addSlashes(value) {
@@ -549,6 +579,36 @@ class IterableCarousel extends Carousel {
549
579
  }
550
580
  }
551
581
 
582
+ // eslint-disable-next-line
583
+ const loading = 'data:image/gif;base64,R0lGODlhlgCWAPf/AC1oxPa+ADarUdmsFEB/m0yTcjiMhEafWjFova2SNDZotX10VsOfJDlosFZnge25BnJtXTukVWVmaFh1eIuOZ1x0ZEFopHpyWGFpcS5ow+q2CVNnhmVnZvW9AW5qYUyKXUJnofW+AKWNOV9mcS9owZuGQTporlCGXbWXLmNrazxnqeKyDoGDZVFniFZ6ZNSpGJ+IPoR4Ud+wEURnnmtpYklnlll5YbGUMcagIk5njmhnZWpoZGF0aWBmbkdnmbyaKUtnlEaBfWdmZTNou0WUW5WDRFtmeGZmZ82kHqecTXqIdzRouGJmbPC6BIB2VDxnrGNmakyHYPO8AkxnkUh0qmRpZl9wZVxndmRmaVhnffS9AqmPN09ni96vEUmQWzBowC1ow2FtZVR3gl5ndFGCYEVnnF1mdGR9i1dnf7qZK4l7TnRvXOK1FD6eV8ijIG6Cgl58lF1rfEBnpFVsi1pmeo5+Sk56dz9np5OCRjaqUi5pxNarFndwWmNqZm9sYFx7a098itGnG4d6T7ikPKKLO1Rmg+e1Cr2bKVhme0GbVkpmk5mWW5GBSM+nHLiYLPG7BIp8TUKZWUFsqWJnbltmd0hnmNqtFExtm1tsgaiOOIx9TNuuE6CKPWJmbcqjH1OJb8CdJjFovlpwb+u5CzioU1aFbjdos0qYXJOPXWFwczepUnBsX8qrKuW0DD5nqdmsFUl+kTtnrDdntNKuI+OzDVRnhYuEV52HPzNqvjltuVBqkJeERNirFnVvXKSMOjVsvDmLhEJxsTloss+sJTeqUdyzGkaeWreYLmBqdjmMhDyhVvC8B49/STinVVV+YVp/bEuScq6fRj5tr8CnNUV/lUNnoGZnZkCFgTaqUVeCYTuLgz2Ig02RcUySck+QcTxpr5qQUFCPXjZsullviFh4ZNaxH0KAmEGYXFJ4oFCNcEdsoUicWpmFQkRooEFvsHt5YDepUXBvYzyKhESXWkeeWjxutcWlK250bYp+UFCQcGZoaLyeLtitFaGSR0OYV2ZmZiH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMEVGRUY5RjYzRjYxMUVDQkRFNUM0MjQ5M0FFRTY2RSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMEVGRUZBMDYzRjYxMUVDQkRFNUM0MjQ5M0FFRTY2RSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQwRUZFRjlENjNGNjExRUNCREU1QzQyNDkzQUVFNjZFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQwRUZFRjlFNjNGNjExRUNCREU1QzQyNDkzQUVFNjZFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1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3cr155ExDjZsyDKiK8weU4R9AcAWTCgTLcyulFBrCdu7eAHITSmhEpi8gPeirJEBcGDBJR0UNpwXMUksChgfdhxyg+TJlD/eudw480cmdjnf9fxxDAnRo0l3vII6teqNZhajfs1xBILWemlrlNAAt+6NNXz/zjji9OzhGSu1Rp6RSW/RzDOaicw5esZJrqpbx4iFiynZd0mYgtiuEQuaSndMmJAzhY4E8vDjy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqSRVAQEAIfkEBQQA/wAsAAAAAJYAlgAACPEA/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufbjggACH5BAUEAP8ALAAAAAABAAEAAAgEAP8FBAA7';
584
+ /**
585
+ * Teknisa component
586
+ */
587
+ class Loading extends ComponentRender {
588
+ /**
589
+ * Creates a new instance of TekLoading
590
+ * @param props Image Link props
591
+ */
592
+ constructor(props) {
593
+ super(props);
594
+ /**
595
+ * text to show in Loader Overlay
596
+ */
597
+ this.text = '';
598
+ /**
599
+ * zIndex value.
600
+ */
601
+ this.zIndex = '999';
602
+ /**
603
+ * loading path.
604
+ */
605
+ this.image = loading;
606
+ this.text = this.getInitValue('text', props.text, this.text);
607
+ this.zIndex = this.getInitValue('zIndex', props.zIndex, this.zIndex);
608
+ this.image = this.getInitValue('image', props.image, this.image);
609
+ }
610
+ }
611
+
552
612
  /**
553
613
  * Notifications component is used to show notifications
554
614
  */
@@ -679,6 +739,25 @@ class ReportFilter {
679
739
  class GridBase {
680
740
  constructor(grid) {
681
741
  this.exportConfigButtons = [];
742
+ this.filterFormInputs = {};
743
+ this.atoms = {
744
+ TITLE: '_gridTitle',
745
+ ADD_BUTTON: '_addButton',
746
+ DELETE_BUTTON: '_deleteButton',
747
+ REFRESH_BUTTON: '_refreshButton',
748
+ COLUMNS_BUTTON: '_columnsButton',
749
+ LAYOUT_BUTTON: '_layout_options',
750
+ EXPORT_BUTTON: '_exportButton',
751
+ ACTIONS_BUTTON: '_actionsButton',
752
+ SAVE_BUTTON: '_saveButton',
753
+ CANCEL_BUTTON: '_cancelButton',
754
+ SEARCH: '_gridSearch',
755
+ FILTER_BUTTON: '_filterButton',
756
+ FILTER_MODAL: '-filter-modal',
757
+ FILTER_FORM: '-filter-form',
758
+ EXPORT_DROPDOWN: '_export_dropdown',
759
+ ACTIONS_DROPDOWN: '_actions_dropdown',
760
+ };
682
761
  this.grid = grid;
683
762
  this.exportConfigButtons = this.getExportConfigButtons();
684
763
  }
@@ -761,7 +840,7 @@ class GridBase {
761
840
  component: 'ZdDivider',
762
841
  cssClass: 'toolbar-divider',
763
842
  vertical: true,
764
- isVisible: `{{GridController_${this.grid.componentId}.showFirstDivider}}`,
843
+ isVisible: `{{GridController_${this.grid.componentId}.showDivider1}}`,
765
844
  },
766
845
  {
767
846
  name: `${this.grid.name}_refresh_tooltip`,
@@ -774,7 +853,7 @@ class GridBase {
774
853
  component: 'ZdButton',
775
854
  icon: true,
776
855
  iconName: 'refresh',
777
- isVisible: this.grid.showReload,
856
+ isVisible: `{{GridController_${this.grid.componentId}.showReloadButton}}`,
778
857
  events: {
779
858
  click: this.reloadGrid.bind(this),
780
859
  },
@@ -786,7 +865,7 @@ class GridBase {
786
865
  component: 'ZdDivider',
787
866
  cssClass: 'toolbar-divider',
788
867
  vertical: true,
789
- isVisible: `{{GridController_${this.grid.componentId}.showLayoutOptions}`,
868
+ isVisible: `{{GridController_${this.grid.componentId}.showDivider2}}`,
790
869
  },
791
870
  {
792
871
  name: `${this.grid.name}_columns_button_tooltip`,
@@ -807,7 +886,7 @@ class GridBase {
807
886
  {
808
887
  name: `${this.grid.name}_layout_options`,
809
888
  component: 'TekGridLayoutOptions',
810
- isVisible: `{{GridController_${this.grid.componentId}.showLayoutOptions}}`,
889
+ isVisible: `{{GridController_${this.grid.componentId}.showLayoutOptionsButton}}`,
811
890
  },
812
891
  {
813
892
  name: `${this.grid.name}_dividerActions`,
@@ -849,6 +928,7 @@ class GridBase {
849
928
  component: 'ZdDivider',
850
929
  cssClass: 'toolbar-divider',
851
930
  vertical: true,
931
+ isVisible: `{{GridController_${this.grid.componentId}.showDivider3}}`,
852
932
  },
853
933
  ],
854
934
  },
@@ -877,6 +957,7 @@ class GridBase {
877
957
  {
878
958
  name: `${this.grid.name}_gridSearch`,
879
959
  component: 'ZdSearch',
960
+ isVisible: `{{GridController_${this.grid.componentId}.showSearchInput}}`,
880
961
  },
881
962
  {
882
963
  name: `${this.grid.name}_filter_tooltip`,
@@ -900,17 +981,17 @@ class GridBase {
900
981
  }
901
982
  addButtonClick({ event }) {
902
983
  if (this.grid.events.addClick) {
903
- this.grid.events.addClick({ component: this, event });
984
+ this.grid.events.addClick({ component: this.grid, event });
904
985
  }
905
986
  }
906
987
  deleteButtonClick({ event }) {
907
988
  if (this.grid.events.beforeDelete) {
908
- this.grid.events.beforeDelete({ component: this, event });
989
+ this.grid.events.beforeDelete({ component: this.grid, event });
909
990
  }
910
991
  if (!event.defaultPrevented) {
911
992
  this.grid.deleteRows();
912
993
  if (this.grid.events.afterDelete) {
913
- this.grid.events.afterDelete({ component: this });
994
+ this.grid.events.afterDelete({ component: this.grid });
914
995
  }
915
996
  }
916
997
  }
@@ -919,29 +1000,29 @@ class GridBase {
919
1000
  }
920
1001
  saveChanges({ event }) {
921
1002
  if (this.grid.events.beforeSave) {
922
- this.grid.events.beforeSave({ component: this, event });
1003
+ this.grid.events.beforeSave({ component: this.grid, event });
923
1004
  }
924
1005
  if (!event.defaultPrevented) {
925
1006
  this.grid.saveEditedRows();
926
1007
  if (this.grid.events.afterSave) {
927
- this.grid.events.afterSave({ component: this });
1008
+ this.grid.events.afterSave({ component: this.grid });
928
1009
  }
929
1010
  }
930
1011
  }
931
1012
  cancelChanges({ event }) {
932
1013
  if (this.grid.events.beforeCancel) {
933
- this.grid.events.beforeCancel({ component: this, event });
1014
+ this.grid.events.beforeCancel({ component: this.grid, event });
934
1015
  }
935
1016
  if (!event.defaultPrevented) {
936
1017
  this.grid.cancelEditedRows();
937
1018
  if (this.grid.events.afterCancel) {
938
- this.grid.events.afterCancel({ component: this });
1019
+ this.grid.events.afterCancel({ component: this.grid });
939
1020
  }
940
1021
  }
941
1022
  }
942
1023
  filterClick({ event }) {
943
1024
  if (this.grid.events.filterClick) {
944
- this.grid.events.filterClick({ event, component: this });
1025
+ this.grid.events.filterClick({ event, component: this.grid });
945
1026
  }
946
1027
  if (!event.defaultPrevented) {
947
1028
  this.createFilterFromColumns();
@@ -990,6 +1071,17 @@ class GridBase {
990
1071
  component: 'ZdFooter',
991
1072
  color: 'transparent',
992
1073
  padless: true,
1074
+ leftSlot: [
1075
+ {
1076
+ name: `${this.grid.name}-filter-clearButton`,
1077
+ component: 'ZdButton',
1078
+ label: 'CLEAR',
1079
+ outline: true,
1080
+ events: {
1081
+ click: this.clearFilter.bind(this),
1082
+ },
1083
+ },
1084
+ ],
993
1085
  rightSlot: [
994
1086
  {
995
1087
  name: `${this.grid.name}-filter-cancelButton`,
@@ -1019,12 +1111,18 @@ class GridBase {
1019
1111
  hideFilterModal() {
1020
1112
  this.filterModal.hide();
1021
1113
  }
1114
+ sortFilterIndex(col1, col2) {
1115
+ const index1 = col1.filterIndex !== undefined ? col1.filterIndex : Number.MAX_SAFE_INTEGER;
1116
+ const index2 = col2.filterIndex !== undefined ? col2.filterIndex : Number.MAX_SAFE_INTEGER;
1117
+ return index1 - index2;
1118
+ }
1022
1119
  getFilterModalComponents() {
1023
1120
  const filterColumns = [];
1024
1121
  let columnComponentName;
1025
- this.grid.columns.forEach((column) => {
1122
+ [...this.grid.columns].sort(this.sortFilterIndex).forEach((column) => {
1026
1123
  const filterProps = Array.isArray(column.filterProps) ? column.filterProps : [column.filterProps];
1027
1124
  if (column.filterable && filterProps && filterProps.length > 0) {
1125
+ this.filterFormInputs[column.name] = [];
1028
1126
  filterProps.forEach((filterItem, index) => {
1029
1127
  const { datasource } = this.grid;
1030
1128
  if (datasource instanceof TekRestDatasource || datasource instanceof TekMemoryDatasource) {
@@ -1035,6 +1133,7 @@ class GridBase {
1035
1133
  else {
1036
1134
  columnComponentName = `${this.grid.name}-filter-AND-CONTAINS-${column.name}-${index}`;
1037
1135
  }
1136
+ this.filterFormInputs[column.name].push(columnComponentName);
1038
1137
  let newColumnComponent = Object.assign(Object.assign(Object.assign({ label: column.label }, column.componentProps), filterItem), { name: columnComponentName });
1039
1138
  if (filterItem.helperOptions) {
1040
1139
  newColumnComponent = this.getHelperValueComponent(newColumnComponent, filterItem.helperOptions, column);
@@ -1204,6 +1303,12 @@ class GridBase {
1204
1303
  this.grid.changeLayout(event);
1205
1304
  }
1206
1305
  }
1306
+ clearFilter() {
1307
+ const filterForm = Metadata.getInstance(`${this.grid.name}-filter-form`);
1308
+ Object.keys(filterForm.value).forEach((item) => {
1309
+ filterForm.value[item] = null;
1310
+ });
1311
+ }
1207
1312
  getFilterRelationsDatasource() {
1208
1313
  return DatasourceFactory.factory({
1209
1314
  data: this.getFilterOptionsData('relations'),
@@ -1254,6 +1359,17 @@ class GridBase {
1254
1359
  return datasource.setSearch(search);
1255
1360
  });
1256
1361
  }
1362
+ getAtomInstance(key) {
1363
+ return Metadata.getInstance(`${this.grid.name}${this.atoms[key]}`);
1364
+ }
1365
+ getFilterInputs(columnName) {
1366
+ const mapper = (name) => Metadata.getInstance(name);
1367
+ if (columnName) {
1368
+ return this.filterFormInputs[columnName].map(mapper);
1369
+ }
1370
+ const values = Object.values(this.filterFormInputs);
1371
+ return values.reduce((result, current) => ([...result, ...current.map(mapper)]), []);
1372
+ }
1257
1373
  }
1258
1374
  Messages.add({
1259
1375
  'pt-BR': {
@@ -1481,17 +1597,28 @@ class GridController {
1481
1597
  get showFilterButton() {
1482
1598
  return this.grid.filterButton;
1483
1599
  }
1600
+ get showSearchInput() {
1601
+ return this.grid.showSearch;
1602
+ }
1603
+ get showReloadButton() {
1604
+ return this.grid.showReload;
1605
+ }
1606
+ get showDivider2() {
1607
+ return this.showReloadButton && (this.showLayoutOptionsButton || this.showColumnsButton
1608
+ || this.showActionsButton || this.showExportButton || this.showSearchInput);
1609
+ }
1484
1610
  get showColumnsButton() {
1485
1611
  return this.grid.columnsButton;
1486
1612
  }
1487
1613
  get columnsButtonIgnore() {
1488
1614
  return this.grid.columnsButtonIgnore;
1489
1615
  }
1490
- get showLayoutOptions() {
1616
+ get showLayoutOptionsButton() {
1491
1617
  return this.grid.showLayoutOptions;
1492
1618
  }
1493
- get showFirstDivider() {
1494
- return this.showAddButton || this.showDeleteButton;
1619
+ get showDivider1() {
1620
+ return (this.showAddButton || this.showDeleteButton) && (this.showReloadButton || this.showLayoutOptionsButton || this.showColumnsButton
1621
+ || this.showActionsButton || this.showExportButton || this.showSearchInput);
1495
1622
  }
1496
1623
  get showActionsButton() {
1497
1624
  return this.grid.actions.length > 0;
@@ -1500,7 +1627,10 @@ class GridController {
1500
1627
  return this.grid.showExport;
1501
1628
  }
1502
1629
  get showActionAndExportButton() {
1503
- return this.showActionsButton || this.showExportButton;
1630
+ return (this.showLayoutOptionsButton || this.showColumnsButton) && (this.showActionsButton || this.showExportButton || this.showSearchInput);
1631
+ }
1632
+ get showDivider3() {
1633
+ return (this.showActionsButton || this.showExportButton) && this.showSearchInput;
1504
1634
  }
1505
1635
  get isEditing() {
1506
1636
  return this.grid.editing;
@@ -1889,10 +2019,10 @@ class TekMemoryDatasource extends MemoryDatasource {
1889
2019
  return;
1890
2020
  if (filtered === true && item.relation === 'OR')
1891
2021
  return;
1892
- const columnValue = normalize(row[key].toString());
2022
+ const columnValue = Utils.normalize(row[key].toString());
1893
2023
  let value = '';
1894
2024
  if (Array.isArray(item.value)) {
1895
- value = item.value.map((val) => normalize(val.toString()));
2025
+ value = item.value.map((val) => Utils.normalize(val.toString()));
1896
2026
  switch (item.operation) {
1897
2027
  case 'IN':
1898
2028
  filtered = value.includes(columnValue);
@@ -1907,7 +2037,7 @@ class TekMemoryDatasource extends MemoryDatasource {
1907
2037
  }
1908
2038
  }
1909
2039
  else {
1910
- value = normalize(item.value.toString());
2040
+ value = Utils.normalize(item.value.toString());
1911
2041
  switch (item.operation) {
1912
2042
  case 'CONTAINS':
1913
2043
  filtered = columnValue.indexOf(value) !== -1;
@@ -1992,6 +2122,7 @@ class TekGridColumn extends GridColumnEditable {
1992
2122
  this.isVisible = this.getInitValue('isVisible', props.isVisible, this.isVisible);
1993
2123
  this.filterProps = this.getInitValue('filterProps', props.filterProps, this.filterProps);
1994
2124
  this.filterable = this.getInitValue('filterable', props.filterable, this.filterable);
2125
+ this.filterIndex = this.getInitValue('filterIndex', props.filterIndex, this.filterIndex);
1995
2126
  this.fixed = this.getInitValue('fixed', props.fixed, this.fixed);
1996
2127
  this.grouped = this.getInitValue('grouped', props.grouped, this.grouped);
1997
2128
  this.groupOpened = this.getInitValue('groupOpened', props.groupOpened, this.groupOpened);
@@ -2067,6 +2198,16 @@ class TekGridColumn extends GridColumnEditable {
2067
2198
  this.changeGrouping();
2068
2199
  }
2069
2200
  }
2201
+ get groupOpened() {
2202
+ return this.groupOpenedValue;
2203
+ }
2204
+ set groupOpened(value) {
2205
+ const changed = value !== this.groupOpenedValue;
2206
+ this.groupOpenedValue = value;
2207
+ if (changed) {
2208
+ this.changeGrouping();
2209
+ }
2210
+ }
2070
2211
  get isVisible() {
2071
2212
  return this.isVisibleValue && !this.grouped;
2072
2213
  }
@@ -2100,6 +2241,8 @@ class TekGrid extends GridEditable {
2100
2241
  this.actions = [];
2101
2242
  /* Show Filter button */
2102
2243
  this.filterButton = false;
2244
+ /* Show SearchInput */
2245
+ this.showSearch = true;
2103
2246
  /* Show Column Filter button */
2104
2247
  this.columnFilterButton = false;
2105
2248
  /* Show Columns button */
@@ -2167,6 +2310,32 @@ class TekGrid extends GridEditable {
2167
2310
  this.groupColumns = [];
2168
2311
  this.groupedData = [];
2169
2312
  this.toolbarSlotProps = false;
2313
+ this.keyShortcutKeyMapping = {
2314
+ 'mod+f': {
2315
+ event: this.focusSearchInput.bind(this),
2316
+ stop: true,
2317
+ active: true,
2318
+ },
2319
+ 'mod+l': {
2320
+ event: ({ event, element }) => {
2321
+ if (this.filterButton) {
2322
+ const instance = Metadata.getInstance(`${this.name}_filterButton`);
2323
+ instance.click(event, element);
2324
+ }
2325
+ },
2326
+ stop: true,
2327
+ active: true,
2328
+ },
2329
+ 'mod+enter': {
2330
+ event: () => {
2331
+ const instance = Metadata.getInstance(`${this.name}_actions_dropdown`);
2332
+ instance.setFocus();
2333
+ instance.value = !instance.value;
2334
+ },
2335
+ stop: true,
2336
+ active: true,
2337
+ },
2338
+ };
2170
2339
  this.groups = [];
2171
2340
  this.summary = {};
2172
2341
  this.updateGrouping = debounce((lazyLoad = false) => {
@@ -2176,6 +2345,7 @@ class TekGrid extends GridEditable {
2176
2345
  this.addButton = this.getInitValue('addButton', props.addButton, this.addButton);
2177
2346
  this.deleteButton = this.getInitValue('deleteButton', props.deleteButton, this.deleteButton);
2178
2347
  this.filterButton = this.getInitValue('filterButton', props.filterButton, this.filterButton);
2348
+ this.showSearch = this.getInitValue('showSearch', props.showSearch, this.showSearch);
2179
2349
  this.columnFilterButton = this.getInitValue('columnFilterButton', props.columnFilterButton, this.columnFilterButton);
2180
2350
  this.columnsButton = this.getInitValue('columnsButton', props.columnsButton, this.columnsButton);
2181
2351
  this.columnsButtonIgnore = this.getInitValue('columnsButtonIgnore', props.columnsButtonIgnore, this.columnsButtonIgnore);
@@ -2215,6 +2385,23 @@ class TekGrid extends GridEditable {
2215
2385
  active: true,
2216
2386
  };
2217
2387
  }
2388
+ onMounted(element) {
2389
+ super.onMounted(element);
2390
+ KeyMap.bind(this.keyShortcutKeyMapping, this, element);
2391
+ }
2392
+ onBeforeDestroy() {
2393
+ super.onBeforeDestroy();
2394
+ KeyMap.unbind(this.keyShortcutKeyMapping, this);
2395
+ }
2396
+ focusSearchInput() {
2397
+ const searchInput = Metadata.getInstance(`${this.name}_gridSearch`);
2398
+ searchInput.setFocus();
2399
+ }
2400
+ get layoutOptions() {
2401
+ if (!this.showLayoutOptions)
2402
+ return undefined;
2403
+ return Metadata.getInstance(`${this.name}_layout_options`);
2404
+ }
2218
2405
  /**
2219
2406
  * Get Grid columns objects
2220
2407
  * @param columns Grid columns parameter
@@ -2625,6 +2812,12 @@ class TekGrid extends GridEditable {
2625
2812
  });
2626
2813
  }
2627
2814
  }
2815
+ getAtomInstance(key) {
2816
+ return this.gridBase.getAtomInstance(key);
2817
+ }
2818
+ getFilterInputs(columnName) {
2819
+ return this.gridBase.getFilterInputs(columnName);
2820
+ }
2628
2821
  }
2629
2822
 
2630
2823
  class TekGridColumnsButtonController extends IterableColumnsButtonController {
@@ -2740,13 +2933,17 @@ class TekGridLayoutOptions extends ComponentRender {
2740
2933
  }
2741
2934
  return '';
2742
2935
  }
2743
- newLayout(newLayout) {
2744
- this.currentLayoutName = newLayout.name;
2745
- this.layouts[this.currentLayoutName] = newLayout;
2746
- this.layoutNames = Object.keys(this.layouts);
2747
- this.saveLayouts();
2936
+ newLayout(layout) {
2937
+ this.fixColumns(layout);
2938
+ this.currentLayoutName = layout.name;
2939
+ this.addLayout(layout);
2748
2940
  this.layoutEdited = false;
2749
2941
  }
2942
+ addLayout(layout) {
2943
+ this.fixColumns(layout);
2944
+ this.layouts[layout.name] = layout;
2945
+ this.saveLayouts();
2946
+ }
2750
2947
  applyLayout(name, save = true) {
2751
2948
  this.currentLayoutName = name;
2752
2949
  if (this.viewApplyLayout) {
@@ -2758,6 +2955,7 @@ class TekGridLayoutOptions extends ComponentRender {
2758
2955
  this.layoutEdited = false;
2759
2956
  }
2760
2957
  saveLayouts() {
2958
+ this.layoutNames = Object.keys(this.layouts);
2761
2959
  const layoutInfo = {
2762
2960
  currentLayoutName: this.currentLayoutName,
2763
2961
  layouts: this.layouts,
@@ -2773,17 +2971,57 @@ class TekGridLayoutOptions extends ComponentRender {
2773
2971
  deleteLayout(name) {
2774
2972
  if (this.currentLayoutName === name) {
2775
2973
  this.currentLayoutName = '';
2974
+ this.applyLayout(this.currentLayoutName, false);
2776
2975
  }
2777
2976
  delete this.layouts[name];
2778
- this.layoutNames = Object.keys(this.layouts);
2779
2977
  this.saveLayouts();
2780
2978
  }
2781
2979
  updateLayout(name, layout) {
2980
+ this.fixColumns(layout);
2782
2981
  this.currentLayoutName = name;
2783
- this.layouts[name] = layout;
2982
+ layout.name = name;
2983
+ this.layouts[layout.name] = layout;
2784
2984
  this.saveLayouts();
2785
2985
  this.layoutEdited = false;
2786
2986
  }
2987
+ updateDefaultLayout(layout) {
2988
+ this.fixColumns(layout);
2989
+ this.originalDatasourceOrder = layout.order || this.originalDatasourceOrder;
2990
+ this.originalDatasourceDynamicFilter = layout.dynamicFilter || this.originalDatasourceDynamicFilter;
2991
+ this.originalDatasourceFilter = layout.filter || this.originalDatasourceFilter;
2992
+ if (layout.columns) {
2993
+ this.originalColumnProps = layout.columns.map((column) => {
2994
+ const originalColumnIdx = this.originalColumnProps.findIndex((item) => item.name === column.name);
2995
+ const originalColumn = originalColumnIdx !== -1 ? this.originalColumnProps[originalColumnIdx] : {};
2996
+ return Object.assign(Object.assign({}, originalColumn), column);
2997
+ });
2998
+ }
2999
+ if (this.currentLayoutName === '') {
3000
+ this.applyLayout(this.currentLayoutName, false);
3001
+ }
3002
+ }
3003
+ fixColumns(layout) {
3004
+ const hasLayoutColumns = !!layout.columns;
3005
+ layout.columns = layout.columns || [];
3006
+ const layoutColumnNames = layout.columns.map((layoutColumn) => layoutColumn.name);
3007
+ this.grid.columns.forEach((gridColumn) => {
3008
+ if (!hasLayoutColumns || layoutColumnNames.indexOf(gridColumn.name) === -1) {
3009
+ layout.columns.push({
3010
+ name: gridColumn.name,
3011
+ label: gridColumn.label,
3012
+ align: gridColumn.align,
3013
+ isVisible: !hasLayoutColumns && gridColumn.isVisible,
3014
+ minWidth: gridColumn.minWidth,
3015
+ maxWidth: gridColumn.maxWidth,
3016
+ fixed: gridColumn.fixed,
3017
+ grouped: gridColumn.grouped,
3018
+ groupOpened: gridColumn.groupOpened,
3019
+ aggregation: gridColumn.aggregation,
3020
+ filterHelperValue: this.getHelperValue(gridColumn),
3021
+ });
3022
+ }
3023
+ });
3024
+ }
2787
3025
  }
2788
3026
 
2789
3027
  class TekFilterHelper {
@@ -2888,6 +3126,8 @@ class TekTreeGrid extends TreeGridEditable {
2888
3126
  this.actions = [];
2889
3127
  /* Show Filter button */
2890
3128
  this.filterButton = false;
3129
+ /* Show search Input */
3130
+ this.showSearch = true;
2891
3131
  /* Show Column Filter button */
2892
3132
  this.columnFilterButton = false;
2893
3133
  /* Show Columns button */
@@ -2939,6 +3179,7 @@ class TekTreeGrid extends TreeGridEditable {
2939
3179
  this.addButton = this.getInitValue('addButton', props.addButton, this.addButton);
2940
3180
  this.deleteButton = this.getInitValue('deleteButton', props.deleteButton, this.deleteButton);
2941
3181
  this.filterButton = this.getInitValue('filterButton', props.filterButton, this.filterButton);
3182
+ this.showSearch = this.getInitValue('showSearch', props.showSearch, this.showSearch);
2942
3183
  this.columnFilterButton = this.getInitValue('columnFilterButton', props.columnFilterButton, this.columnFilterButton);
2943
3184
  this.columnsButton = this.getInitValue('columnsButton', props.columnsButton, this.columnsButton);
2944
3185
  this.columnsButtonIgnore = this.getInitValue('columnsButtonIgnore', props.columnsButtonIgnore, this.columnsButtonIgnore);
@@ -2965,6 +3206,11 @@ class TekTreeGrid extends TreeGridEditable {
2965
3206
  if (!this.toolbarSlotProps)
2966
3207
  this.toolbarSlot = this.gridBase.createToolbarProps();
2967
3208
  }
3209
+ get layoutOptions() {
3210
+ if (!this.showLayoutOptions)
3211
+ return undefined;
3212
+ return Metadata.getInstance(`${this.name}_layout_options`);
3213
+ }
2968
3214
  /**
2969
3215
  * Get Grid columns objects
2970
3216
  * @param columns Grid columns parameter
@@ -3018,6 +3264,12 @@ class TekTreeGrid extends TreeGridEditable {
3018
3264
  }
3019
3265
  this.preventRowClick = false;
3020
3266
  }
3267
+ getAtomInstance(key) {
3268
+ return this.gridBase.getAtomInstance(key);
3269
+ }
3270
+ getFilterInputs(columnName) {
3271
+ return this.gridBase.getFilterInputs(columnName);
3272
+ }
3021
3273
  }
3022
3274
 
3023
3275
  Messages.add({
@@ -3068,4 +3320,4 @@ Messages.add({
3068
3320
  },
3069
3321
  });
3070
3322
 
3071
- export { BreadcrumbHeader, CardTitle, CrudAddButton, CrudButton, CrudCancelButton, CrudDeleteButton, CrudForm, CrudSaveButton, DynamicFilterOperations, DynamicFilterRelations, Image, IterableCarousel, IterableComponentRender, Notifications, ProductCard, TekFilterHelper, TekGrid, TekGridColumn, TekGridColumnsButton, TekGridLayoutOptions, TekMemoryDatasource, TekRestDatasource, TekTreeGrid, columnAggregationValues };
3323
+ export { BreadcrumbHeader, CardTitle, CrudAddButton, CrudButton, CrudCancelButton, CrudDeleteButton, CrudForm, CrudSaveButton, DynamicFilterOperations, DynamicFilterRelations, Image, IterableCarousel, IterableComponentRender, Loading, Notifications, ProductCard, TekFilterHelper, TekGrid, TekGridColumn, TekGridColumnsButton, TekGridLayoutOptions, TekMemoryDatasource, TekRestDatasource, TekTreeGrid, columnAggregationValues };