@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.
- package/coverage/clover.xml +851 -749
- package/coverage/coverage-final.json +31 -30
- package/coverage/lcov-report/index.html +39 -25
- package/coverage/lcov.info +1566 -1353
- package/dist/tek-components-common.esm.js +281 -29
- package/dist/tek-components-common.umd.js +280 -27
- package/package.json +2 -2
- package/tests/unit/components/tek-grid/grid.spec.ts +446 -7
- package/tests/unit/components/tek-grid/layout_options.spec.ts +156 -2
- package/tests/unit/components/tek-iterable-component-render/iterable-component-render.spec.ts +9 -0
- package/tests/unit/components/tek-loading/Loading.spec.ts +30 -0
- package/tests/unit/components/tek-product-card/product-card.spec.ts +9 -0
- package/tests/unit/components/tree-grid/tree-grid.spec.ts +159 -2
- package/tests/unit/utils/grid-base/grid-controller.spec.ts +106 -3
- package/types/components/index.d.ts +2 -0
- package/types/components/tek-datasource/memory-datasource.d.ts +4 -2
- package/types/components/tek-grid/grid-column.d.ts +4 -1
- package/types/components/tek-grid/grid.d.ts +10 -0
- package/types/components/tek-grid/interfaces.d.ts +6 -3
- package/types/components/tek-grid/layout-options.d.ts +4 -1
- package/types/components/tek-iterable-component-render/interfaces.d.ts +3 -0
- package/types/components/tek-iterable-component-render/iterable-component-render.d.ts +12 -0
- package/types/components/tek-loading/interfaces.d.ts +6 -0
- package/types/components/tek-loading/loading.d.ts +24 -0
- package/types/components/tek-product-card/interfaces.d.ts +3 -0
- package/types/components/tek-product-card/product-card.d.ts +12 -0
- package/types/components/tek-tree-grid/interfaces.d.ts +3 -1
- package/types/components/tek-tree-grid/tree-grid.d.ts +6 -0
- package/types/utils/grid-base/grid-base.d.ts +42 -34
- package/types/utils/grid-base/grid-controller.d.ts +7 -3
- package/types/utils/index.d.ts +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KeyMap, I18n, FormatterParserProvider, Messages, Metadata, DatasourceFactory, RestDatasource, URL, MemoryDatasource,
|
|
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}.
|
|
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.
|
|
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}.
|
|
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}.
|
|
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
|
|
1616
|
+
get showLayoutOptionsButton() {
|
|
1491
1617
|
return this.grid.showLayoutOptions;
|
|
1492
1618
|
}
|
|
1493
|
-
get
|
|
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(
|
|
2744
|
-
this.
|
|
2745
|
-
this.
|
|
2746
|
-
this.
|
|
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
|
-
|
|
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 };
|