@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
@@ -379,6 +379,64 @@ describe('LayoutOptions', () => {
379
379
  });
380
380
  });
381
381
 
382
+ describe('addLayout()', () => {
383
+ it('should add new layout and not change current layout', () => {
384
+ const newLayout = {
385
+ name: 'Name first',
386
+ gridWidth: '544px',
387
+ columns: [
388
+ {
389
+ name: 'id',
390
+ width: '34px',
391
+ isVisible: true,
392
+ grouped: false,
393
+ },
394
+ {
395
+ name: 'name',
396
+ width: '107px',
397
+ isVisible: true,
398
+ grouped: false,
399
+ },
400
+ {
401
+ name: 'salary',
402
+ width: '114px',
403
+ isVisible: true,
404
+ grouped: false,
405
+ },
406
+ ],
407
+ };
408
+ const tag = new Tag({
409
+ name: 'toolbar',
410
+ component: 'ZdTag',
411
+ tag: 'span',
412
+ });
413
+ const grid = new TekGrid({
414
+ name: 'grid',
415
+ component: 'TekGrid',
416
+ columns: [
417
+ { name: 'id' },
418
+ { name: 'name' },
419
+ { name: 'salary' },
420
+ ],
421
+ });
422
+ const instance = new TekGridLayoutOptions({ name: 'layout', component: 'TekGridLayoutOptions' });
423
+ instance.parent = tag;
424
+ tag.parent = grid;
425
+
426
+ instance.onMounted({} as HTMLElement);
427
+
428
+ instance.addLayout(newLayout);
429
+
430
+ expect(instance.currentLayoutName).toBe('');
431
+ expect(instance.layoutNames).toEqual(['Name first']);
432
+ expect(instance.layouts).toEqual({ 'Name first': newLayout });
433
+ expect(savedLayouts).toBe(JSON.stringify({
434
+ currentLayoutName: '',
435
+ layouts: { 'Name first': newLayout },
436
+ }));
437
+ });
438
+ });
439
+
382
440
  describe('applyLayout()', () => {
383
441
  it('should change Layout and save layout', async () => {
384
442
  let viewCalled = false;
@@ -525,7 +583,6 @@ describe('LayoutOptions', () => {
525
583
  instance.updateLayout('Name first', {
526
584
  name: 'Name first',
527
585
  gridWidth: '500px',
528
- columns: [],
529
586
  filter: {
530
587
  name: 'a',
531
588
  },
@@ -539,13 +596,14 @@ describe('LayoutOptions', () => {
539
596
  ],
540
597
  },
541
598
  });
599
+
542
600
  expect(instance.currentLayoutName).toBe('Name first');
543
601
  expect(instance.layoutNames).toEqual(['Name first']);
544
602
  expect(instance.layouts).toEqual({
545
603
  'Name first': {
546
604
  name: 'Name first',
547
605
  gridWidth: '500px',
548
- columns: [],
606
+ columns: instance.originalColumnProps,
549
607
  filter: {
550
608
  name: 'a',
551
609
  },
@@ -562,4 +620,100 @@ describe('LayoutOptions', () => {
562
620
  });
563
621
  });
564
622
  });
623
+
624
+ describe('updateDefaultLayout()', () => {
625
+ it('should update default layout', async () => {
626
+ const tag = new Tag({
627
+ name: 'toolbar',
628
+ component: 'ZdTag',
629
+ tag: 'span',
630
+ });
631
+ const grid = new TekGrid({
632
+ name: 'grid',
633
+ component: 'TekGrid',
634
+ columns: [
635
+ { name: 'id' },
636
+ { name: 'name' },
637
+ { name: 'salary' },
638
+ ],
639
+ });
640
+ const instance = new TekGridLayoutOptions({ name: 'layout', component: 'TekGridLayoutOptions' });
641
+ instance.parent = tag;
642
+ tag.parent = grid;
643
+
644
+ await instance.onMounted({} as HTMLElement);
645
+
646
+ expect(instance.originalDatasourceOrder).toEqual([]);
647
+ expect(instance.originalDatasourceFilter).toEqual({});
648
+ expect(instance.originalDatasourceDynamicFilter).toEqual({});
649
+ expect(instance.originalColumnProps.map((item) => item.name)).toEqual(['id', 'name', 'salary']);
650
+
651
+ const newDynamicFilter = {
652
+ name: [
653
+ {
654
+ operation: 'CONTAINS',
655
+ relation: 'AND',
656
+ value: 'a',
657
+ },
658
+ ],
659
+ };
660
+
661
+ instance.updateDefaultLayout({
662
+ name: '',
663
+ columns: [
664
+ { name: 'name' },
665
+ { name: 'id' },
666
+ { name: 'hire_date' },
667
+ ],
668
+ order: ['name.asc'],
669
+ filter: {
670
+ name: 'a',
671
+ },
672
+ dynamicFilter: newDynamicFilter,
673
+ });
674
+
675
+ expect(instance.originalDatasourceOrder).toEqual(['name.asc']);
676
+ expect(instance.originalDatasourceFilter).toEqual({ name: 'a' });
677
+ expect(instance.originalDatasourceDynamicFilter).toEqual(newDynamicFilter);
678
+ expect(instance.originalColumnProps.map((item) => item.name)).toEqual(['name', 'id', 'hire_date', 'salary']);
679
+ });
680
+
681
+ it('should update default layout with some values', async () => {
682
+ const tag = new Tag({
683
+ name: 'toolbar',
684
+ component: 'ZdTag',
685
+ tag: 'span',
686
+ });
687
+ const grid = new TekGrid({
688
+ name: 'grid',
689
+ component: 'TekGrid',
690
+ columns: [
691
+ { name: 'id' },
692
+ { name: 'name' },
693
+ { name: 'salary' },
694
+ ],
695
+ });
696
+ const instance = new TekGridLayoutOptions({ name: 'layout', component: 'TekGridLayoutOptions' });
697
+ instance.parent = tag;
698
+ tag.parent = grid;
699
+
700
+ await instance.onMounted({} as HTMLElement);
701
+
702
+ const applyLayoutSpy = jest.spyOn(instance, 'applyLayout');
703
+
704
+ expect(instance.originalColumnProps.map((item) => item.name)).toEqual(['id', 'name', 'salary']);
705
+
706
+ instance.updateDefaultLayout({
707
+ name: 'default',
708
+ columns: [
709
+ { name: 'name' },
710
+ { name: 'id' },
711
+ { name: 'hire_date' },
712
+ ],
713
+ });
714
+
715
+ expect(instance.originalColumnProps.map((item) => item.name)).toEqual(['name', 'id', 'hire_date', 'salary']);
716
+ expect(applyLayoutSpy).toBeCalled();
717
+ });
718
+ });
565
719
  });
@@ -26,6 +26,9 @@ describe('IterableComponentRender', () => {
26
26
  text: 'NO_RESULT',
27
27
  },
28
28
  ]);
29
+ expect(instance.height).toBe('auto');
30
+ expect(instance.maxHeight).toBe('none');
31
+ expect(instance.minHeight).toBe('none');
29
32
  });
