@zeedhi/teknisa-components-common 3.0.0 → 3.0.1

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 (103) hide show
  1. package/.package.json +4 -1
  2. package/dist/teknisa-components-common.js +3722 -32
  3. package/dist/teknisa-components-common.min.js +3722 -32
  4. package/dist/types/components/index.d.ts +5 -0
  5. package/dist/types/components/tek-datasource/index.d.ts +3 -0
  6. package/dist/types/components/tek-datasource/interfaces.d.ts +16 -0
  7. package/dist/types/components/tek-datasource/tek-memory-datasource.d.ts +93 -0
  8. package/dist/types/components/tek-datasource/tek-rest-datasource.d.ts +95 -0
  9. package/dist/types/components/tek-grid/columns-searcher.d.ts +5 -0
  10. package/dist/types/components/tek-grid/dynamic-filter-datasource-factory.d.ts +6 -0
  11. package/dist/types/components/tek-grid/filter-helper.d.ts +7 -0
  12. package/dist/types/components/tek-grid/grid-filter-button.d.ts +29 -0
  13. package/dist/types/components/tek-grid/grouped-data-manager.d.ts +82 -0
  14. package/dist/types/components/tek-grid/grouped-data-selector.d.ts +7 -0
  15. package/dist/types/components/tek-grid/grouped-view-navigator.d.ts +14 -0
  16. package/dist/types/components/tek-grid/index.d.ts +18 -0
  17. package/dist/types/components/tek-grid/interfaces.d.ts +259 -0
  18. package/dist/types/components/tek-grid/keymap-grouped.d.ts +6 -0
  19. package/dist/types/components/tek-grid/layout-options.d.ts +39 -0
  20. package/dist/types/components/tek-grid/tek-grid-column.d.ts +42 -0
  21. package/dist/types/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button-controller.d.ts +8 -0
  22. package/dist/types/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button.d.ts +13 -0
  23. package/dist/types/components/tek-grid/tek-grid-controller.d.ts +31 -0
  24. package/dist/types/components/tek-grid/tek-grid-events.d.ts +31 -0
  25. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/export-options/button-option.d.ts +17 -0
  26. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/export-options/index.d.ts +3 -0
  27. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/export-options/interfaces.d.ts +5 -0
  28. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/export-options/multi-option.d.ts +12 -0
  29. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/index.d.ts +2 -0
  30. package/dist/types/components/tek-grid/tek-grid-toolbar-provider/tek-grid-toolbar-provider.d.ts +22 -0
  31. package/dist/types/components/tek-grid/tek-grid.d.ts +216 -0
  32. package/dist/types/components/tek-user-info/TekUserInfoController.d.ts +22 -0
  33. package/dist/types/components/tek-user-info/interfaces.d.ts +27 -0
  34. package/dist/types/components/tek-user-info/tek-user-info-list.d.ts +32 -0
  35. package/dist/types/components/tek-user-info/tek-user-info.d.ts +37 -0
  36. package/dist/types/error/tek-grid-delete-rows-error.d.ts +7 -0
  37. package/dist/types/error/teknisa-common-error.d.ts +6 -0
  38. package/dist/types/index.d.ts +1 -0
  39. package/dist/types/utils/config/config.d.ts +7 -0
  40. package/dist/types/utils/index.d.ts +3 -0
  41. package/dist/types/utils/is-filled-object/is-filled-object.d.ts +2 -0
  42. package/dist/types/utils/is-nil.d.ts +1 -0
  43. package/package.json +2 -2
  44. package/src/components/index.ts +5 -12
  45. package/src/components/tek-datasource/index.ts +3 -0
  46. package/src/components/tek-datasource/interfaces.ts +36 -0
  47. package/src/components/tek-datasource/tek-memory-datasource.ts +314 -0
  48. package/src/components/tek-datasource/tek-rest-datasource.ts +224 -0
  49. package/src/components/tek-grid/columns-searcher.ts +22 -0
  50. package/src/components/tek-grid/dynamic-filter-datasource-factory.ts +20 -0
  51. package/src/components/tek-grid/filter-helper.ts +20 -0
  52. package/src/components/tek-grid/grid-filter-button.ts +419 -0
  53. package/src/components/tek-grid/grouped-data-manager.ts +448 -0
  54. package/src/components/tek-grid/grouped-data-selector.ts +40 -0
  55. package/src/components/tek-grid/grouped-view-navigator.ts +84 -0
  56. package/src/components/tek-grid/index.ts +18 -0
  57. package/src/components/tek-grid/interfaces.ts +329 -0
  58. package/src/components/tek-grid/keymap-grouped.ts +20 -0
  59. package/src/components/tek-grid/layout-options.ts +248 -0
  60. package/src/components/tek-grid/tek-grid-column.ts +193 -0
  61. package/src/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button-controller.ts +28 -0
  62. package/src/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button.ts +38 -0
  63. package/src/components/tek-grid/tek-grid-controller.ts +140 -0
  64. package/src/components/tek-grid/tek-grid-events.ts +105 -0
  65. package/src/components/tek-grid/tek-grid-toolbar-provider/export-options/button-option.ts +26 -0
  66. package/src/components/tek-grid/tek-grid-toolbar-provider/export-options/index.ts +3 -0
  67. package/src/components/tek-grid/tek-grid-toolbar-provider/export-options/interfaces.ts +6 -0
  68. package/src/components/tek-grid/tek-grid-toolbar-provider/export-options/multi-option.ts +85 -0
  69. package/src/components/tek-grid/tek-grid-toolbar-provider/index.ts +2 -0
  70. package/src/components/tek-grid/tek-grid-toolbar-provider/tek-grid-toolbar-provider.ts +365 -0
  71. package/src/components/tek-grid/tek-grid.ts +1118 -0
  72. package/src/components/tek-user-info/TekUserInfoController.ts +87 -0
  73. package/src/components/tek-user-info/interfaces.ts +21 -0
  74. package/src/components/tek-user-info/tek-user-info-list.ts +64 -0
  75. package/src/components/tek-user-info/tek-user-info.ts +337 -0
  76. package/src/error/tek-grid-delete-rows-error.ts +15 -0
  77. package/src/error/teknisa-common-error.ts +8 -0
  78. package/src/index.ts +1 -0
  79. package/src/utils/config/config.ts +8 -0
  80. package/src/utils/index.ts +3 -0
  81. package/src/utils/is-filled-object/is-filled-object.ts +5 -0
  82. package/src/utils/is-nil.ts +3 -0
  83. package/tests/unit/components/tek-grid/button-option.spec.ts +49 -0
  84. package/tests/unit/components/tek-grid/columns-searcher.spec.ts +112 -0
  85. package/tests/unit/components/tek-grid/dynamic-filter-datasource-factory.spec.ts +90 -0
  86. package/tests/unit/components/tek-grid/filter-helper.spec.ts +34 -130
  87. package/tests/unit/components/tek-grid/grid-filter-button.spec.ts +110 -241
  88. package/tests/unit/components/tek-grid/grouped-data-manager.spec.ts +593 -0
  89. package/tests/unit/components/tek-grid/grouped-data-selector.spec.ts +136 -0
  90. package/tests/unit/components/tek-grid/grouped-view-navigator.spec.ts +244 -0
  91. package/tests/unit/components/tek-grid/keymap-grouped.spec.ts +20 -0
  92. package/tests/unit/components/tek-grid/{layout_options.spec.ts → layout-options.spec.ts} +77 -35
  93. package/tests/unit/components/tek-grid/multi-option.spec.ts +139 -0
  94. package/tests/unit/components/tek-grid/{grid-column.spec.ts → tek-grid-column.spec.ts} +48 -6
  95. package/tests/unit/components/tek-grid/{grid-columns-button.spec.ts → tek-grid-columns-button.spec.ts} +42 -9
  96. package/tests/unit/components/tek-grid/tek-grid-controller.spec.ts +253 -0
  97. package/tests/unit/components/tek-grid/tek-grid-events.spec.ts +186 -0
  98. package/tests/unit/components/tek-grid/tek-grid-toolbar-provider.spec.ts +34 -0
  99. package/tests/unit/components/tek-grid/tek-grid.spec.ts +895 -0
  100. package/tests/unit/components/tek-grid/tek-memory-datasource.spec.ts +482 -0
  101. package/tests/unit/components/tek-grid/tek-rest-datasource.spec.ts +422 -0
  102. package/src/error/delete-rows-error.ts +0 -11
  103. package/tests/unit/components/tek-grid/grid.spec.ts +0 -2701
