From 0ee3421b86374616533e2e9ebc2945d13705782b Mon Sep 17 00:00:00 2001 From: Ghislain B Date: Fri, 13 Nov 2020 17:59:25 -0500 Subject: [PATCH] fix(core): clear dataset when destroying & fix few unsubscribed events (#629) Co-authored-by: Ghislain Beaulac --- src/app/examples/grid-frozen.component.ts | 23 ++-- src/app/examples/grid-rowmove.component.ts | 17 ++- .../angular-slickgrid-constructor.spec.ts | 5 +- .../angular-slickgrid.component.spec.ts | 4 - .../components/angular-slickgrid.component.ts | 57 ++++++--- .../editors/__tests__/longTextEditor.spec.ts | 4 +- .../editors/autoCompleteEditor.ts | 7 +- .../editors/longTextEditor.ts | 8 +- .../cellExternalCopyManagerExtension.ts | 35 +++--- .../extensions/cellMenuExtension.ts | 36 +++--- .../extensions/checkboxSelectorExtension.ts | 2 +- .../extensions/columnPickerExtension.ts | 61 +++++----- .../extensions/contextMenuExtension.ts | 48 ++++---- .../extensions/draggableGroupingExtension.ts | 16 ++- .../extensions/extensionUtility.ts | 14 +++ .../extensions/gridMenuExtension.ts | 90 +++++++------- .../groupItemMetaProviderExtension.ts | 2 +- .../extensions/headerButtonExtension.ts | 20 ++-- .../extensions/headerMenuExtension.ts | 3 +- .../extensions/rowDetailViewExtension.ts | 7 +- .../extensions/rowSelectionExtension.ts | 2 +- .../__tests__/autoCompleteFilter.spec.ts | 12 +- .../__tests__/compoundInputFilter.spec.ts | 44 ++++++- .../filters/__tests__/inputFilter.spec.ts | 44 ++++++- .../filters/__tests__/inputMaskFilter.spec.ts | 20 ++-- .../filters/autoCompleteFilter.ts | 25 ++-- .../filters/compoundDateFilter.ts | 4 +- .../filters/compoundInputFilter.ts | 25 ++-- .../filters/compoundSliderFilter.ts | 18 ++- .../filters/dateRangeFilter.ts | 6 +- .../angular-slickgrid/filters/inputFilter.ts | 52 +++++---- .../filters/inputMaskFilter.ts | 4 +- .../filters/nativeSelectFilter.ts | 3 +- .../angular-slickgrid/filters/selectFilter.ts | 11 +- .../angular-slickgrid/filters/sliderFilter.ts | 5 +- .../filters/sliderRangeFilter.ts | 6 +- .../services/__tests__/filter.service.spec.ts | 22 ++-- .../services/filter.service.ts | 94 ++++++++------- .../services/gridEvent.service.ts | 110 ++++++++++-------- .../services/shared.service.ts | 6 +- .../services/treeData.service.ts | 2 +- test/cypress/package.json | 2 +- 42 files changed, 583 insertions(+), 393 deletions(-) diff --git a/src/app/examples/grid-frozen.component.ts b/src/app/examples/grid-frozen.component.ts index 2401e2f1d..6891b10b5 100644 --- a/src/app/examples/grid-frozen.component.ts +++ b/src/app/examples/grid-frozen.component.ts @@ -33,8 +33,9 @@ export class GridFrozenComponent implements OnInit, OnDestroy { ngOnDestroy() { // unsubscribe every SlickGrid subscribed event (or use the Slick.EventHandler) - this.gridObj.onMouseEnter.unsubscribe(); - this.gridObj.onMouseLeave.unsubscribe(); + this.gridObj.onMouseEnter.unsubscribe(this.highlightRow); + this.gridObj.onMouseLeave.unsubscribe(this.highlightRow); + this.highlightRow = null; } angularGridReady(angularGrid: AngularGridInstance) { @@ -44,15 +45,15 @@ export class GridFrozenComponent implements OnInit, OnDestroy { // with frozen (pinned) grid, in order to see the entire row being highlighted when hovering // we need to do some extra tricks (that is because frozen grids use 2 separate div containers) // the trick is to use row selection to highlight when hovering current row and remove selection once we're not - this.gridObj.onMouseEnter.subscribe(event => { - const cell = this.gridObj.getCellFromEvent(event); - this.gridObj.setSelectedRows([cell.row]); // highlight current row - event.preventDefault(); - }); - this.gridObj.onMouseLeave.subscribe(event => { - this.gridObj.setSelectedRows([]); // remove highlight - event.preventDefault(); - }); + this.gridObj.onMouseEnter.subscribe(event => this.highlightRow(event, true)); + this.gridObj.onMouseLeave.subscribe(event => this.highlightRow(event, false)); + } + + highlightRow(event: Event, isMouseEnter: boolean) { + const cell = this.gridObj.getCellFromEvent(event); + const rows = isMouseEnter ? [cell.row] : []; + this.gridObj.setSelectedRows(rows); // highlight current row + event.preventDefault(); } prepareDataGrid() { diff --git a/src/app/examples/grid-rowmove.component.ts b/src/app/examples/grid-rowmove.component.ts index b079174af..56a735936 100644 --- a/src/app/examples/grid-rowmove.component.ts +++ b/src/app/examples/grid-rowmove.component.ts @@ -1,11 +1,11 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnDestroy, OnInit } from '@angular/core'; import { AngularGridInstance, Column, ExtensionName, Filters, Formatters, GridOption } from './../modules/angular-slickgrid'; import { TranslateService } from '@ngx-translate/core'; @Component({ templateUrl: './grid-rowmove.component.html' }) -export class GridRowMoveComponent implements OnInit { +export class GridRowMoveComponent implements OnInit, OnDestroy { title = 'Example 17: Row Move & Checkbox Selector'; subTitle = `This example demonstrates using the Slick.Plugins.RowMoveManager plugin to easily move a row in the grid.