30
33
 
31
34
  it('should create new IterableComponentRender replacing default values', () => {
@@ -61,8 +64,14 @@ describe('IterableComponentRender', () => {
61
64
  component: 'ZdText',
62
65
  text: 'footer',
63
66
  }],
67
+ height: '400px',
68
+ minHeight: '300px',
69
+ maxHeight: '500px',
64
70
  });
65
71
 
72
+ expect(instance.height).toBe('400px');
73
+ expect(instance.minHeight).toBe('300px');
74
+ expect(instance.maxHeight).toBe('500px');
66
75
  expect(instance.rowPropName).toBe('div');
67
76
  expect(instance.componentMetadata).toStrictEqual(undefined);
68
77
  expect(instance.footerSlot).toEqual([
@@ -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
+ });
@@ -14,6 +14,9 @@ describe('ProductCard', () => {
14
14
  expect(instance.errorImagePath).toBe('');
15
15
  expect(instance.errorImageText).toBe('UNAVAILABLE_IMAGE');
16
16
  expect(instance.width).toBe('');
17
+ expect(instance.height).toBe('auto');
18
+ expect(instance.maxHeight).toBe('none');
19
+ expect(instance.minHeight).toBe('none');
17
20
  });
18
21
 
19
22
  it('should create new ProductCard replace default values', () => {
@@ -28,6 +31,9 @@ describe('ProductCard', () => {
28
31
  errorImagePath: 'image-error.jpg',
29
32
  errorImageText: 'Image not found',
30
33
  width: '200',
34
+ height: '400px',
35
+ minHeight: '300px',
36
+ maxHeight: '500px',
31
37
  });
32
38
  expect(instance.to).toBe('/home');
33
39
  expect(instance.id).toBe('id');
@@ -37,6 +43,9 @@ describe('ProductCard', () => {
37
43
  expect(instance.errorImageText).toBe('Image not found');
38
44
  expect(instance.width).toBe('200');
39
45
  expect(instance.productPriceFormat).toBe('$150.00');
46
+ expect(instance.height).toBe('400px');
47
+ expect(instance.minHeight).toBe('300px');
48
+ expect(instance.maxHeight).toBe('500px');
40
49
  });
41
50
 
42
51
  it('productPrice value 0', () => {
@@ -1,7 +1,7 @@
1
1
  import {
2
- Button, Form, IButton, IForm, IModal, Modal, ModalService,
2
+ Button, Form, IButton, IForm, IModal, Modal, ModalService, Text, TextInput,
3
3
  } from '@zeedhi/common';
4
- import { Http, Metadata } from '@zeedhi/core';
4
+ import { Http, IDictionary, Metadata } from '@zeedhi/core';
5
5
  import {
6
6
  ITekTreeGrid, TekGridColumn, TekRestDatasource, TekTreeGrid,
7
7
  } from '../../../../src';
@@ -466,4 +466,161 @@ describe('TekTreeGrid', () => {
466
466
  expect(grid.datasource.currentRow).toEqual({});
467
467
  });
468
468
  });
469
+
470
+ describe('layoutOptions', () => {
471
+ it('should return layout options instance', async () => {
472
+ const grid = new TekTreeGrid({
473
+ name: 'grid',
474
+ component: 'TekGrid',
475
+ showLayoutOptions: false,
476
+ });
477
+
478
+ expect(grid.layoutOptions).toBeUndefined();
479
+
480
+ grid.showLayoutOptions = true;
481
+ const layoutOptionsComp = { name: 'grid_layout_options' };
482
+ const spyMetadata = jest.spyOn(Metadata, 'getInstance').mockImplementation(() => layoutOptionsComp);
483
+ expect(grid.layoutOptions).toEqual(layoutOptionsComp);
484
+ spyMetadata.mockClear();
485
+ });
486
+ });
487
+
488
+ describe('getAtomInstance', () => {
489
+ const createAtom = (name: string) => new Text({
490
+ name: `${name}_gridTitle`,
491
+ component: 'ZdText',
492
+ text: 'Employees',
493
+ });
494
+
495
+ it('when called, should return the instance of an atom component', () => {
496
+ const instance = new TekTreeGrid({ name: 'Grid', component: 'TekGrid' });
497
+ const atom = createAtom(instance.name);
498
+ const spyMetadata = jest.spyOn(Metadata, 'getInstance').mockImplementation(() => atom);
499
+
500
+ const gridAtom = instance.getAtomInstance<Text>('TITLE');
501
+
502
+ expect(gridAtom).toEqual(atom);
503
+ spyMetadata.mockClear();
504
+ });
505
+ });
506
+
507
+ describe('getFilterInputs', () => {
508
+ const mockMetadata = (instance: TekTreeGrid) => {
509
+ const inputs: IDictionary = {};
510
+ instance.columns.forEach((col) => {
511
+ if (!col.filterable || !col.filterProps) return;
512
+
513
+ col.filterProps.forEach((filter: any, index: number) => {
514
+ const relation = filter.relation || 'AND';
515
+ const operation = filter.operation || 'CONTAINS';
516
+
517
+ const name = `${instance.name}-filter-${relation}-${operation}-${col.name}-${index}`;
518
+ inputs[name] = new TextInput({
519
+ name,
520
+ ...filter.filterProps,
521
+ });
522
+ });
523
+ });
524
+ return jest.spyOn(Metadata, 'getInstance').mockImplementation((name: string) => inputs[name]);
525
+ };
526
+
527
+ it('when called with null parameter, should return all the filter inputs', () => {
528
+ const instance = new TekTreeGrid({
529
+ name: 'grid',
530
+ component: 'TekGrid',
531
+ datasource: {
532
+ type: 'tek-rest',
533
+ uniqueKey: 'id',
534
+ route: '/zeedhi',
535
+ lazyLoad: false,
536
+ },
537
+ columns: [
538
+ { name: 'id' },
539
+ { name: 'name', filterable: true, filterProps: [{ name: 'name_edit', label: 'name' }] },
540
+ {
541
+ name: 'salary',
542
+ filterable: true,
543
+ filterProps: [
544
+ {
545
+ name: 'salary_edit',
546
+ component: 'ZdCurrency',
547
+ operation: 'GREATER_THAN_EQUALS',
548
+ label: 'Salary (min)',
549
+ },
550
+ {
551
+ name: 'salary_edit',
552
+ component: 'ZdCurrency',
553
+ operation: 'LESS_THAN_EQUALS',
554
+ label: 'Salary (max)',
555
+ },
556
+ ],
557
+ },
558
+ ],
559
+ });
560
+
561
+ const spy = mockMetadata(instance);
562
+ instance.onCreated();
563
+ const filterTooltip = instance.toolbarSlot[6];
564
+ if (filterTooltip && filterTooltip.children && filterTooltip.children.length > 0) {
565
+ const button = new Button(filterTooltip.children[0]);
566
+ const event = new Event('click');
567
+ button.click(event, {} as HTMLElement);
568
+ }
569
+
570
+ const inputs = instance.getFilterInputs();
571
+ expect(inputs[0].name).toBe('grid-filter-AND-CONTAINS-name-0');
572
+ expect(inputs[1].name).toBe('grid-filter-AND-GREATER_THAN_EQUALS-salary-0');
573
+ expect(inputs[2].name).toBe('grid-filter-AND-LESS_THAN_EQUALS-salary-1');
574
+ spy.mockClear();
575
+ });
576
+
577
+ it('when called, should return the instances of filters with multiple inputs', () => {
578
+ const instance = new TekTreeGrid({
579
+ name: 'grid',
580
+ component: 'TekGrid',
581
+ datasource: {
582
+ type: 'tek-rest',
583
+ uniqueKey: 'id',
584
+ route: '/zeedhi',
585
+ lazyLoad: false,
586
+ },
587
+ columns: [
588
+ { name: 'id' },
589
+ { name: 'name', filterable: true, filterProps: [{ name: 'name_edit', label: 'name' }] },
590
+ {
591
+ name: 'salary',
592
+ filterable: true,
593
+ filterProps: [
594
+ {
595
+ name: 'salary_edit',
596
+ component: 'ZdCurrency',
597
+ operation: 'GREATER_THAN_EQUALS',
598
+ label: 'Salary (min)',
599
+ },
600
+ {
601
+ name: 'salary_edit',
602
+ component: 'ZdCurrency',
603
+ operation: 'LESS_THAN_EQUALS',
604
+ label: 'Salary (max)',
605
+ },
606
+ ],
607
+ },
608
+ ],
609
+ });
610
+
611
+ const spy = mockMetadata(instance);
612
+ instance.onCreated();
613
+ const filterTooltip = instance.toolbarSlot[6];
614
+ if (filterTooltip && filterTooltip.children && filterTooltip.children.length > 0) {
615
+ const button = new Button(filterTooltip.children[0]);
616
+ const event = new Event('click');
617
+ button.click(event, {} as HTMLElement);
618
+ }
619
+
620
+ const inputs = instance.getFilterInputs('salary');
621
+ expect(inputs[0].name).toBe('grid-filter-AND-GREATER_THAN_EQUALS-salary-0');
622
+ expect(inputs[1].name).toBe('grid-filter-AND-LESS_THAN_EQUALS-salary-1');
623
+ spy.mockClear();
624
+ });
625
+ });
469
626
  });