@@ -1,21 +1,22 @@
1
1
  /* eslint-disable no-underscore-dangle */
2
2
 
3
3
  import {
4
- Button, Date, Form, type IButton, type IForm, type IModal, type ISelectMultiple, Modal, ModalService, SelectMultiple,
4
+ Button, Form, IButton, IForm, IModal, Modal, ModalService,
5
5
  } from '@zeedhi/common';
6
6
  import {
7
- Http, Metadata, DateHelper, Config,
7
+ Http, Metadata, DateHelper,
8
+ Loader,
9
+ SimpleControllerBuilder,
8
10
  } from '@zeedhi/core';
9
11
  import {
10
- type IFilterPropsComponent,
11
- type ITekGridFilterButton,
12
- TekGrid, type TekGridColumn, TekGridFilterButton, type TekRestDatasource,
12
+ ITekGridFilterButton,
13
+ TekGrid, TekGridFilterButton, TekRestDatasource,
13
14
  } from '../../../../src';
14
- import { setClick, getChild } from '../../../__helpers__';
15
+ import { flushPromises, getChild, setClick } from '../../__helpers__';
15
16
 
16
17
  jest.mock('lodash.debounce', () => jest.fn((fn) => fn));
17
18
 
18
- jest.useFakeTimers();
19
+ // jest.useFakeTimers();
19
20
 
