Skip to content

Commit b5204e5

Browse files
committed
fix(core): use regular imports instead of require to load plugins
- replace all require(plugin) since that is not tree shakable and imports are
1 parent 458f46e commit b5204e5

31 files changed

+152
-357
lines changed

src/app/modules/angular-slickgrid/components/__tests__/angular-slickgrid-constructor.spec.ts

-8
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,8 @@ const extensionServiceStub = {
6666
} as unknown as ExtensionService;
6767

6868
const mockExtensionUtility = {
69-
loadExtensionDynamically: jest.fn(),
7069
translateItems: jest.fn(),
7170
} as unknown as ExtensionUtility;
72-
export class ExtensionUtilityStub {
73-
loadExtensionDynamically() { }
74-
}
7571

7672
const groupingAndColspanServiceStub = {
7773
init: jest.fn(),
@@ -483,15 +479,13 @@ describe('Angular-Slickgrid Custom Component instantiated via Constructor', () =
483479

484480
describe('use grouping', () => {
485481
it('should load groupItemMetaProvider to the DataView when using "draggableGrouping" feature', () => {
486-
const extensionSpy = jest.spyOn(mockExtensionUtility, 'loadExtensionDynamically');
487482
const dataviewSpy = jest.spyOn(mockDataViewImplementation.prototype, 'constructor');
488483
const groupMetaSpy = jest.spyOn(mockGroupItemMetaProviderImplementation.prototype, 'constructor');
489484
const sharedMetaSpy = jest.spyOn(SharedService.prototype, 'groupItemMetadataProvider', 'set');
490485

491486
component.gridOptions.draggableGrouping = {};
492487
component.ngAfterViewInit();
493488

494-
expect(extensionSpy).toHaveBeenCalledWith('groupItemMetaProvider');
495489
expect(dataviewSpy).toHaveBeenCalledWith({ groupItemMetadataProvider: expect.anything(), inlineFilters: false });
496490
expect(groupMetaSpy).toHaveBeenCalledWith();
497491
expect(sharedMetaSpy).toHaveBeenCalledWith(mockGroupItemMetaProvider);
@@ -500,15 +494,13 @@ describe('Angular-Slickgrid Custom Component instantiated via Constructor', () =
500494
});
501495

502496
it('should load groupItemMetaProvider to the DataView when using "enableGrouping" feature', () => {
503-
const extensionSpy = jest.spyOn(mockExtensionUtility, 'loadExtensionDynamically');
504497
const dataviewSpy = jest.spyOn(mockDataViewImplementation.prototype, 'constructor');
505498
const groupMetaSpy = jest.spyOn(mockGroupItemMetaProviderImplementation.prototype, 'constructor');
506499
const sharedMetaSpy = jest.spyOn(SharedService.prototype, 'groupItemMetadataProvider', 'set');
507500

508501
component.gridOptions.enableGrouping = true;
509502
component.ngAfterViewInit();
510503

511-
expect(extensionSpy).toHaveBeenCalledWith('groupItemMetaProvider');
512504
expect(dataviewSpy).toHaveBeenCalledWith({ groupItemMetadataProvider: expect.anything(), inlineFilters: false });
513505
expect(groupMetaSpy).toHaveBeenCalledWith();
514506
expect(sharedMetaSpy).toHaveBeenCalledWith(mockGroupItemMetaProvider);

src/app/modules/angular-slickgrid/components/__tests__/angular-slickgrid.component.spec.ts

-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ const extensionServiceStub = {
7373
} as unknown as ExtensionService;
7474

7575
const extensionUtilityStub = {
76-
loadExtensionDynamically: jest.fn(),
7776
translateItems: jest.fn(),
7877
} as unknown as ExtensionUtility;
7978

src/app/modules/angular-slickgrid/components/angular-slickgrid.component.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'slickgrid/lib/jquery.mousewheel';
66
import 'slickgrid/slick.core';
77
import 'slickgrid/slick.grid';
88
import 'slickgrid/slick.dataview';
9+
import 'slickgrid/slick.groupitemmetadataprovider';
910

1011
// ...then everything else...
1112
import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, Input, Output, OnDestroy, OnInit, Optional } from '@angular/core';
@@ -24,7 +25,6 @@ import {
2425
ColumnEditor,
2526
CustomFooterOption,
2627
DataViewOption,
27-
ExtensionName,
2828
GraphqlPaginatedResult,
2929
GraphqlResult,
3030
GridOption,
@@ -78,7 +78,6 @@ import { RowSelectionExtension } from '../extensions/rowSelectionExtension';
7878
// using external non-typed js libraries
7979
declare const Slick: any;
8080
declare const $: any;
81-
declare function require(name: string);
8281

8382
const slickgridEventPrefix = 'sg';
8483

@@ -807,7 +806,6 @@ export class AngularSlickgridComponent implements AfterViewInit, OnDestroy, OnIn
807806
let dataViewOptions: DataViewOption = { inlineFilters: dataviewInlineFilters };
808807

809808
if (this.gridOptions.draggableGrouping || this.gridOptions.enableGrouping) {
810-
this.extensionUtility.loadExtensionDynamically(ExtensionName.groupItemMetaProvider);
811809
this.groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();
812810
this.sharedService.groupItemMetadataProvider = this.groupItemMetadataProvider;
813811
dataViewOptions = { ...dataViewOptions, groupItemMetadataProvider: this.groupItemMetadataProvider };

src/app/modules/angular-slickgrid/extensions/__tests__/autoTooltipExtension.spec.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing';
22
import { TranslateService, TranslateModule } from '@ngx-translate/core';
33
import { GridOption } from '../../models/gridOption.interface';
44
import { AutoTooltipExtension } from '../autoTooltipExtension';
5-
import { ExtensionUtility } from '../extensionUtility';
65
import { SharedService } from '../../services/shared.service';
76

87
declare const Slick: any;
@@ -17,17 +16,17 @@ const mockAddon = jest.fn().mockImplementation(() => ({
1716
destroy: jest.fn()
1817
}));
1918

20-
jest.mock('slickgrid/plugins/slick.autotooltips', () => mockAddon);
21-
Slick.AutoTooltips = mockAddon;
22-
2319
describe('autoTooltipExtension', () => {
20+
jest.mock('slickgrid/plugins/slick.autotooltips', () => mockAddon);
21+
Slick.AutoTooltips = mockAddon;
22+
2423
let translate: TranslateService;
2524
let extension: AutoTooltipExtension;
2625
const gridOptionsMock = { enableAutoTooltip: true } as GridOption;
2726

2827
beforeEach(() => {
2928
TestBed.configureTestingModule({
30-
providers: [AutoTooltipExtension, ExtensionUtility, SharedService],
29+
providers: [AutoTooltipExtension, SharedService],
3130
imports: [TranslateModule.forRoot()]
3231
});
3332
extension = TestBed.get(AutoTooltipExtension);

src/app/modules/angular-slickgrid/extensions/__tests__/cellMenuExtension.spec.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { TranslateService, TranslateModule } from '@ngx-translate/core';
44
import { CellMenuExtension } from '../cellMenuExtension';
55
import { ExtensionUtility } from '../extensionUtility';
66
import { SharedService } from '../../services/shared.service';
7-
import { Column, GridOption, MenuCommandItemCallbackArgs, MenuOptionItemCallbackArgs } from '../../models';
7+
import { Column, GridOption } from '../../models';
88

99
declare const Slick: any;
1010

@@ -37,12 +37,13 @@ const mockAddon = jest.fn().mockImplementation(() => ({
3737
onOptionSelected: new Slick.Event(),
3838
}));
3939

40-
jest.mock('slickgrid/plugins/slick.cellmenu', () => mockAddon);
41-
Slick.Plugins = {
42-
CellMenu: mockAddon
43-
};
4440

4541
describe('CellMenuExtension', () => {
42+
jest.mock('slickgrid/plugins/slick.cellmenu', () => mockAddon);
43+
Slick.Plugins = {
44+
CellMenu: mockAddon
45+
};
46+
4647
const columnsMock: Column[] = [{ id: 'field1', field: 'field1', width: 100, nameKey: 'TITLE' }, { id: 'field2', field: 'field2', width: 75 }];
4748
let extensionUtility: ExtensionUtility;
4849
let translate: TranslateService;

src/app/modules/angular-slickgrid/extensions/__tests__/checkboxSelectorExtension.spec.ts

+8-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { TestBed } from '@angular/core/testing';
2-
import { TranslateService, TranslateModule } from '@ngx-translate/core';
2+
import { TranslateModule } from '@ngx-translate/core';
33
import { GridOption } from '../../models/gridOption.interface';
44
import { CheckboxSelectorExtension } from '../checkboxSelectorExtension';
5-
import { ExtensionUtility } from '../extensionUtility';
65
import { SharedService } from '../../services/shared.service';
76
import { Column } from '../../models';
87

@@ -27,24 +26,23 @@ const mockSelectionModel = jest.fn().mockImplementation(() => ({
2726
destroy: jest.fn()
2827
}));
2928

30-
jest.mock('slickgrid/plugins/slick.checkboxselectcolumn', () => mockAddon);
31-
Slick.CheckboxSelectColumn = mockAddon;
32-
33-
jest.mock('slickgrid/plugins/slick.rowselectionmodel', () => mockSelectionModel);
34-
Slick.RowSelectionModel = mockSelectionModel;
3529

3630
describe('checkboxSelectorExtension', () => {
37-
let translate: TranslateService;
31+
jest.mock('slickgrid/plugins/slick.checkboxselectcolumn', () => mockAddon);
32+
Slick.CheckboxSelectColumn = mockAddon;
33+
34+
jest.mock('slickgrid/plugins/slick.rowselectionmodel', () => mockSelectionModel);
35+
Slick.RowSelectionModel = mockSelectionModel;
36+
3837
let extension: CheckboxSelectorExtension;
3938
const gridOptionsMock = { enableCheckboxSelector: true } as GridOption;
4039

4140
beforeEach(() => {
4241
TestBed.configureTestingModule({
43-
providers: [CheckboxSelectorExtension, ExtensionUtility, SharedService],
42+
providers: [CheckboxSelectorExtension, SharedService],
4443
imports: [TranslateModule.forRoot()]
4544
});
4645
extension = TestBed.get(CheckboxSelectorExtension);
47-
translate = TestBed.get(TranslateService);
4846
});
4947

5048
it('should return null after calling "create" method when either the column definitions or the grid options is missing', () => {

src/app/modules/angular-slickgrid/extensions/__tests__/columnPickerExtension.spec.ts

+20-20
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ const mockAddon = jest.fn().mockImplementation(() => ({
2222
onColumnsChanged: new Slick.Event(),
2323
}));
2424

25-
jest.mock('slickgrid/controls/slick.columnpicker', () => mockAddon);
26-
Slick.Controls = {
27-
ColumnPicker: mockAddon
28-
};
29-
3025
describe('columnPickerExtension', () => {
26+
jest.mock('slickgrid/controls/slick.columnpicker', () => mockAddon);
27+
Slick.Controls = {
28+
ColumnPicker: mockAddon
29+
};
30+
3131
const columnsMock: Column[] = [{ id: 'field1', field: 'field1', width: 100, nameKey: 'TITLE' }, { id: 'field2', field: 'field2', width: 75 }];
3232
let extensionUtility: ExtensionUtility;
3333
let translate: TranslateService;
@@ -103,21 +103,21 @@ describe('columnPickerExtension', () => {
103103

104104
it(`should call internal event handler subscribe and expect the "onColumnsChanged" grid option to be called when addon notify is called
105105
and it should override "visibleColumns" when array passed as arguments is bigger than previous visible columns`, () => {
106-
const handlerSpy = jest.spyOn(extension.eventHandler, 'subscribe');
107-
const onColumnSpy = jest.spyOn(SharedService.prototype.gridOptions.columnPicker, 'onColumnsChanged');
108-
const visibleColsSpy = jest.spyOn(SharedService.prototype, 'visibleColumns', 'set');
109-
110-
const instance = extension.register();
111-
instance.onColumnsChanged.notify({ columnId: 'field1', showing: true, columns: columnsMock, grid: gridStub }, new Slick.EventData(), gridStub);
112-
113-
expect(handlerSpy).toHaveBeenCalledTimes(1);
114-
expect(handlerSpy).toHaveBeenCalledWith(
115-
{ notify: expect.anything(), subscribe: expect.anything(), unsubscribe: expect.anything(), },
116-
expect.anything()
117-
);
118-
expect(onColumnSpy).toHaveBeenCalledWith(expect.anything(), { columnId: 'field1', showing: true, columns: columnsMock, grid: gridStub });
119-
expect(visibleColsSpy).toHaveBeenCalledWith(columnsMock);
120-
});
106+
const handlerSpy = jest.spyOn(extension.eventHandler, 'subscribe');
107+
const onColumnSpy = jest.spyOn(SharedService.prototype.gridOptions.columnPicker, 'onColumnsChanged');
108+
const visibleColsSpy = jest.spyOn(SharedService.prototype, 'visibleColumns', 'set');
109+
110+
const instance = extension.register();
111+
instance.onColumnsChanged.notify({ columnId: 'field1', showing: true, columns: columnsMock, grid: gridStub }, new Slick.EventData(), gridStub);
112+
113+
expect(handlerSpy).toHaveBeenCalledTimes(1);
114+
expect(handlerSpy).toHaveBeenCalledWith(
115+
{ notify: expect.anything(), subscribe: expect.anything(), unsubscribe: expect.anything(), },
116+
expect.anything()
117+
);
118+
expect(onColumnSpy).toHaveBeenCalledWith(expect.anything(), { columnId: 'field1', showing: true, columns: columnsMock, grid: gridStub });
119+
expect(visibleColsSpy).toHaveBeenCalledWith(columnsMock);
120+
});
121121

122122
it('should call internal "onColumnsChanged" event and expect "readjustFrozenColumnIndexWhenNeeded" method to be called when the grid is detected to be a frozen grid', () => {
123123
gridOptionsMock.frozenColumn = 0;

src/app/modules/angular-slickgrid/extensions/__tests__/contextMenuExtension.spec.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { ContextMenuExtension } from '../contextMenuExtension';
55
import { ExtensionUtility } from '../extensionUtility';
66
import { SharedService } from '../../services/shared.service';
77
import { ExcelExportService, ExportService, TreeDataService } from '../../services';
8-
import { Column, DelimiterType, FileType, GridOption, MenuCommandItem, MenuCommandItemCallbackArgs, MenuOptionItemCallbackArgs } from '../../models';
8+
import { Column, DelimiterType, FileType, GridOption, MenuCommandItem, } from '../../models';
99
import { Formatters } from '../../formatters';
1010

1111
declare const Slick: any;
@@ -64,14 +64,13 @@ const mockAddon = jest.fn().mockImplementation(() => ({
6464
onOptionSelected: new Slick.Event(),
6565
}));
6666

67-
jest.mock('slickgrid/plugins/slick.contextmenu', () => mockAddon);
68-
Slick.Plugins = {
69-
ContextMenu: mockAddon
70-
};
71-
7267
describe('contextMenuExtension', () => {
68+
jest.mock('slickgrid/plugins/slick.contextmenu', () => mockAddon);
69+
Slick.Plugins = {
70+
ContextMenu: mockAddon
71+
};
72+
7373
const columnsMock: Column[] = [{ id: 'field1', field: 'field1', width: 100, nameKey: 'TITLE' }, { id: 'field2', field: 'field2', width: 75 }];
74-
let extensionUtility: ExtensionUtility;
7574
let translate: TranslateService;
7675
let extension: ContextMenuExtension;
7776
const sharedService = new SharedService();
@@ -133,7 +132,6 @@ describe('contextMenuExtension', () => {
133132
imports: [TranslateModule.forRoot()]
134133
});
135134
extension = TestBed.get(ContextMenuExtension);
136-
extensionUtility = TestBed.get(ExtensionUtility);
137135
translate = TestBed.get(TranslateService);
138136
translate.setTranslation('fr', {
139137
TITLE: 'Titre',

src/app/modules/angular-slickgrid/extensions/__tests__/draggableGroupingExtension.spec.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestBed } from '@angular/core/testing';
2-
import { TranslateService, TranslateModule } from '@ngx-translate/core';
2+
import { TranslateModule } from '@ngx-translate/core';
33
import { GridOption } from '../../models/gridOption.interface';
44
import { DraggableGroupingExtension } from '../draggableGroupingExtension';
55
import { ExtensionUtility } from '../extensionUtility';
@@ -19,11 +19,10 @@ const mockAddon = jest.fn().mockImplementation(() => ({
1919
onGroupChanged: new Slick.Event(),
2020
}));
2121

22-
jest.mock('slickgrid/plugins/slick.draggablegrouping', () => mockAddon);
23-
Slick.DraggableGrouping = mockAddon;
24-
2522
describe('draggableGroupingExtension', () => {
26-
let translate: TranslateService;
23+
jest.mock('slickgrid/plugins/slick.draggablegrouping', () => mockAddon);
24+
Slick.DraggableGrouping = mockAddon;
25+
2726
let extension: DraggableGroupingExtension;
2827
const gridOptionsMock = {
2928
enableDraggableGrouping: true,
@@ -42,7 +41,6 @@ describe('draggableGroupingExtension', () => {
4241
imports: [TranslateModule.forRoot()]
4342
});
4443
extension = TestBed.get(DraggableGroupingExtension);
45-
translate = TestBed.get(TranslateService);
4644
});
4745

4846
it('should return null after calling "create" method when the grid options is missing', () => {

0 commit comments

Comments
 (0)