@@ -15,7 +15,8 @@ describe('GridController', () => {
15
15
  filterButton: true,
16
16
  columnsButton: true,
17
17
  showExport: true,
18
- showLayoutOptions: true,
18
+ showLayoutOptionsButton: true,
19
+ showReloadButton: true,
19
20
  actions: [{ name: 'button', component: 'ZdButton' }],
20
21
  });
21
22
  const instance = new GridController(grid);
@@ -27,10 +28,14 @@ describe('GridController', () => {
27
28
  expect(instance.showActionsButton).toBeTruthy();
28
29
  expect(instance.showExportButton).toBeTruthy();
29
30
  expect(instance.showActionAndExportButton).toBeTruthy();
31
+ expect(instance.showSearchInput).toBeTruthy();
32
+ expect(instance.showDivider2).toBeTruthy();
33
+ expect(instance.showDivider3).toBeTruthy();
30
34
  expect(instance.showColumnsButton).toBeTruthy();
31
35
  expect(instance.columnsButtonIgnore).toEqual([]);
32
- expect(instance.showLayoutOptions).toBeTruthy();
33
- expect(instance.showFirstDivider).toBeTruthy();
36
+ expect(instance.showLayoutOptionsButton).toBeTruthy();
37
+ expect(instance.showReloadButton).toBeTruthy();
38
+ expect(instance.showDivider1).toBeTruthy();
34
39
  expect(instance.isEditing).toBeFalsy();
35
40
  expect(instance.isNotEditing).toBeTruthy();
36
41
  expect(instance.disableDeleteButton).toBeTruthy();
@@ -38,12 +43,110 @@ describe('GridController', () => {
38
43
  grid.datasource.currentRow = { id: '1' };
39
44
  expect(instance.disableDeleteButton).toBeFalsy();
40
45
  grid.showExport = false;
46
+ grid.showLayoutOptions = false;
47
+ grid.showReload = false;
48
+ grid.columnsButton = false;
41
49
  grid.actions = [];
42
50
  grid.deleteButton = 'selection';
43
51
  grid.selectedRows = [{ id: '1' }];
44
52
  expect(instance.disableDeleteButton).toBeFalsy();
45
53
  expect(instance.showExportButton).toBeFalsy();
46
54
  expect(instance.showActionAndExportButton).toBeFalsy();
55
+ expect(instance.showLayoutOptionsButton).toBeFalsy();
56
+ });
57
+
58
+ it('should verify if showDivider3 is visibility', () => {
59
+ const grid = new TekGrid({
60
+ name: 'Grid',
61
+ component: 'TekGrid',
62
+ addButton: false,
63
+ deleteButton: 'none',
64
+ filterButton: false,
65
+ columnsButton: false,
66
+ showReload: false,
67
+ showLayoutOptions: false,
68
+ showReloadButton: true,
69
+ showSearch: false,
70
+ showExport: false,
71
+ actions: [],
72
+ });
73
+ const instance = new GridController(grid);
74
+
75
+ expect(instance.showDivider3).toBeFalsy();
76
+ expect(instance.showActionsButton).toBeFalsy();
77
+ expect(instance.showExportButton).toBeFalsy();
78
+ expect(instance.showSearchInput).toBeFalsy();
79
+ });
80
+
81
+ it('should verify if showActionAndExportButton is visibility', () => {
82
+ const grid = new TekGrid({
83
+ name: 'Grid',
84
+ component: 'TekGrid',
85
+ addButton: false,
86
+ deleteButton: 'none',
87
+ filterButton: false,
88
+ columnsButton: true,
89
+ showReload: false,
90
+ showLayoutOptions: true,
91
+ showReloadButton: true,
92
+ showSearch: false,
93
+ showExport: false,
94
+ actions: [],
95
+ });
96
+ const instance = new GridController(grid);
97
+
98
+ expect(instance.showActionAndExportButton).toBeFalsy();
99
+ expect(instance.showActionsButton).toBeFalsy();
100
+ expect(instance.showSearchInput).toBeFalsy();
101
+ expect(instance.showExportButton).toBeFalsy();
102
+ });
103
+
104
+ it('should verify if showDivider2 is visibility', () => {
105
+ const grid = new TekGrid({
106
+ name: 'Grid',
107
+ component: 'TekGrid',
108
+ addButton: false,
109
+ deleteButton: 'none',
110
+ filterButton: false,
111
+ columnsButton: false,
112
+ showReload: true,
113
+ showLayoutOptions: false,
114
+ showSearch: false,
115
+ showExport: false,
116
+ actions: [],
117
+ });
118
+ const instance = new GridController(grid);
119
+
120
+ expect(instance.showDivider2).toBeFalsy();
121
+ expect(instance.showActionsButton).toBeFalsy();
122
+ expect(instance.showSearchInput).toBeFalsy();
123
+ expect(instance.showColumnsButton).toBeFalsy();
124
+ expect(instance.showExportButton).toBeFalsy();
125
+ expect(instance.showReloadButton).toBeTruthy();
126
+ });
127
+
128
+ it('should verify if showDivider1 is visibility', () => {
129
+ const grid = new TekGrid({
130
+ name: 'Grid',
131
+ component: 'TekGrid',
132
+ addButton: true,
133
+ deleteButton: 'selection',
134
+ filterButton: false,
135
+ columnsButton: false,
136
+ showReload: false,
137
+ showLayoutOptions: false,
138
+ showSearch: false,
139
+ showExport: false,
140
+ actions: [],
141
+ });
142
+ const instance = new GridController(grid);
143
+
144
+ expect(instance.showDivider1).toBeFalsy();
145
+ expect(instance.showActionsButton).toBeFalsy();
146
+ expect(instance.showSearchInput).toBeFalsy();
147
+ expect(instance.showColumnsButton).toBeFalsy();
148
+ expect(instance.showExportButton).toBeFalsy();
149
+ expect(instance.showReloadButton).toBeFalsy();
47
150
  });
48
151
  });