20
21
  const clickOnFilterButton = (grid: TekGrid, event?: any) => {
21
22
  const buttonProps = getChild<ITekGridFilterButton>(grid.toolbarSlot, `${grid.name}_filterButton`);
@@ -26,6 +27,10 @@ const clickOnFilterButton = (grid: TekGrid, event?: any) => {
26
27
  };
27
28
 
28
29
  describe('TekGridFilterButton', () => {
30
+ beforeAll(() => {
31
+ Loader.setBuilder(new SimpleControllerBuilder());
32
+ });
33
+
29
34
  beforeEach(() => {
30
35
  // clear all metadata instances before testing
31
36
  const { instances } = Metadata as any;
@@ -33,7 +38,7 @@ describe('TekGridFilterButton', () => {
33
38
  Metadata.clearInstance(key, instances[key].componentId);
34
39
  });
35
40
 
36
- jest.clearAllTimers();
41
+ // jest.clearAllTimers();
37
42
  });
38
43
 
39
44
  describe('loadGrid()', () => {
@@ -92,6 +97,7 @@ describe('TekGridFilterButton', () => {
92
97
  name: 'grid_filterClick1',
93
98
  component: 'TekGrid',
94
99
  });
100
+ instance.onCreated();
95
101
 
96
102
  const formInstance = new Form({
97
103
  name: 'form',
@@ -105,11 +111,10 @@ describe('TekGridFilterButton', () => {
105
111
  const button = clickOnFilterButton(instance);
106
112
  button.onCreated();
107
113
 
108
- expect(spy).toBeCalledTimes(1);
114
+ expect(spy).toHaveBeenCalledTimes(1);
109
115
  button.click();
110
- expect(spy).toBeCalledTimes(1);
116
+ expect(spy).toHaveBeenCalledTimes(1);
111
117
  expect(button.isVisible).toBeFalsy();
112
- (instance as any).gridBase.hideFilterModal();
113
118
 
114
119
  button.onBeforeDestroy();
115
120
 
@@ -153,7 +158,7 @@ describe('TekGridFilterButton', () => {
153
158
  clickOnFilterButton(instance, { defaultPrevented: true });
154
159
 
155
160
  expect(filterClickCalled).toBeTruthy();
156
- expect(spy).not.toBeCalled();
161
+ expect(spy).not.toHaveBeenCalled();
157
162
 
158
163
  spy.mockReset();
159
164
  });
@@ -280,60 +285,6 @@ describe('TekGridFilterButton', () => {
280
285
  spy.mockReset();
281
286
  });
282
287
 
283
- it('when creating a SelectMultiple filter, should change the filter value depending on checkboxAll', () => {
284
- const instance = new TekGrid({
285
- name: 'grid_filterClick5',
286
- component: 'TekGrid',
287
- columns: [
288
- {
289
- name: 'id',
290
- filterable: true,
291
- filterProps: [{
292
- name: 'id_edit', label: 'id', component: 'ZdSelectMultiple', showCheckboxAll: false,
293
- }],
294
- },
295
- ],
296
- });
297
-
298
- let form: IForm = { name: 'form', component: 'ZdForm' };
299
- let select: ISelectMultiple = { name: 'select', component: 'ZdSelectMultiple' };
300
- let applyButton: IButton = { name: 'apply', component: 'ZdButton' };
301
- const spy = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
302
- const modalFooter = getChild(modal.children || [], `${instance.name}-filter-footer`);
303
- form = getChild(modal.children || [], `${instance.name}-filter-form`);
304
- select = getChild(form.children || [], `${instance.name}-filter-AND-CONTAINS-id-0`);
305
- applyButton = getChild(modalFooter.rightSlot, `${instance.name}-filter-okButton`);
306
-
307
- return new Modal(modal);
308
- });
309
- instance.onCreated();
310
- clickOnFilterButton(instance);
311
- const applyButtonObject = new Button(applyButton);
312
-
313
- const formObject = new Form(form);
314
- const selectObject = new SelectMultiple(select);
315
- jest.spyOn(Metadata, 'getInstance').mockReturnValue(formObject);
316
- jest.spyOn(formObject, 'getChildInstance').mockReturnValue(selectObject);
317
-
318
- formObject.value['grid_filterClick5-filter-AND-CONTAINS-id-0'] = ['example'];
319
- setClick(applyButtonObject);
320
-
321
- expect(instance.datasource.filter).toEqual({
322
- id: ['example'],
323
- });
324
-
325
- selectObject.checkboxAll = true;
326
- setClick(applyButtonObject);
327
-
328
- expect(instance.datasource.filter).toEqual({});
329
-
330
- (Config as any).set({ selectAllCompatibilityMode: true });
331
- setClick(applyButtonObject);
332
- expect(instance.datasource.filter).toEqual({ id: 'T' });
333
-
334
- spy.mockReset();
335
- });
336
-
337
288
  it('should create modal with filterable and ordered form elements', () => {
338
289
  const instance = new TekGrid({
339
290
  name: 'grid-filter-order',
@@ -484,171 +435,6 @@ describe('TekGridFilterButton', () => {
484
435
  dateHelperSpy.mockReset();
485
436
  });
486
437
 
487
- it('should apply helper value', () => {
488
- const instance = new TekGrid({
489
- name: 'grid_filterClick8',
490
- component: 'TekGrid',
491
- datasource: {
492
- type: 'tek-rest',
493
- lazyLoad: true,
494
- },
495
- columns: [
496
- {
497
- name: 'date1',
498
- componentProps: { name: 'date_edit1', component: 'ZdDate' },
499
- filterProps: {
500
- name: 'date_edit1',
501
- label: 'date1',
502
- operation: 'NOT_EQUALS',
503
- relation: 'OR',
504
- helperOptions: [
505
- 'TODAY',
506
- 'TOMORROW',
507
- ],
508
- },
509
- },
510
- {
511
- name: 'date2',
512
- componentProps: { name: 'date_edit2', component: 'ZdDate' },
513
- filterProps: [
514
- {
515
- name: 'date_edit21',
516
- label: 'date21',
517
- operation: 'NOT_EQUALS',
518
- relation: 'OR',
519
- helperOptions: [
520
- 'TODAY',
521
- 'TOMORROW',
522
- ],
523
- },
524
- {
525
- name: 'date_edit22',
526
- label: 'date22',
527
- helperOptions: [
528
- 'TODAY',
529
- 'TOMORROW',
530
- ],
531
- },
532
- ],
533
- },
534
- ],
535
- });
536
-
537
- let formElements: any = [];
538
- let form: IForm;
539
- const spy = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
540
- form = getChild<IForm>(modal.children || [], `${instance.name}-filter-form`);
541
- formElements = form.children;
542
-
543
- return new Modal(modal);
544
- });
545
- instance.onCreated();
546
- clickOnFilterButton(instance);
547
-
548
- const dateComp = new Date(formElements[0]);
549
- dateComp.helperValue = 'TODAY';
550
- dateComp.change({} as Event, {} as HTMLElement);
551
- expect((instance.columns[0].filterProps as IFilterPropsComponent).helperValue).toBe('TODAY');
552
-
553
- const dateComp21 = new Date(formElements[1]);
554
- dateComp21.helperValue = 'TODAY';
555
- dateComp21.change({} as Event, {} as HTMLElement);
556
- expect((instance.columns[1].filterProps as IFilterPropsComponent[])[0].helperValue).toBe('TODAY');
557
-
558
- const dateComp22 = new Date(formElements[2]);
559
- dateComp22.helperValue = 'TODAY';
560
- dateComp22.change({} as Event, {} as HTMLElement);
561
- expect((instance.columns[1].filterProps as IFilterPropsComponent[])[1].helperValue).toBe('TODAY');
562
-
563
- spy.mockReset();
564
- });
565
-
566
- it('should load form values from tekdatasource', () => {
567
- const instance = new TekGrid({
568
- name: 'grid_filterClick9',
569
- component: 'TekGrid',
570
- datasource: {
571
- type: 'tek-rest',
572
- lazyLoad: true,
573
- dynamicFilter: {
574
- name: [
575
- {
576
- operation: 'NOT_EQUALS',
577
- relation: 'OR',
578
- value: 'teste',
579
- },
580
- ],
581
- phone: [
582
- {
583
- value: '9',
584
- },
585
- ],
586
- date: [
587
- {
588
- operation: 'IN',
589
- relation: 'OR',
590
- value: ['2021-11-12', '2021-12-12'],
591
- },
592
- ],
593
- },
594
- },
595
- columns: [
596
- {
597
- name: 'id',
598
- filterProps: [{ name: 'id_edit' }],
599
- },
600
- {
601
- name: 'name',
602
- componentProps: { name: 'name_edit', component: 'ZdSelect' },
603
- filterProps: {
604
- name: 'name_edit', label: 'name', operation: 'NOT_EQUALS', relation: 'OR',
605
- },
606
- },
607
- {
608
- name: 'phone',
609
- filterProps: [{ name: 'phone_edit' }],
610
- },
611
- {
612
- name: 'date',
613
- filterProps: { name: 'date_edit', helperValue: 'TODAY' },
614
- },
615
- ],
616
- });
617
-
618
- let form: IForm = { name: 'form', component: 'ZdForm' };
619
- const dateHelperSpy = jest.spyOn(DateHelper, 'getLabel').mockImplementation((name: string) => name);
620
- const spy = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
621
- form = getChild<IForm>(modal.children || [], `${instance.name}-filter-form`);
622
-
623
- return new Modal(modal);
624
- });
625
- instance.onCreated();
626
-
627
- clickOnFilterButton(instance);
628
-
629
- expect(form.name).toBe('grid_filterClick9-filter-form');
630
- const formObject = new Form(form);
631
- formObject.value = {
632
- 'grid_filterClick9-filter-AND_CONTAINS-id-0': null,
633
- 'grid_filterClick9-filter-OR-NOT_EQUALS-name-0': null,
634
- 'grid_filterClick9-filter-AND-CONTAINS-phone-0': null,
635
- 'grid_filterClick9-filter-OR-IN-date-0': null,
636
- };
637
- const dateObject = new Date({ name: 'date', component: 'ZdDate' });
638
- const spyMetadata = jest.spyOn(Metadata, 'getInstances').mockImplementation(() => [dateObject]);
639
- formObject.onMounted({} as HTMLElement);
640
- expect(formObject.value).toEqual({
641
- 'grid_filterClick9-filter-AND_CONTAINS-id-0': null,
642
- 'grid_filterClick9-filter-OR-NOT_EQUALS-name-0': 'teste',
643
- 'grid_filterClick9-filter-AND-CONTAINS-phone-0': '9',
644
- 'grid_filterClick9-filter-OR-IN-date-0': ['2021-11-12', '2021-12-12'],
645
- });
646
- expect(dateObject.hint).toBe('TODAY');
647
- spyMetadata.mockReset();
648
- dateHelperSpy.mockReset();
649
- spy.mockReset();
650
- });
651
-
652
438
  it('should load form values from datasource', () => {
653
439
  const instance = new TekGrid({
654
440
  name: 'grid_filterClick10',
@@ -692,7 +478,7 @@ describe('TekGridFilterButton', () => {
692
478
  spy.mockReset();
693
479
  });
694
480
 
695
- it('should apply filter from form to tekdatasource', () => {
481
+ it('should apply filter from form to tekdatasource', async () => {
696
482
  const httpSpy = jest.spyOn(Http, 'get').mockImplementation(() => Promise.resolve({
697
483
  data: {
698
484
  data: [
@@ -758,6 +544,8 @@ describe('TekGridFilterButton', () => {
758
544
  const button = new TekGridFilterButton(buttonProps);
759
545
  setClick(button);
760
546
 
547
+ await flushPromises();
548
+
761
549
  const formObject = new Form(form);
762
550
  const spyMetadata = jest.spyOn(Metadata, 'getInstance').mockImplementation(() => formObject);
763
551
  const spyDatasourceGet = jest.spyOn(instance.datasource, 'get');
@@ -769,12 +557,23 @@ describe('TekGridFilterButton', () => {
769
557
  'grid_filterClick11-filter-AND-LESS_THAN_EQUALS-salary-0': '2000',
770
558
  };
771
559
  const applyButtonObject = new Button(applyButton);
772
- formObject.validate = () => false;
560
+ formObject.validate = () => {
561
+ return new Promise((resolve) => {
562
+ resolve({ valid: false });
563
+ });
564
+ };
773
565
  setClick(applyButtonObject);
774
566
  expect((instance.datasource as TekRestDatasource).dynamicFilter).toEqual({});
775
567
 
776
- formObject.validate = () => true;
568
+ formObject.validate = () => {
569
+ return new Promise((resolve) => {
570
+ resolve({ valid: true });
571
+ });
572
+ };
777
573
  setClick(applyButtonObject);
574
+
575
+ await flushPromises();
576
+
778
577
  expect((instance.datasource as TekRestDatasource).dynamicFilter).toEqual({
779
578
  id: [
780
579
  {
@@ -803,8 +602,8 @@ describe('TekGridFilterButton', () => {
803
602
  },
804
603
  ],
805
604
  });
806
- expect(instance.columnHasFilterData({ name: 'name' } as TekGridColumn)).toBeTruthy();
807
- expect(spyDatasourceGet).toBeCalled();
605
+ expect(instance.columnHasFilter('name')).toBeTruthy();
606
+ expect(spyDatasourceGet).toHaveBeenCalled();
808
607
  spyMetadata.mockReset();
809
608
  spyDatasourceGet.mockReset();
810
609
  spyModalService.mockReset();
@@ -902,7 +701,7 @@ describe('TekGridFilterButton', () => {
902
701
  httpSpy.mockReset();
903
702
  });
904
703
 
905
- it('should apply filter from form to datasource', () => {
704
+ it('should apply filter from form to datasource', async () => {
906
705
  let beforeApplyFilterCalled = false;
907
706
  let changeLayoutCalled = false;
908
707
  const instance = new TekGrid({
@@ -928,6 +727,8 @@ describe('TekGridFilterButton', () => {
928
727
  },
929
728
  });
930
729
 
730
+ instance.onCreated();
731
+
931
732
  let form: IForm = { name: 'form', component: 'ZdForm' };
932
733
  let applyButton: IButton = { name: 'apply', component: 'ZdButton' };
933
734
  const spyModalService = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
@@ -939,8 +740,6 @@ describe('TekGridFilterButton', () => {
939
740
  return new Modal(modal);
940
741
  });
941
742
 
942
- instance.onCreated();
943
-
944
743
  clickOnFilterButton(instance);
945
744
 
946
745
  const formObject = new Form(form);
@@ -954,6 +753,9 @@ describe('TekGridFilterButton', () => {
954
753
  };
955
754
  const applyButtonObject = new Button(applyButton);
956
755
  setClick(applyButtonObject);
756
+
757
+ await flushPromises();
758
+
957
759
  expect(instance.datasource.filter).toEqual({
958
760
  id: '1;2;3',
959
761
  name: 'teste',
@@ -961,13 +763,80 @@ describe('TekGridFilterButton', () => {
961
763
  });
962
764
  expect(beforeApplyFilterCalled).toBeTruthy();
963
765
  expect(changeLayoutCalled).toBeTruthy();
964
- expect(instance.columnHasFilterData({ name: 'name' } as TekGridColumn)).toBeTruthy();
766
+ expect(instance.columnHasFilter('name')).toBeTruthy();
965
767
 
966
768
  setClick(applyButtonObject, { defaultPrevented: true });
967
- expect(spyDatasourceGet).toBeCalledTimes(1);
769
+ expect(spyDatasourceGet).toHaveBeenCalledTimes(1);
968
770
  spyMetadata.mockReset();
969
771
  spyDatasourceGet.mockReset();
970
772
  spyModalService.mockReset();
971
773
  });
774
+
775
+ it('should load form values from tekdatasource', () => {
776
+ const instance = new TekGrid({
777
+ name: 'grid_filterClick9',
778
+ component: 'TekGrid',
779
+ datasource: {
780
+ type: 'tek-rest',
781
+ lazyLoad: true,
782
+ dynamicFilter: {
783
+ name: [
784
+ {
785
+ operation: 'NOT_EQUALS',
786
+ relation: 'OR',
787
+ value: 'teste',
788
+ },
789
+ ],
790
+ phone: [
791
+ {
792
+ value: '9',
793
+ },
794
+ ],
795
+ },
796
+ },
797
+ columns: [
798
+ {
799
+ name: 'id',
800
+ filterProps: [{ name: 'id_edit' }],
801
+ },
802
+ {
803
+ name: 'name',
804
+ componentProps: { name: 'name_edit', component: 'ZdSelect' },
805
+ filterProps: {
806
+ name: 'name_edit', label: 'name', operation: 'NOT_EQUALS', relation: 'OR',
807
+ },
808
+ },
809
+ {
810
+ name: 'phone',
811
+ filterProps: [{ name: 'phone_edit' }],
812
+ },
813
+ ],
814
+ });
815
+
816
+ let form: IForm = { name: 'form', component: 'ZdForm' };
817
+ const spy = jest.spyOn(ModalService, 'create').mockImplementation((modal: IModal) => {
818
+ form = getChild<IForm>(modal.children || [], `${instance.name}-filter-form`);
819
+
820
+ return new Modal(modal);
821
+ });
822
+ instance.onCreated();
823
+
824
+ clickOnFilterButton(instance);
825
+
826
+ expect(form.name).toBe('grid_filterClick9-filter-form');
827
+ const formObject = new Form(form);
828
+ formObject.value = {
829
+ 'grid_filterClick9-filter-AND_CONTAINS-id-0': null,
830
+ 'grid_filterClick9-filter-OR-NOT_EQUALS-name-0': null,
831
+ 'grid_filterClick9-filter-AND-CONTAINS-phone-0': null,
832
+ };
833
+ formObject.onMounted({} as HTMLElement);
834
+ expect(formObject.value).toEqual({
835
+ 'grid_filterClick9-filter-AND_CONTAINS-id-0': null,
836
+ 'grid_filterClick9-filter-OR-NOT_EQUALS-name-0': 'teste',
837
+ 'grid_filterClick9-filter-AND-CONTAINS-phone-0': '9',
838
+ });
839
+ spy.mockReset();
840
+ });
972
841
  });
973
842
  });