@zeedhi/teknisa-components-common 1.37.0 → 1.41.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 +789 -617
- package/coverage/coverage-final.json +30 -27
- package/coverage/lcov-report/block-navigation.js +8 -0
- package/coverage/lcov-report/index.html +55 -19
- package/coverage/lcov-report/sorter.js +26 -0
- package/coverage/lcov.info +1506 -1181
- package/dist/tek-components-common.esm.js +1808 -1347
- package/dist/tek-components-common.umd.js +1808 -1344
- package/package.json +2 -2
- package/tests/unit/components/tek-datasource/memory-datasource.spec.ts +20 -4
- package/tests/unit/components/tek-grid/filter-helper.spec.ts +145 -0
- package/tests/unit/components/tek-grid/grid.spec.ts +376 -58
- package/tests/unit/components/tek-grid/layout_options.spec.ts +58 -0
- package/tests/unit/components/tek-loading/Loading.spec.ts +30 -0
- package/tests/unit/components/tree-grid/tree-grid.spec.ts +469 -0
- package/tests/unit/{components/tek-grid → utils/grid-base}/grid-controller.spec.ts +3 -3
- package/types/components/index.d.ts +5 -0
- package/types/components/tek-datasource/memory-datasource.d.ts +1 -0
- package/types/components/tek-grid/filter-dynamic-values.d.ts +9 -0
- package/types/components/tek-grid/filter-helper.d.ts +9 -0
- package/types/components/tek-grid/grid-columns-button.d.ts +2 -0
- package/types/components/tek-grid/grid.d.ts +12 -19
- package/types/components/tek-grid/interfaces.d.ts +15 -1
- package/types/components/tek-grid/layout-options.d.ts +3 -2
- package/types/components/tek-loading/interfaces.d.ts +6 -0
- package/types/components/tek-loading/loading.d.ts +24 -0
- package/types/components/tek-tree-grid/interfaces.d.ts +19 -0
- package/types/components/tek-tree-grid/tree-grid.d.ts +76 -0
- package/types/utils/grid-base/grid-base.d.ts +267 -0
- package/types/utils/grid-base/grid-controller.d.ts +20 -0
- package/types/utils/index.d.ts +3 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Loading } from '../../../../src';
|
|
2
|
+
|
|
3
|
+
describe('Loading', () => {
|
|
4
|
+
describe('constructor()', () => {
|
|
5
|
+
it('should create new Image with default values', () => {
|
|
6
|
+
// eslint-disable-next-line
|
|
7
|
+
const image = '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';
|
|
8
|
+
const instance = new Loading({
|
|
9
|
+
name: 'loading',
|
|
10
|
+
component: 'Loading',
|
|
11
|
+
});
|
|
12
|
+
expect(instance.text).toBe('');
|
|
13
|
+
expect(instance.image).toBe(image);
|
|
14
|
+
expect(instance.zIndex).toBe('999');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('should create new loading replacing default values', () => {
|
|
18
|
+
const instance = new Loading({
|
|
19
|
+
name: 'loading',
|
|
20
|
+
component: 'Loading',
|
|
21
|
+
image: '/img/zeedhi.svg',
|
|
22
|
+
text: 'zeedhi',
|
|
23
|
+
zIndex: '99',
|
|
24
|
+
});
|
|
25
|
+
expect(instance.image).toBe('/img/zeedhi.svg');
|
|
26
|
+
expect(instance.text).toBe('zeedhi');
|
|
27
|
+
expect(instance.zIndex).toBe('99');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Button, Form, IButton, IForm, IModal, Modal, ModalService,
|
|
3
|
+
} from '@zeedhi/common';
|
|
4
|
+
import { Http, Metadata } from '@zeedhi/core';
|
|
5
|
+
import {
|
|
6
|
+
ITekTreeGrid, TekGridColumn, TekRestDatasource, TekTreeGrid,
|
|
7
|
+
} from '../../../../src';
|
|
8
|
+
|
|
9
|
+
describe('TekTreeGrid', () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
// clear all metadata instances before testing
|
|
12
|
+
const { instances } = Metadata as any;
|
|
13
|
+
Object.keys(instances).forEach((key) => {
|
|
14
|
+
Metadata.clearInstance(key, instances[key].componentId);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe('constructor()', () => {
|
|
19
|
+
it('should create new grid with default values', () => {
|
|
20
|
+
const instance = new TekTreeGrid({ name: 'TreeGrid', component: 'TekTreeGrid' });
|
|
21
|
+
expect(instance.title).toBe('');
|
|
22
|
+
expect(instance.addButton).toBeFalsy();
|
|
23
|
+
expect(instance.deleteButton).toBe('none');
|
|
24
|
+
expect(instance.filterButton).toBeFalsy();
|
|
25
|
+
expect(instance.columnFilterButton).toBeFalsy();
|
|
26
|
+
expect(instance.dragColumns).toBeTruthy();
|
|
27
|
+
expect(instance.resizeColumns).toBeTruthy();
|
|
28
|
+
expect(instance.showLayoutOptions).toBeTruthy();
|
|
29
|
+
expect(instance.showReload).toBeTruthy();
|
|
30
|
+
expect(instance.columnsButton).toBeFalsy();
|
|
31
|
+
expect(instance.columnsButtonIgnore).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should create new Grid replacing default values', () => {
|
|
35
|
+
const instance = new TekTreeGrid({
|
|
36
|
+
name: 'grid',
|
|
37
|
+
component: 'TekTreeGrid',
|
|
38
|
+
title: 'title',
|
|
39
|
+
addButton: true,
|
|
40
|
+
deleteButton: 'selection',
|
|
41
|
+
filterButton: true,
|
|
42
|
+
columnFilterButton: true,
|
|
43
|
+
dragColumns: false,
|
|
44
|
+
resizeColumns: false,
|
|
45
|
+
showLayoutOptions: false,
|
|
46
|
+
showReload: false,
|
|
47
|
+
columns: [
|
|
48
|
+
{ name: 'id' },
|
|
49
|
+
],
|
|
50
|
+
columnsButton: true,
|
|
51
|
+
columnsButtonIgnore: ['id'],
|
|
52
|
+
});
|
|
53
|
+
expect(instance.title).toBe('title');
|
|
54
|
+
expect(instance.addButton).toBeTruthy();
|
|
55
|
+
expect(instance.deleteButton).toBe('selection');
|
|
56
|
+
expect(instance.filterButton).toBeTruthy();
|
|
57
|
+
expect(instance.columnFilterButton).toBeTruthy();
|
|
58
|
+
expect(instance.dragColumns).toBeFalsy();
|
|
59
|
+
expect(instance.resizeColumns).toBeFalsy();
|
|
60
|
+
expect(instance.showLayoutOptions).toBeFalsy();
|
|
61
|
+
expect(instance.showReload).toBeFalsy();
|
|
62
|
+
expect(instance.columns[0]).toBeInstanceOf(TekGridColumn);
|
|
63
|
+
expect(instance.columnsButton).toBeTruthy();
|
|
64
|
+
expect(instance.columnsButtonIgnore).toEqual(['id']);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should create toolbar and footer', () => {
|
|
68
|
+
const instance = new TekTreeGrid({
|
|
69
|
+
name: 'grid',
|
|
70
|
+
component: 'TekGrid',
|
|
71
|
+
title: 'title',
|
|
72
|
+
addButton: true,
|
|
73
|
+
deleteButton: 'selection',
|
|
74
|
+
filterButton: true,
|
|
75
|
+
columnFilterButton: true,
|
|
76
|
+
dragColumns: false,
|
|
77
|
+
resizeColumns: false,
|
|
78
|
+
showLayoutOptions: false,
|
|
79
|
+
});
|
|
80
|
+
instance.onCreated();
|
|
81
|
+
expect(instance.toolbarSlot.length).toBe(7);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('should overwrite toolbar', () => {
|
|
85
|
+
const instance = new TekTreeGrid({
|
|
86
|
+
name: 'grid',
|
|
87
|
+
component: 'TekGrid',
|
|
88
|
+
title: 'title',
|
|
89
|
+
addButton: true,
|
|
90
|
+
deleteButton: 'selection',
|
|
91
|
+
filterButton: true,
|
|
92
|
+
columnFilterButton: true,
|
|
93
|
+
dragColumns: false,
|
|
94
|
+
resizeColumns: false,
|
|
95
|
+
showLayoutOptions: false,
|
|
96
|
+
toolbarSlot: [],
|
|
97
|
+
});
|
|
98
|
+
instance.onCreated();
|
|
99
|
+
expect(instance.toolbarSlot.length).toBe(0);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe('filterClick()', () => {
|
|
104
|
+
it('should apply filter from form to tekdatasource', () => {
|
|
105
|
+
const instance = new TekTreeGrid({
|
|
106
|
+
name: 'grid_filterClick11',
|
|
107
|
+
component: 'TekTreeGrid',
|
|
108
|
+
datasource: {
|
|
109
|
+
type: 'tek-rest',
|
|
110
|
+
},
|
|
111
|
+
columns: [
|
|
112
|
+
{
|
|
113
|
+
name: 'id',
|
|
114
|
+
filterProps: [{ name: 'id_edit', operation: 'IN', relation: 'AND' }],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'name',
|
|
118
|
+
componentProps: { name: 'name_edit', component: 'ZdSelect' },
|
|
119
|
+
filterProps: [{
|
|
120
|
+
name: 'name_edit', label: 'name', operation: 'NOT_EQUALS', relation: 'OR',
|
|
121
|
+
}],
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
let form: IForm = { name: 'form', component: 'ZdForm' };
|
|
127
|
+
let applyButton: IButton = { name: 'apply', component: 'ZdButton' };
|
|
128
|
+
const spyModalService = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
|
|
129
|
+
if (modal.children && modal.children.length > 2) {
|
|
130
|
+
form = modal.children[1] as IForm;
|
|
131
|
+
const modalFooter = modal.children[2];
|
|
132
|
+
if (modalFooter.rightSlot && modalFooter.rightSlot.length > 1) {
|
|
133
|
+
applyButton = modalFooter.rightSlot[1] as IButton;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return new Modal(modal);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
instance.onCreated();
|
|
141
|
+
|
|
142
|
+
const filterTooltip = instance.toolbarSlot[6];
|
|
143
|
+
if (filterTooltip && filterTooltip.children && filterTooltip.children.length > 0) {
|
|
144
|
+
const button = new Button(filterTooltip.children[0]);
|
|
145
|
+
const event = new Event('click');
|
|
146
|
+
button.click(event, {} as HTMLElement);
|
|
147
|
+
const formObject = new Form(form);
|
|
148
|
+
const spyMetadata = jest.spyOn(Metadata, 'getInstance').mockImplementation(() => formObject);
|
|
149
|
+
const spyDatasourceGet = jest.spyOn(instance.datasource, 'get');
|
|
150
|
+
formObject.value = {
|
|
151
|
+
'grid_filterClick11-filter-AND-IN-id-0': ['1', '2', '3'],
|
|
152
|
+
'grid_filterClick11-filter-OR-NOT_EQUALS-name-0': 'teste',
|
|
153
|
+
};
|
|
154
|
+
const applyButtonObject = new Button(applyButton);
|
|
155
|
+
formObject.validate = () => false;
|
|
156
|
+
applyButtonObject.click(event, {} as HTMLElement);
|
|
157
|
+
expect((instance.datasource as TekRestDatasource).dynamicFilter).toEqual({});
|
|
158
|
+
|
|
159
|
+
formObject.validate = () => true;
|
|
160
|
+
applyButtonObject.click(event, {} as HTMLElement);
|
|
161
|
+
expect((instance.datasource as TekRestDatasource).dynamicFilter).toEqual({
|
|
162
|
+
id: [
|
|
163
|
+
{
|
|
164
|
+
operation: 'IN',
|
|
165
|
+
relation: 'AND',
|
|
166
|
+
value: ['1', '2', '3'],
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
name: [
|
|
170
|
+
{
|
|
171
|
+
operation: 'NOT_EQUALS',
|
|
172
|
+
relation: 'OR',
|
|
173
|
+
value: 'teste',
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
});
|
|
177
|
+
expect(instance.columnHasFilterData({ name: 'name' } as TekGridColumn)).toBeTruthy();
|
|
178
|
+
expect(spyDatasourceGet).toBeCalled();
|
|
179
|
+
spyMetadata.mockClear();
|
|
180
|
+
spyDatasourceGet.mockClear();
|
|
181
|
+
}
|
|
182
|
+
spyModalService.mockClear();
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('should apply filter from form to datasource', () => {
|
|
186
|
+
let beforeApplyFilterCalled = false;
|
|
187
|
+
let changeLayoutCalled = false;
|
|
188
|
+
const instance = new TekTreeGrid({
|
|
189
|
+
name: 'grid_filterClick12',
|
|
190
|
+
component: 'TekTreeGrid',
|
|
191
|
+
columns: [
|
|
192
|
+
{
|
|
193
|
+
name: 'id',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'name',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
events: {
|
|
200
|
+
beforeApplyFilter: () => { beforeApplyFilterCalled = true; },
|
|
201
|
+
changeLayout: () => { changeLayoutCalled = true; },
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
let form: IForm = { name: 'form', component: 'ZdForm' };
|
|
206
|
+
let applyButton: IButton = { name: 'apply', component: 'ZdButton' };
|
|
207
|
+
const spyModalService = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
|
|
208
|
+
if (modal.children && modal.children.length > 2) {
|
|
209
|
+
form = modal.children[1] as IForm;
|
|
210
|
+
const modalFooter = modal.children[2];
|
|
211
|
+
if (modalFooter.rightSlot && modalFooter.rightSlot.length > 1) {
|
|
212
|
+
applyButton = modalFooter.rightSlot[1] as IButton;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return new Modal(modal);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
instance.onCreated();
|
|
220
|
+
|
|
221
|
+
const filterTooltip = instance.toolbarSlot[6];
|
|
222
|
+
if (filterTooltip && filterTooltip.children && filterTooltip.children.length > 0) {
|
|
223
|
+
const button = new Button(filterTooltip.children[0]);
|
|
224
|
+
const event = new Event('click');
|
|
225
|
+
button.click(event, {} as HTMLElement);
|
|
226
|
+
const formObject = new Form(form);
|
|
227
|
+
const spyMetadata = jest.spyOn(Metadata, 'getInstance').mockImplementation(() => formObject);
|
|
228
|
+
const spyDatasourceGet = jest.spyOn(instance.datasource, 'get');
|
|
229
|
+
formObject.value = {
|
|
230
|
+
'grid_filterClick12-filter-AND-CONTAINS-id-0': '1;2;3',
|
|
231
|
+
'grid_filterClick12-filter-AND-CONTAINS-name-0': 'teste',
|
|
232
|
+
};
|
|
233
|
+
const applyButtonObject = new Button(applyButton);
|
|
234
|
+
applyButtonObject.click({ defaultPrevented: true } as Event, {} as HTMLElement);
|
|
235
|
+
expect((instance.datasource as TekRestDatasource).filter).toEqual({
|
|
236
|
+
id: '1;2;3',
|
|
237
|
+
name: 'teste',
|
|
238
|
+
});
|
|
239
|
+
expect(beforeApplyFilterCalled).toBeTruthy();
|
|
240
|
+
expect(changeLayoutCalled).toBeTruthy();
|
|
241
|
+
expect(instance.columnHasFilterData({ name: 'name' } as TekGridColumn)).toBeTruthy();
|
|
242
|
+
expect(spyDatasourceGet).not.toBeCalled();
|
|
243
|
+
spyMetadata.mockClear();
|
|
244
|
+
spyDatasourceGet.mockClear();
|
|
245
|
+
}
|
|
246
|
+
spyModalService.mockClear();
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
describe('setSearch()', () => {
|
|
251
|
+
let baseProps: ITekTreeGrid;
|
|
252
|
+
let httpSpy: jest.SpyInstance;
|
|
253
|
+
|
|
254
|
+
beforeEach(() => {
|
|
255
|
+
httpSpy = jest.spyOn(Http, 'get').mockImplementation(() => Promise.resolve({
|
|
256
|
+
data: {
|
|
257
|
+
data: [
|
|
258
|
+
{ id: 1, name: 'task 1' },
|
|
259
|
+
{ id: 11, name: 'task 1.1', parent: 1 },
|
|
260
|
+
{ id: 12, name: 'task 1.2', parent: 1 },
|
|
261
|
+
{ id: 2, name: 'task 2' },
|
|
262
|
+
{ id: 3, name: 'task 3' },
|
|
263
|
+
],
|
|
264
|
+
pagination: {
|
|
265
|
+
page: 1,
|
|
266
|
+
total: 5,
|
|
267
|
+
limit: 15,
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
}));
|
|
271
|
+
|
|
272
|
+
baseProps = {
|
|
273
|
+
name: 'grid_search',
|
|
274
|
+
component: 'TekTreeGrid',
|
|
275
|
+
columns: [
|
|
276
|
+
{
|
|
277
|
+
name: 'id',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'name',
|
|
281
|
+
},
|
|
282
|
+
],
|
|
283
|
+
datasource: {
|
|
284
|
+
type: 'tek-rest',
|
|
285
|
+
lazyLoad: false,
|
|
286
|
+
route: '/grid',
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
httpSpy.mockClear();
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
afterAll(() => {
|
|
294
|
+
httpSpy.mockClear();
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('should set datasource search_join based on columns that have datasource', async () => {
|
|
298
|
+
const instance = new TekTreeGrid(baseProps);
|
|
299
|
+
|
|
300
|
+
await instance.setSearch('1');
|
|
301
|
+
expect(instance.datasource).toBeInstanceOf(TekRestDatasource);
|
|
302
|
+
expect((instance.datasource as TekRestDatasource).searchJoin).toEqual({});
|
|
303
|
+
expect(httpSpy).toHaveBeenCalledTimes(1);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
describe('getReport()', () => {
|
|
308
|
+
let httpReportSpy: jest.SpyInstance;
|
|
309
|
+
|
|
310
|
+
beforeEach(() => {
|
|
311
|
+
httpReportSpy = jest.spyOn(Http, 'post').mockImplementation((url) => {
|
|
312
|
+
if (url === 'https://zhreport.teknisa.com/generateReport') {
|
|
313
|
+
return Promise.resolve({
|
|
314
|
+
data: { messages: [{ message: 'pdf-report.html' }] },
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return Promise.reject();
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
afterEach(() => {
|
|
323
|
+
httpReportSpy.mockClear();
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it('should call getReport on export button click', () => {
|
|
327
|
+
(window as any).open = jest.fn();
|
|
328
|
+
|
|
329
|
+
const instance = new TekTreeGrid({
|
|
330
|
+
name: 'grid_getReport',
|
|
331
|
+
component: 'TekTreeGrid',
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
const spy = jest.spyOn(instance, 'getReport');
|
|
335
|
+
instance.onCreated();
|
|
336
|
+
|
|
337
|
+
const buttonProps = (instance as any).gridBase.exportConfigButtons[0] as IButton;
|
|
338
|
+
const button = new Button(buttonProps);
|
|
339
|
+
|
|
340
|
+
const event = new Event('click');
|
|
341
|
+
button.click(event, {} as HTMLElement);
|
|
342
|
+
|
|
343
|
+
expect(spy).toBeCalledTimes(1);
|
|
344
|
+
spy.mockClear();
|
|
345
|
+
|
|
346
|
+
(window as any).open.mockClear();
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it('should call window open on getReport method', async () => {
|
|
350
|
+
(window as any).open = jest.fn();
|
|
351
|
+
const httpSpy = jest.spyOn(Http, 'get').mockImplementation(() => Promise.resolve({
|
|
352
|
+
data: {
|
|
353
|
+
data: [],
|
|
354
|
+
pagination: {
|
|
355
|
+
page: 1,
|
|
356
|
+
total: 0,
|
|
357
|
+
limit: 10,
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
}));
|
|
361
|
+
|
|
362
|
+
const instance = new TekTreeGrid({
|
|
363
|
+
name: 'grid',
|
|
364
|
+
component: 'TekTreeGrid',
|
|
365
|
+
datasource: {
|
|
366
|
+
type: 'tek-rest',
|
|
367
|
+
uniqueKey: 'id',
|
|
368
|
+
route: '/zeedhi',
|
|
369
|
+
lazyLoad: false,
|
|
370
|
+
data: [
|
|
371
|
+
{ id: '1', department_id: '1' },
|
|
372
|
+
],
|
|
373
|
+
},
|
|
374
|
+
columns: [
|
|
375
|
+
{
|
|
376
|
+
name: 'id',
|
|
377
|
+
label: 'ID',
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
name: 'department_id',
|
|
381
|
+
label: 'Department ID',
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
const spy = jest.spyOn(window, 'open');
|
|
387
|
+
await instance.getReport('pdf');
|
|
388
|
+
|
|
389
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
390
|
+
|
|
391
|
+
(window as any).open.mockClear();
|
|
392
|
+
spy.mockClear();
|
|
393
|
+
httpSpy.mockClear();
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
describe('rowClick', () => {
|
|
398
|
+
it('rowClick method should call events.rowClick', () => {
|
|
399
|
+
const rowClick = jest.fn();
|
|
400
|
+
|
|
401
|
+
const data = [
|
|
402
|
+
{ id: '1', name: 'First' },
|
|
403
|
+
{ id: '2', name: 'Second' },
|
|
404
|
+
{ id: '3', name: 'Third' },
|
|
405
|
+
];
|
|
406
|
+
const grid = new TekTreeGrid({
|
|
407
|
+
name: 'grid',
|
|
408
|
+
component: 'TekGrid',
|
|
409
|
+
columns: [
|
|
410
|
+
{ name: 'id' },
|
|
411
|
+
{ name: 'name' },
|
|
412
|
+
],
|
|
413
|
+
datasource: {
|
|
414
|
+
data,
|
|
415
|
+
},
|
|
416
|
+
events: {
|
|
417
|
+
rowClick,
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
const event = new Event('click');
|
|
422
|
+
const element = document.createElement('div');
|
|
423
|
+
grid.rowClick(data[0], event, element);
|
|
424
|
+
|
|
425
|
+
expect(rowClick).toHaveBeenCalledWith({
|
|
426
|
+
event,
|
|
427
|
+
element,
|
|
428
|
+
row: data[0],
|
|
429
|
+
component: grid,
|
|
430
|
+
});
|
|
431
|
+
expect(grid.datasource.currentRow).toEqual(data[0]);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
it('should not call events.rowClick if cellClick prevents it', async () => {
|
|
435
|
+
const flushPromises = () => new Promise(setImmediate);
|
|
436
|
+
const rowClick = jest.fn();
|
|
437
|
+
|
|
438
|
+
const data = [
|
|
439
|
+
{ id: '1', name: 'First' },
|
|
440
|
+
{ id: '2', name: 'Second' },
|
|
441
|
+
{ id: '3', name: 'Third' },
|
|
442
|
+
];
|
|
443
|
+
const grid = new TekTreeGrid({
|
|
444
|
+
name: 'grid',
|
|
445
|
+
component: 'TekGrid',
|
|
446
|
+
columns: [
|
|
447
|
+
{ name: 'id' },
|
|
448
|
+
{ name: 'name' },
|
|
449
|
+
],
|
|
450
|
+
datasource: {
|
|
451
|
+
data,
|
|
452
|
+
},
|
|
453
|
+
events: {
|
|
454
|
+
rowClick,
|
|
455
|
+
cellClick: () => true,
|
|
456
|
+
},
|
|
457
|
+
});
|
|
458
|
+
await flushPromises();
|
|
459
|
+
|
|
460
|
+
const event = new Event('click');
|
|
461
|
+
const element = document.createElement('div');
|
|
462
|
+
grid.cellClick(data[0], grid.getColumn('id') as any, event, element);
|
|
463
|
+
grid.rowClick(data[0], event, element);
|
|
464
|
+
|
|
465
|
+
expect(rowClick).not.toHaveBeenCalled();
|
|
466
|
+
expect(grid.datasource.currentRow).toEqual({});
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TekGrid,
|
|
3
3
|
} from '../../../../src';
|
|
4
|
-
import {
|
|
4
|
+
import { GridController } from '../../../../src/utils/grid-base/grid-controller';
|
|
5
5
|
|
|
6
|
-
describe('
|
|
6
|
+
describe('GridController', () => {
|
|
7
7
|
describe('constructor()', () => {
|
|
8
8
|
it('should create controller and get info from grid', () => {
|
|
9
9
|
const grid = new TekGrid({
|
|
@@ -18,7 +18,7 @@ describe('TekGridController', () => {
|
|
|
18
18
|
showLayoutOptions: true,
|
|
19
19
|
actions: [{ name: 'button', component: 'ZdButton' }],
|
|
20
20
|
});
|
|
21
|
-
const instance = new
|
|
21
|
+
const instance = new GridController(grid);
|
|
22
22
|
|
|
23
23
|
expect(instance.gridTitle).toBe('title');
|
|
24
24
|
expect(instance.showAddButton).toBeFalsy();
|
|
@@ -17,6 +17,8 @@ export * from './tek-iterable-component-render/iterable-component-render';
|
|
|
17
17
|
export * from './tek-iterable-component-render/interfaces';
|
|
18
18
|
export * from './tek-iterable-carousel/iterable-carousel';
|
|
19
19
|
export * from './tek-iterable-carousel/interfaces';
|
|
20
|
+
export * from './tek-loading/loading';
|
|
21
|
+
export * from './tek-loading/interfaces';
|
|
20
22
|
export * from './tek-notifications/notifications';
|
|
21
23
|
export * from './tek-notifications/interfaces';
|
|
22
24
|
export * from './tek-grid/interfaces';
|
|
@@ -24,6 +26,9 @@ export * from './tek-grid/grid';
|
|
|
24
26
|
export * from './tek-grid/grid-column';
|
|
25
27
|
export * from './tek-grid/grid-columns-button';
|
|
26
28
|
export * from './tek-grid/layout-options';
|
|
29
|
+
export * from './tek-grid/filter-helper';
|
|
27
30
|
export * from './tek-datasource/interfaces';
|
|
28
31
|
export * from './tek-datasource/rest-datasource';
|
|
29
32
|
export * from './tek-datasource/memory-datasource';
|
|
33
|
+
export * from './tek-tree-grid/interfaces';
|
|
34
|
+
export * from './tek-tree-grid/tree-grid';
|
|
@@ -68,6 +68,7 @@ export declare class TekMemoryDatasource extends MemoryDatasource implements ITe
|
|
|
68
68
|
type: string;
|
|
69
69
|
translate?: boolean | string[] | undefined;
|
|
70
70
|
sortFunction?: ((value1: any, value2: any, columnName: string) => boolean) | undefined;
|
|
71
|
+
sortParams?: IDictionary<any> | undefined;
|
|
71
72
|
currentRow?: IDictionary<any> | undefined;
|
|
72
73
|
data?: IDictionary<any>[] | undefined;
|
|
73
74
|
filter?: IDictionary<any> | undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TekGridColumn } from '..';
|
|
2
|
+
export declare class TekFilterDynamicValues {
|
|
3
|
+
private static values;
|
|
4
|
+
private static formatDate;
|
|
5
|
+
static getLabel(name: string): string;
|
|
6
|
+
static getValue(name: string, column: TekGridColumn): string | string[];
|
|
7
|
+
static register(name: string, label: string, fn: () => Date | [Date, Date]): void;
|
|
8
|
+
static unregister(name: string): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TekGridColumn } from '..';
|
|
2
|
+
export declare class TekFilterHelper {
|
|
3
|
+
private static values;
|
|
4
|
+
private static formatDate;
|
|
5
|
+
static getLabel(name: string): string;
|
|
6
|
+
static getValue(name: string, column: TekGridColumn): string | string[];
|
|
7
|
+
static register(name: string, label: string, fn: () => Date | [Date, Date]): void;
|
|
8
|
+
static unregister(name: string): void;
|
|
9
|
+
}
|
|
@@ -4,6 +4,8 @@ import { ITekGridColumnsButton } from './interfaces';
|
|
|
4
4
|
* Base class for TekGrid Columns Button component
|
|
5
5
|
*/
|
|
6
6
|
export declare class TekGridColumnsButton extends IterableColumnsButton implements ITekGridColumnsButton {
|
|
7
|
+
hideGroups: boolean;
|
|
8
|
+
constructor(props: ITekGridColumnsButton);
|
|
7
9
|
onCreated(): void;
|
|
8
10
|
private aggregationDataSet;
|
|
9
11
|
getAggregationSelectData(): any[];
|