49
152
  });
@@ -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';
@@ -72,14 +72,16 @@ export declare class TekMemoryDatasource extends MemoryDatasource implements ITe
72
72
  currentRow?: IDictionary<any> | undefined;
73
73
  data?: IDictionary<any>[] | undefined;
74
74
  filter?: IDictionary<any> | undefined;
75
- limit?: string | number | undefined;
76
- /**
75
+ limit?: string | number | undefined; /**
77
76
  * Dynamic Filter Operations
78
77
  */
79
78
  loadAll?: boolean | undefined;
80
79
  loading?: boolean | undefined;
81
80
  order?: string[] | undefined;
82
81
  page?: string | number | undefined;
82
+ /**
83
+ * Dynamic Filter Relations
84
+ */
83
85
  search?: string | undefined;
84
86
  searchIn?: string[] | undefined;
85
87
  uniqueKey?: string | undefined;
@@ -7,9 +7,10 @@ import { IFilterPropsComponent, ITekGridColumn, ITekGridColumnAggregation } from
7
7
  export declare class TekGridColumn extends GridColumnEditable implements ITekGridColumn {
8
8
  filterProps: IFilterPropsComponent | IFilterPropsComponent[];
9
9
  filterable: boolean;
10
+ filterIndex?: number;
10
11
  fixed: boolean;
11
12
  private groupedValue;
12
- groupOpened?: boolean;
13
+ private groupOpenedValue?;
13
14
  groupLabelForEmptyValue: string;
14
15
  private aggregationValue?;
15
16
  private isVisibleValue;
@@ -33,6 +34,8 @@ export declare class TekGridColumn extends GridColumnEditable implements ITekGri
33
34
  set grouped(value: boolean);
34
35
  get aggregation(): ITekGridColumnAggregation;
35
36
  set aggregation(value: ITekGridColumnAggregation);
37
+ get groupOpened(): boolean | undefined;
38
+ set groupOpened(value: boolean | undefined);
36
39
  get isVisible(): boolean;
37
40
  set isVisible(value: boolean);
38
41
  private changeGrouping;