From 310850e240f9abe62dc117d78a2375008e7b28ed Mon Sep 17 00:00:00 2001 From: Benjamin Russell Date: Mon, 29 Jan 2018 09:10:17 -0800 Subject: [PATCH] Adding hotfix changes --- out/index.js.map | 2 +- out/js/gridsync.service.js.map | 2 +- out/js/interfaces.js.map | 2 +- out/js/selectionModel.js.map | 2 +- out/js/slickGrid.js | 4 ++-- out/js/slickGrid.js.map | 2 +- out/js/virtualizedCollection.js.map | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/out/index.js.map b/out/index.js.map index 74af088..efbdb01 100644 --- a/out/index.js.map +++ b/out/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;AAAA;;;gGAGgG;AAChG,2CAAsC;AACtC,qCAAgC;AAChC,yCAAoC;AACpC,oCAA+B;AAC/B,gDAA2C","file":"index.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport * from './js/gridsync.service';\r\nexport * from './js/interfaces';\r\nexport * from './js/selectionModel';\r\nexport * from './js/slickGrid';\r\nexport * from './js/virtualizedCollection';\r\n"]} \ No newline at end of file +{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;AAAA;;;gGAGgG;AAChG,2CAAsC;AACtC,qCAAgC;AAChC,yCAAoC;AACpC,oCAA+B;AAC/B,gDAA2C","file":"index.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport * from './js/gridsync.service';\nexport * from './js/interfaces';\nexport * from './js/selectionModel';\nexport * from './js/slickGrid';\nexport * from './js/virtualizedCollection';\n"]} \ No newline at end of file diff --git a/out/js/gridsync.service.js.map b/out/js/gridsync.service.js.map index dd454c6..995fba2 100644 --- a/out/js/gridsync.service.js.map +++ b/out/js/gridsync.service.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/gridsync.service.ts"],"names":[],"mappings":"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","file":"gridsync.service.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs/Rx';\r\nimport { SelectionModel, ISlickRange } from './selectionModel';\r\n\r\ndeclare let Slick;\r\n\r\n@Injectable()\r\nexport class GridSyncService {\r\n columnMinWidthPX: number = 30;\r\n\r\n private _scrollLeftPX: number = 0;\r\n private _scrollBarWidthPX: number = 0;\r\n private _columnWidthPXs: number[] = [];\r\n private _rowNumberColumnWidthPX: number;\r\n private _updated = new Subject();\r\n private _typeDropdownOffset = new Subject<[number, number]>();\r\n private _selectionModel: SelectionModel;\r\n private _initialColumnWidthPXsOnResize: number[] = [];\r\n private _isGridReadOnly: boolean = false;\r\n\r\n initialColumnResize(): void {\r\n this._initialColumnWidthPXsOnResize = this._columnWidthPXs.slice(0);\r\n }\r\n\r\n resizeColumn(index: number, deltaWidthPX: number): void {\r\n this._columnWidthPXs = this._initialColumnWidthPXsOnResize.slice(0);\r\n let newWidthPX = this._columnWidthPXs[index] + deltaWidthPX;\r\n this.setColumnWidthPX(index, newWidthPX);\r\n this.notifyUpdates('columnWidthPXs');\r\n }\r\n\r\n openTypeDropdown(columnIndex: number): void {\r\n let offset = this._rowNumberColumnWidthPX + this._columnWidthPXs.slice(0, columnIndex).reduce((x, y) => x + y, 0) - this.scrollLeftPX;\r\n this._typeDropdownOffset.next([columnIndex, offset]);\r\n }\r\n\r\n private setColumnWidthPX(index: number, widthPX: number): void {\r\n if (index < 0 || index >= this._columnWidthPXs.length) {\r\n return;\r\n }\r\n\r\n if (widthPX >= this.columnMinWidthPX) {\r\n this._columnWidthPXs[index] = widthPX;\r\n } else {\r\n this._columnWidthPXs[index] = this.columnMinWidthPX;\r\n\r\n if (index > 0) {\r\n let leftShrink = this.columnMinWidthPX - widthPX;\r\n this.setColumnWidthPX(index - 1, this._columnWidthPXs[index - 1] - leftShrink);\r\n }\r\n }\r\n }\r\n\r\n set underlyingSelectionModel(selectionModel: any) {\r\n this._selectionModel = new SelectionModel(\r\n selectionModel,\r\n new Slick.EventHandler(),\r\n new Slick.Event(),\r\n (fromRow: number, fromCell: number, toRow: number, toCell: number): ISlickRange => new Slick.Range(fromRow, fromCell, toRow, toCell)\r\n );\r\n }\r\n\r\n get updated(): Observable {\r\n return this._updated;\r\n }\r\n\r\n get typeDropdownOffset(): Observable<[number, number]> {\r\n return this._typeDropdownOffset;\r\n }\r\n\r\n set scrollLeftPX(value: number) {\r\n this._scrollLeftPX = value;\r\n this.notifyUpdates('scrollLeftPX');\r\n }\r\n\r\n get scrollLeftPX(): number {\r\n return this._scrollLeftPX;\r\n }\r\n\r\n set scrollBarWidthPX(value: number) {\r\n this._scrollBarWidthPX = value;\r\n this.notifyUpdates('scrollBarWidthPX');\r\n }\r\n\r\n get scrollBarWidthPX(): number {\r\n return this._scrollBarWidthPX;\r\n }\r\n\r\n set columnWidthPXs(value: number[]) {\r\n this._columnWidthPXs = value;\r\n this.notifyUpdates('columnWidthPXs');\r\n }\r\n\r\n get columnWidthPXs(): number[] {\r\n return this._columnWidthPXs;\r\n }\r\n\r\n set rowNumberColumnWidthPX(value: number) {\r\n this._rowNumberColumnWidthPX = value;\r\n this.notifyUpdates('rowNumberColumnWidthPX');\r\n }\r\n\r\n get rowNumberColumnWidthPX(): number {\r\n return this._rowNumberColumnWidthPX;\r\n }\r\n\r\n get selectionModel(): SelectionModel {\r\n return this._selectionModel;\r\n }\r\n\r\n set isGridReadOnly(value: boolean) {\r\n this._isGridReadOnly = value;\r\n this.notifyUpdates('isGridReadOnly');\r\n }\r\n\r\n get isGridReadOnly(): boolean {\r\n return this._isGridReadOnly;\r\n }\r\n\r\n private notifyUpdates(propertyName: string): void {\r\n this._updated.next(propertyName);\r\n }\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["js/gridsync.service.ts"],"names":[],"mappings":"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","file":"gridsync.service.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs/Rx';\nimport { SelectionModel, ISlickRange } from './selectionModel';\n\ndeclare let Slick;\n\n@Injectable()\nexport class GridSyncService {\n columnMinWidthPX: number = 30;\n\n private _scrollLeftPX: number = 0;\n private _scrollBarWidthPX: number = 0;\n private _columnWidthPXs: number[] = [];\n private _rowNumberColumnWidthPX: number;\n private _updated = new Subject();\n private _typeDropdownOffset = new Subject<[number, number]>();\n private _selectionModel: SelectionModel;\n private _initialColumnWidthPXsOnResize: number[] = [];\n private _isGridReadOnly: boolean = false;\n\n initialColumnResize(): void {\n this._initialColumnWidthPXsOnResize = this._columnWidthPXs.slice(0);\n }\n\n resizeColumn(index: number, deltaWidthPX: number): void {\n this._columnWidthPXs = this._initialColumnWidthPXsOnResize.slice(0);\n let newWidthPX = this._columnWidthPXs[index] + deltaWidthPX;\n this.setColumnWidthPX(index, newWidthPX);\n this.notifyUpdates('columnWidthPXs');\n }\n\n openTypeDropdown(columnIndex: number): void {\n let offset = this._rowNumberColumnWidthPX + this._columnWidthPXs.slice(0, columnIndex).reduce((x, y) => x + y, 0) - this.scrollLeftPX;\n this._typeDropdownOffset.next([columnIndex, offset]);\n }\n\n private setColumnWidthPX(index: number, widthPX: number): void {\n if (index < 0 || index >= this._columnWidthPXs.length) {\n return;\n }\n\n if (widthPX >= this.columnMinWidthPX) {\n this._columnWidthPXs[index] = widthPX;\n } else {\n this._columnWidthPXs[index] = this.columnMinWidthPX;\n\n if (index > 0) {\n let leftShrink = this.columnMinWidthPX - widthPX;\n this.setColumnWidthPX(index - 1, this._columnWidthPXs[index - 1] - leftShrink);\n }\n }\n }\n\n set underlyingSelectionModel(selectionModel: any) {\n this._selectionModel = new SelectionModel(\n selectionModel,\n new Slick.EventHandler(),\n new Slick.Event(),\n (fromRow: number, fromCell: number, toRow: number, toCell: number): ISlickRange => new Slick.Range(fromRow, fromCell, toRow, toCell)\n );\n }\n\n get updated(): Observable {\n return this._updated;\n }\n\n get typeDropdownOffset(): Observable<[number, number]> {\n return this._typeDropdownOffset;\n }\n\n set scrollLeftPX(value: number) {\n this._scrollLeftPX = value;\n this.notifyUpdates('scrollLeftPX');\n }\n\n get scrollLeftPX(): number {\n return this._scrollLeftPX;\n }\n\n set scrollBarWidthPX(value: number) {\n this._scrollBarWidthPX = value;\n this.notifyUpdates('scrollBarWidthPX');\n }\n\n get scrollBarWidthPX(): number {\n return this._scrollBarWidthPX;\n }\n\n set columnWidthPXs(value: number[]) {\n this._columnWidthPXs = value;\n this.notifyUpdates('columnWidthPXs');\n }\n\n get columnWidthPXs(): number[] {\n return this._columnWidthPXs;\n }\n\n set rowNumberColumnWidthPX(value: number) {\n this._rowNumberColumnWidthPX = value;\n this.notifyUpdates('rowNumberColumnWidthPX');\n }\n\n get rowNumberColumnWidthPX(): number {\n return this._rowNumberColumnWidthPX;\n }\n\n get selectionModel(): SelectionModel {\n return this._selectionModel;\n }\n\n set isGridReadOnly(value: boolean) {\n this._isGridReadOnly = value;\n this.notifyUpdates('isGridReadOnly');\n }\n\n get isGridReadOnly(): boolean {\n return this._isGridReadOnly;\n }\n\n private notifyUpdates(propertyName: string): void {\n this._updated.next(propertyName);\n }\n}\n"]} \ No newline at end of file diff --git a/out/js/interfaces.js.map b/out/js/interfaces.js.map index e73cdb6..34ca6fa 100644 --- a/out/js/interfaces.js.map +++ b/out/js/interfaces.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/interfaces.ts"],"names":[],"mappings":";;AAAA;;;gGAGgG;AAChG,gCAA8C;AAE9C,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IACxB,yDAAK,CAAA;IACL,6EAAe,CAAA;IACf,+EAAgB,CAAA;AACpB,CAAC,EAJW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAI3B;AASD,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IACxB,yEAAa,CAAA;AACjB,CAAC,EAFW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAE3B;AASD;IAAA;QACY,gBAAW,GAAY,KAAK,CAAC;QAC7B,cAAS,GAAiB,IAAI,YAAO,EAAO,CAAC;IAczD,CAAC;IAZG,MAAM;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,UAAU;QACV,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,QAAQ;QACR,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ;AAhBD,8CAgBC;AAED,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,6CAAU,CAAA;IACV,+CAAW,CAAA;IACX,+CAAW,CAAA;IACX,+CAAW,CAAA;IACX,yCAAQ,CAAA;IACR,+CAAW,CAAA;AACf,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB","file":"interfaces.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Observable, Subject } from 'rxjs/Rx';\r\n\r\nexport enum NotificationType {\r\n Error,\r\n UpdateAvailable,\r\n UpdateDownloaded\r\n}\r\n\r\nexport interface ISelectionRange {\r\n startRow: number;\r\n endRow: number;\r\n startColumn: number;\r\n endColumn: number;\r\n}\r\n\r\nexport enum CollectionChange {\r\n ItemsReplaced\r\n}\r\n\r\nexport interface IObservableCollection {\r\n getLength(): number;\r\n at(index: number): T;\r\n getRange(start: number, end: number): T[];\r\n setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void;\r\n}\r\n\r\nexport class CancellationToken {\r\n private _isCanceled: boolean = false;\r\n private _canceled: Subject = new Subject();\r\n\r\n cancel(): void {\r\n this._isCanceled = true;\r\n this._canceled.next(undefined);\r\n }\r\n\r\n get isCanceled(): boolean {\r\n return this._isCanceled;\r\n }\r\n\r\n get canceled(): Observable {\r\n return this._canceled;\r\n }\r\n}\r\n\r\nexport enum FieldType {\r\n String = 0,\r\n Boolean = 1,\r\n Integer = 2,\r\n Decimal = 3,\r\n Date = 4,\r\n Unknown = 5\r\n}\r\n\r\nexport interface IColumnDefinition {\r\n id?: string;\r\n name: string;\r\n type: FieldType;\r\n asyncPostRender?: (cellRef: string, row: number, dataContext: JSON, colDef: any) => void;\r\n formatter?: (row: number, cell: any, value: any, columnDef: any, dataContext: any) => string;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport interface IGridColumnDefinition {\r\n id: string;\r\n type: number;\r\n}\r\n\r\nexport interface IGridDataRow {\r\n row?: number;\r\n values: any[];\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["js/interfaces.ts"],"names":[],"mappings":";;AAAA;;;gGAGgG;AAChG,gCAA8C;AAE9C,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IACxB,yDAAK,CAAA;IACL,6EAAe,CAAA;IACf,+EAAgB,CAAA;AACpB,CAAC,EAJW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAI3B;AASD,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IACxB,yEAAa,CAAA;AACjB,CAAC,EAFW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAE3B;AASD;IAAA;QACY,gBAAW,GAAY,KAAK,CAAC;QAC7B,cAAS,GAAiB,IAAI,YAAO,EAAO,CAAC;IAczD,CAAC;IAZG,MAAM;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,UAAU;QACV,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,QAAQ;QACR,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ;AAhBD,8CAgBC;AAED,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,6CAAU,CAAA;IACV,+CAAW,CAAA;IACX,+CAAW,CAAA;IACX,+CAAW,CAAA;IACX,yCAAQ,CAAA;IACR,+CAAW,CAAA;AACf,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB","file":"interfaces.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Observable, Subject } from 'rxjs/Rx';\n\nexport enum NotificationType {\n Error,\n UpdateAvailable,\n UpdateDownloaded\n}\n\nexport interface ISelectionRange {\n startRow: number;\n endRow: number;\n startColumn: number;\n endColumn: number;\n}\n\nexport enum CollectionChange {\n ItemsReplaced\n}\n\nexport interface IObservableCollection {\n getLength(): number;\n at(index: number): T;\n getRange(start: number, end: number): T[];\n setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void;\n}\n\nexport class CancellationToken {\n private _isCanceled: boolean = false;\n private _canceled: Subject = new Subject();\n\n cancel(): void {\n this._isCanceled = true;\n this._canceled.next(undefined);\n }\n\n get isCanceled(): boolean {\n return this._isCanceled;\n }\n\n get canceled(): Observable {\n return this._canceled;\n }\n}\n\nexport enum FieldType {\n String = 0,\n Boolean = 1,\n Integer = 2,\n Decimal = 3,\n Date = 4,\n Unknown = 5\n}\n\nexport interface IColumnDefinition {\n id?: string;\n name: string;\n type: FieldType;\n asyncPostRender?: (cellRef: string, row: number, dataContext: JSON, colDef: any) => void;\n formatter?: (row: number, cell: any, value: any, columnDef: any, dataContext: any) => string;\n isEditable?: boolean;\n}\n\nexport interface IGridColumnDefinition {\n id: string;\n type: number;\n}\n\nexport interface IGridDataRow {\n row?: number;\n values: any[];\n}\n"]} \ No newline at end of file diff --git a/out/js/selectionModel.js.map b/out/js/selectionModel.js.map index ff708c3..321be3b 100644 --- a/out/js/selectionModel.js.map +++ b/out/js/selectionModel.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/selectionModel.ts"],"names":[],"mappings":"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","file":"selectionModel.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ISelectionRange } from './interfaces';\r\n\r\nexport class SelectionModel implements ISlickSelectionModel {\r\n\r\n constructor(private _rowSelectionModel: ISlickSelectionModel,\r\n private _handler: ISlickEventHandler,\r\n private _onSelectedRangesChanged: ISlickEvent,\r\n private _slickRangeFactory: (fromRow: number, fromCell: number, toRow: number, toCell: number) => ISlickRange) { }\r\n\r\n get range(): ISlickRange[] {\r\n return this._ranges;\r\n }\r\n\r\n get onSelectedRangesChanged(): ISlickEvent {\r\n return this._onSelectedRangesChanged;\r\n }\r\n\r\n init(grid: ISlickGrid): void {\r\n this._grid = grid;\r\n this._rowSelectionModel.init(grid);\r\n this._handler.subscribe(this._rowSelectionModel.onSelectedRangesChanged, (e, ranges) => {\r\n this.updateSelectedRanges(ranges);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n this._handler.unsubscribeAll();\r\n this._rowSelectionModel.destroy();\r\n }\r\n\r\n setSelectedRanges(ranges: ISlickRange[]): void {\r\n this._rowSelectionModel.setSelectedRanges(ranges);\r\n }\r\n\r\n getSelectedRanges(): ISlickRange[] {\r\n return this._rowSelectionModel.getSelectedRanges();\r\n }\r\n\r\n changeSelectedRanges(selections: ISelectionRange[]): void {\r\n let slickRange = (selections || []).map(s =>\r\n this._slickRangeFactory(s.startRow, s.startColumn, s.endRow - 1, s.endColumn - 1)\r\n );\r\n this.updateSelectedRanges(slickRange);\r\n }\r\n\r\n toggleSingleColumnSelection(columnId: string): void {\r\n let newRanges = [this.getColumnRange(columnId)];\r\n if (SelectionModel.areRangesIdentical(newRanges, this._ranges)) {\r\n this.clearSelection();\r\n } else {\r\n this.setSingleColumnSelection(columnId);\r\n }\r\n }\r\n\r\n setSingleColumnSelection(columnId: string): void {\r\n this._lastSelectedColumnIndexSequence = [this._grid.getColumnIndex(columnId)];\r\n this._grid.resetActiveCell();\r\n this.updateSelectedRanges([this.getColumnRange(columnId)]);\r\n }\r\n\r\n toggleMultiColumnSelection(columnId: string): void {\r\n if (this.isColumnSelectionCurrently === false) {\r\n return this.toggleSingleColumnSelection(columnId);\r\n }\r\n let columnIndex = this._grid.getColumnIndex(columnId);\r\n let columnRange = this.getColumnRangeByIndex(columnIndex);\r\n let columnInRange = false;\r\n let newRanges = this._ranges.filter((value, index) => {\r\n if (value.fromCell === columnRange.fromCell && value.toCell === columnRange.toCell) {\r\n columnInRange = true;\r\n return false;\r\n }\r\n return true;\r\n });\r\n this._lastSelectedColumnIndexSequence = this._lastSelectedColumnIndexSequence.filter(value => value !== columnIndex);\r\n\r\n if (columnInRange === false) {\r\n newRanges.push(columnRange);\r\n this._lastSelectedColumnIndexSequence.push(this._grid.getColumnIndex(columnId));\r\n }\r\n\r\n this._grid.resetActiveCell();\r\n this.updateSelectedRanges(newRanges);\r\n }\r\n\r\n extendMultiColumnSelection(columnId: string): void {\r\n if (this.isColumnSelectionCurrently === false\r\n || !this._lastSelectedColumnIndexSequence\r\n || this._lastSelectedColumnIndexSequence.length === 0) {\r\n return this.toggleSingleColumnSelection(columnId);\r\n }\r\n\r\n let columnIndex = this._grid.getColumnIndex(columnId);\r\n let lastSelectedColumnIndex = this._lastSelectedColumnIndexSequence[this._lastSelectedColumnIndexSequence.length - 1];\r\n\r\n let start = Math.min(columnIndex, lastSelectedColumnIndex);\r\n let end = Math.max(columnIndex, lastSelectedColumnIndex);\r\n\r\n let newRanges = [];\r\n this._lastSelectedColumnIndexSequence = [];\r\n for (let i = start; i <= end; i++) {\r\n newRanges.push(this.getColumnRangeByIndex(i));\r\n if (i !== lastSelectedColumnIndex) {\r\n this._lastSelectedColumnIndexSequence.push(i);\r\n }\r\n }\r\n this._lastSelectedColumnIndexSequence.push(lastSelectedColumnIndex);\r\n\r\n this._grid.resetActiveCell();\r\n this.updateSelectedRanges(newRanges);\r\n }\r\n\r\n clearSelection(): void {\r\n this._lastSelectedColumnIndexSequence = [];\r\n this._grid.resetActiveCell();\r\n this._rowSelectionModel.setSelectedRanges([]);\r\n }\r\n\r\n private _grid: ISlickGrid;\r\n private _ranges: ISlickRange[] = [];\r\n private _lastSelectedColumnIndexSequence: number[] = [];\r\n\r\n private static areRangesIdentical(lhs: ISlickRange[], rhs: ISlickRange[]): boolean {\r\n if (lhs && rhs && (lhs !== rhs) && lhs.length === rhs.length) {\r\n for (let i = 0; i < lhs.length; ++i) {\r\n if (lhs[i].fromRow !== rhs[i].fromRow\r\n || lhs[i].toRow !== rhs[i].toRow\r\n || lhs[i].fromCell !== rhs[i].fromCell\r\n || lhs[i].toCell !== rhs[i].toCell) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private getColumnRange(columnId: string): ISlickRange {\r\n let columnIndex = this._grid.getColumnIndex(columnId);\r\n return this.getColumnRangeByIndex(columnIndex);\r\n }\r\n\r\n private getColumnRangeByIndex(columnIndex: number): ISlickRange {\r\n let rowCount = this._grid.getDataLength();\r\n let lastRowToSelect = rowCount === 0 ? 0 : rowCount - 1 ;\r\n return this._slickRangeFactory(0, columnIndex, lastRowToSelect, columnIndex);\r\n }\r\n\r\n private get isColumnSelectionCurrently(): boolean {\r\n return this._ranges\r\n && this._ranges.length > 0\r\n && this._ranges.find(r => {\r\n let startAtFirstRow = r.fromRow === 0;\r\n let endAtLastRow = r.toRow === Math.max(0, this._grid.getDataLength() - 1);\r\n return !startAtFirstRow || !endAtLastRow || r.fromCell !== r.toCell;\r\n }) === undefined;\r\n }\r\n\r\n private updateSelectedRanges(ranges: ISlickRange[]): void {\r\n // Set focus to this grid if it's not already somewhere inside it.\r\n if (ranges && ranges.length !== 0 && this._grid && this._grid.getCanvasNode() && !this._grid.getCanvasNode().contains(document.activeElement)) {\r\n this._grid.focus();\r\n }\r\n\r\n if (SelectionModel.areRangesIdentical(ranges, this._ranges)) {\r\n return;\r\n }\r\n\r\n this._ranges = ranges;\r\n this.onSelectedRangesChanged.notify(this._ranges);\r\n }\r\n}\r\n\r\nexport interface ISlickSelectionModel {\r\n range: ISlickRange[];\r\n onSelectedRangesChanged: any;\r\n init(grid: any): void;\r\n destroy(): void;\r\n setSelectedRanges(ranges: ISlickRange[]): void;\r\n getSelectedRanges(): ISlickRange[];\r\n}\r\n\r\nexport interface ISlickEventHandler {\r\n subscribe(event: any, handler: any): void;\r\n unsubscribeAll(): void;\r\n}\r\n\r\nexport interface ISlickEvent {\r\n notify(eventData: ISlickRange[]): void;\r\n subscribe(handler: (e: any, args: any) => void): void;\r\n}\r\n\r\nexport interface ISlickRange {\r\n fromCell: number;\r\n fromRow: number;\r\n toCell: number;\r\n toRow: number;\r\n}\r\n\r\nexport interface ISlickGrid {\r\n getActiveCellNode(): any;\r\n getCanvasNode(): any;\r\n resetActiveCell(): void;\r\n focus(): void;\r\n getColumnIndex(columnId: string): number;\r\n getDataLength(): number;\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["js/selectionModel.ts"],"names":[],"mappings":"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","file":"selectionModel.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ISelectionRange } from './interfaces';\n\nexport class SelectionModel implements ISlickSelectionModel {\n\n constructor(private _rowSelectionModel: ISlickSelectionModel,\n private _handler: ISlickEventHandler,\n private _onSelectedRangesChanged: ISlickEvent,\n private _slickRangeFactory: (fromRow: number, fromCell: number, toRow: number, toCell: number) => ISlickRange) { }\n\n get range(): ISlickRange[] {\n return this._ranges;\n }\n\n get onSelectedRangesChanged(): ISlickEvent {\n return this._onSelectedRangesChanged;\n }\n\n init(grid: ISlickGrid): void {\n this._grid = grid;\n this._rowSelectionModel.init(grid);\n this._handler.subscribe(this._rowSelectionModel.onSelectedRangesChanged, (e, ranges) => {\n this.updateSelectedRanges(ranges);\n });\n }\n\n destroy(): void {\n this._handler.unsubscribeAll();\n this._rowSelectionModel.destroy();\n }\n\n setSelectedRanges(ranges: ISlickRange[]): void {\n this._rowSelectionModel.setSelectedRanges(ranges);\n }\n\n getSelectedRanges(): ISlickRange[] {\n return this._rowSelectionModel.getSelectedRanges();\n }\n\n changeSelectedRanges(selections: ISelectionRange[]): void {\n let slickRange = (selections || []).map(s =>\n this._slickRangeFactory(s.startRow, s.startColumn, s.endRow - 1, s.endColumn - 1)\n );\n this.updateSelectedRanges(slickRange);\n }\n\n toggleSingleColumnSelection(columnId: string): void {\n let newRanges = [this.getColumnRange(columnId)];\n if (SelectionModel.areRangesIdentical(newRanges, this._ranges)) {\n this.clearSelection();\n } else {\n this.setSingleColumnSelection(columnId);\n }\n }\n\n setSingleColumnSelection(columnId: string): void {\n this._lastSelectedColumnIndexSequence = [this._grid.getColumnIndex(columnId)];\n this._grid.resetActiveCell();\n this.updateSelectedRanges([this.getColumnRange(columnId)]);\n }\n\n toggleMultiColumnSelection(columnId: string): void {\n if (this.isColumnSelectionCurrently === false) {\n return this.toggleSingleColumnSelection(columnId);\n }\n let columnIndex = this._grid.getColumnIndex(columnId);\n let columnRange = this.getColumnRangeByIndex(columnIndex);\n let columnInRange = false;\n let newRanges = this._ranges.filter((value, index) => {\n if (value.fromCell === columnRange.fromCell && value.toCell === columnRange.toCell) {\n columnInRange = true;\n return false;\n }\n return true;\n });\n this._lastSelectedColumnIndexSequence = this._lastSelectedColumnIndexSequence.filter(value => value !== columnIndex);\n\n if (columnInRange === false) {\n newRanges.push(columnRange);\n this._lastSelectedColumnIndexSequence.push(this._grid.getColumnIndex(columnId));\n }\n\n this._grid.resetActiveCell();\n this.updateSelectedRanges(newRanges);\n }\n\n extendMultiColumnSelection(columnId: string): void {\n if (this.isColumnSelectionCurrently === false\n || !this._lastSelectedColumnIndexSequence\n || this._lastSelectedColumnIndexSequence.length === 0) {\n return this.toggleSingleColumnSelection(columnId);\n }\n\n let columnIndex = this._grid.getColumnIndex(columnId);\n let lastSelectedColumnIndex = this._lastSelectedColumnIndexSequence[this._lastSelectedColumnIndexSequence.length - 1];\n\n let start = Math.min(columnIndex, lastSelectedColumnIndex);\n let end = Math.max(columnIndex, lastSelectedColumnIndex);\n\n let newRanges = [];\n this._lastSelectedColumnIndexSequence = [];\n for (let i = start; i <= end; i++) {\n newRanges.push(this.getColumnRangeByIndex(i));\n if (i !== lastSelectedColumnIndex) {\n this._lastSelectedColumnIndexSequence.push(i);\n }\n }\n this._lastSelectedColumnIndexSequence.push(lastSelectedColumnIndex);\n\n this._grid.resetActiveCell();\n this.updateSelectedRanges(newRanges);\n }\n\n clearSelection(): void {\n this._lastSelectedColumnIndexSequence = [];\n this._grid.resetActiveCell();\n this._rowSelectionModel.setSelectedRanges([]);\n }\n\n private _grid: ISlickGrid;\n private _ranges: ISlickRange[] = [];\n private _lastSelectedColumnIndexSequence: number[] = [];\n\n private static areRangesIdentical(lhs: ISlickRange[], rhs: ISlickRange[]): boolean {\n if (lhs && rhs && (lhs !== rhs) && lhs.length === rhs.length) {\n for (let i = 0; i < lhs.length; ++i) {\n if (lhs[i].fromRow !== rhs[i].fromRow\n || lhs[i].toRow !== rhs[i].toRow\n || lhs[i].fromCell !== rhs[i].fromCell\n || lhs[i].toCell !== rhs[i].toCell) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n private getColumnRange(columnId: string): ISlickRange {\n let columnIndex = this._grid.getColumnIndex(columnId);\n return this.getColumnRangeByIndex(columnIndex);\n }\n\n private getColumnRangeByIndex(columnIndex: number): ISlickRange {\n let rowCount = this._grid.getDataLength();\n let lastRowToSelect = rowCount === 0 ? 0 : rowCount - 1 ;\n return this._slickRangeFactory(0, columnIndex, lastRowToSelect, columnIndex);\n }\n\n private get isColumnSelectionCurrently(): boolean {\n return this._ranges\n && this._ranges.length > 0\n && this._ranges.find(r => {\n let startAtFirstRow = r.fromRow === 0;\n let endAtLastRow = r.toRow === Math.max(0, this._grid.getDataLength() - 1);\n return !startAtFirstRow || !endAtLastRow || r.fromCell !== r.toCell;\n }) === undefined;\n }\n\n private updateSelectedRanges(ranges: ISlickRange[]): void {\n // Set focus to this grid if it's not already somewhere inside it.\n if (ranges && ranges.length !== 0 && this._grid && this._grid.getCanvasNode() && !this._grid.getCanvasNode().contains(document.activeElement)) {\n this._grid.focus();\n }\n\n if (SelectionModel.areRangesIdentical(ranges, this._ranges)) {\n return;\n }\n\n this._ranges = ranges;\n this.onSelectedRangesChanged.notify(this._ranges);\n }\n}\n\nexport interface ISlickSelectionModel {\n range: ISlickRange[];\n onSelectedRangesChanged: any;\n init(grid: any): void;\n destroy(): void;\n setSelectedRanges(ranges: ISlickRange[]): void;\n getSelectedRanges(): ISlickRange[];\n}\n\nexport interface ISlickEventHandler {\n subscribe(event: any, handler: any): void;\n unsubscribeAll(): void;\n}\n\nexport interface ISlickEvent {\n notify(eventData: ISlickRange[]): void;\n subscribe(handler: (e: any, args: any) => void): void;\n}\n\nexport interface ISlickRange {\n fromCell: number;\n fromRow: number;\n toCell: number;\n toRow: number;\n}\n\nexport interface ISlickGrid {\n getActiveCellNode(): any;\n getCanvasNode(): any;\n resetActiveCell(): void;\n focus(): void;\n getColumnIndex(columnId: string): number;\n getDataLength(): number;\n}\n"]} \ No newline at end of file diff --git a/out/js/slickGrid.js b/out/js/slickGrid.js index 75d192c..c4eeedb 100644 --- a/out/js/slickGrid.js +++ b/out/js/slickGrid.js @@ -512,6 +512,8 @@ let SlickGrid = SlickGrid_1 = class SlickGrid { subscribeToActiveCellChanged() { // Subscribe to all active cell changes to be able to catch when we tab to the header on the next row this._grid.onActiveCellChanged.subscribe((e, args) => { + // Emit that we've changed active cells + this.activeCellChanged.emit({ row: args.row, column: args.cell }); // If editing is disabled or this isn't the header, ignore. // We assume the header is always column 0, as it is hardcoded to be that way in initGrid if (!this.enableEditing || args.cell !== 0) { @@ -526,8 +528,6 @@ let SlickGrid = SlickGrid_1 = class SlickGrid { this._activeEditingRow = undefined; this._activeEditingRowHasChanges = false; } - // Emit that we've changed active cells - this.activeCellChanged.emit({ row: args.row, column: args.cell }); }); } updateColumnWidths() { diff --git a/out/js/slickGrid.js.map b/out/js/slickGrid.js.map index 5afad1c..f9aa668 100644 --- a/out/js/slickGrid.js.map +++ b/out/js/slickGrid.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/slickGrid.ts"],"names":[],"mappings":"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","file":"slickGrid.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Component, Input, Output, Inject, forwardRef, OnChanges, OnInit, OnDestroy, ElementRef, SimpleChange, EventEmitter,\r\n ViewEncapsulation, Optional, HostListener, AfterViewInit } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs/Rx';\r\nimport { IObservableCollection, CollectionChange, IGridDataRow, IColumnDefinition, FieldType } from './interfaces';\r\nimport { GridSyncService } from './gridsync.service';\r\nimport { ISlickRange, ISlickEvent } from './selectionModel';\r\n\r\ndeclare let Slick;\r\n\r\n////////// Interfaces /////////////////////////////////////////////////////////\r\n\r\ninterface ISlickGridData {\r\n // https://github.com/mleibman/SlickGrid/wiki/DataView\r\n getLength(): number;\r\n getItem(index: number): any;\r\n getRange(start: number, end: number): any; // only available in the forked SlickGrid\r\n getItemMetadata(index: number): any;\r\n}\r\n\r\ninterface ISlickGridColumn {\r\n // https://github.com/mleibman/SlickGrid/wiki/Column-Options\r\n name: string;\r\n field: string;\r\n id: string;\r\n icon: string;\r\n resizable: boolean;\r\n minWidth?: number;\r\n width?: number;\r\n asyncPostRender?: (cellRef: string, row: number, dataContext: JSON, colDef: any) => void;\r\n formatter?: (row: number, cell: any, value: any, columnDef: any, dataContext: any) => string;\r\n}\r\n\r\n////////// Text Editors ///////////////////////////////////////////////////////\r\n\r\nfunction getOverridableTextEditorClass(grid: SlickGrid): any {\r\n class OverridableTextEditor {\r\n private _textEditor: any;\r\n private _rowIndex: number;\r\n\r\n constructor(private _args: any) {\r\n this._textEditor = new Slick.Editors.Text(_args);\r\n }\r\n\r\n destroy(): void {\r\n this._textEditor.destroy();\r\n };\r\n\r\n focus(): void {\r\n this._textEditor.focus();\r\n };\r\n\r\n getValue(): string {\r\n return this._textEditor.getValue();\r\n };\r\n\r\n setValue(val): void {\r\n this._textEditor.setValue(val);\r\n };\r\n\r\n loadValue(item, rowNumber): void {\r\n if (grid.overrideCellFn) {\r\n let overrideValue = grid.overrideCellFn(rowNumber, this._args.column.id, item[this._args.column.id]);\r\n if (overrideValue !== undefined) {\r\n item[this._args.column.id] = overrideValue;\r\n }\r\n }\r\n\r\n this._rowIndex = rowNumber;\r\n this._textEditor.loadValue(item);\r\n };\r\n\r\n serializeValue(): string {\r\n return this._textEditor.serializeValue();\r\n };\r\n\r\n applyValue(item, state): void {\r\n let currentRow = grid.dataRows.at(this._rowIndex);\r\n let colIndex = grid.getColumnIndex(this._args.column.name);\r\n let dataLength: number = grid.dataRows.getLength();\r\n\r\n // If this is not the \"new row\" at the very bottom\r\n if (this._rowIndex !== dataLength) {\r\n currentRow.values[colIndex] = state;\r\n this._textEditor.applyValue(item, state);\r\n }\r\n };\r\n\r\n isValueChanged(): boolean {\r\n return this._textEditor.isValueChanged();\r\n };\r\n\r\n validate(): any {\r\n let result: any = { valid: true, msg: undefined };\r\n let colIndex: number = grid.getColumnIndex(this._args.column.name);\r\n let newValue: any = this._textEditor.getValue();\r\n\r\n // TODO: It would be nice if we could support the isCellEditValid as a promise \r\n if (grid.isCellEditValid && !grid.isCellEditValid(this._rowIndex, colIndex, newValue)) {\r\n result.valid = false;\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n return OverridableTextEditor;\r\n}\r\n\r\n////////// Implementation /////////////////////////////////////////////////////\r\n\r\n@Component({\r\n selector: 'slick-grid',\r\n template: '
',\r\n providers: [GridSyncService],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit {\r\n\r\n @Input() columnDefinitions: IColumnDefinition[];\r\n @Input() dataRows: IObservableCollection;\r\n @Input() resized: Observable;\r\n @Input() highlightedCells: {row: number, column: number}[] = [];\r\n @Input() blurredColumns: string[] = [];\r\n @Input() contextColumns: string[] = [];\r\n @Input() columnsLoading: string[] = [];\r\n @Input() showHeader: boolean = true;\r\n @Input() showDataTypeIcon: boolean = true;\r\n @Input() enableColumnReorder: boolean = false;\r\n @Input() enableAsyncPostRender: boolean = false;\r\n @Input() selectionModel: string | Slick.SelectionModel = '';\r\n @Input() plugins: Array> = [];\r\n @Input() enableEditing: boolean = false;\r\n @Input() topRowNumber: number;\r\n\r\n @Input() overrideCellFn: (rowNumber, columnId, value?, data?) => string;\r\n @Input() isColumnEditable: (column: number) => boolean;\r\n @Input() isCellEditValid: (row: number, column: number, newValue: any) => boolean;\r\n\r\n @Output() loadFinished: EventEmitter = new EventEmitter();\r\n @Output() editingFinished: EventEmitter = new EventEmitter();\r\n @Output() contextMenu: EventEmitter = new EventEmitter();\r\n @Output() topRowNumberChange: EventEmitter = new EventEmitter();\r\n\r\n @Output() activeCellChanged: EventEmitter<{row: number, column: number}> = new EventEmitter<{row: number, column: number}>();\r\n @Output() cellEditBegin: EventEmitter<{row: number, column: number }> = new EventEmitter<{row: number, column: number}>();\r\n @Output() cellEditExit: EventEmitter<{row: number, column: number, newValue: any}> = new EventEmitter<{row: number, column: number, newValue: any}>();\r\n @Output() rowEditBegin: EventEmitter<{row: number}> = new EventEmitter<{row: number}>();\r\n @Output() rowEditExit: EventEmitter<{row: number}> = new EventEmitter<{row: number}>();\r\n\r\n @HostListener('focus')\r\n onFocus(): void {\r\n if (this._grid) {\r\n this._grid.focus();\r\n }\r\n }\r\n\r\n private _grid: any;\r\n private _gridColumns: ISlickGridColumn[];\r\n private _columnNameToIndex: any;\r\n private _gridData: ISlickGridData;\r\n private _rowHeight = 29;\r\n private _resizeSubscription: Subscription;\r\n private _gridSyncSubscription: Subscription;\r\n private _topRow: number = 0;\r\n private _leftPx: number = 0;\r\n private _activeEditingRow: number;\r\n private _activeEditingRowHasChanges: boolean;\r\n /* andresse: commented out 11/1/2016 due to minification issues\r\n private _finishGridEditingFn: (e: any, args: any) => void;\r\n */\r\n\r\n ////////// Constructor and Angular functions //////////////////////////////\r\n\r\n constructor(@Inject(forwardRef(() => ElementRef)) private _el,\r\n @Optional() @Inject(forwardRef(() => GridSyncService)) private _gridSyncService) {\r\n this._gridData = {\r\n getLength: (): number => {\r\n return this.dataRows && this._gridColumns ? this.dataRows.getLength() : 0;\r\n },\r\n getItem: (index): any => {\r\n return SlickGrid.getDataWithSchema(this.dataRows.at(index), this._gridColumns);\r\n },\r\n getRange: (start, end): any => {\r\n return !this.dataRows ? undefined : this.dataRows.getRange(start, end).map(d => {\r\n return SlickGrid.getDataWithSchema(d, this._gridColumns);\r\n });\r\n },\r\n getItemMetadata: undefined\r\n };\r\n }\r\n\r\n ngOnChanges(changes: {[propName: string]: SimpleChange}): void {\r\n let columnDefinitionChanges = changes['columnDefinitions'];\r\n let activeCell = this._grid ? this._grid.getActiveCell() : undefined;\r\n let hasGridStructureChanges = false;\r\n let wasEditing = this._grid ? !!this._grid.getCellEditor() : false;\r\n\r\n if (columnDefinitionChanges\r\n && !_.isEqual(columnDefinitionChanges.previousValue, columnDefinitionChanges.currentValue)) {\r\n this.updateSchema();\r\n if (!this._grid) {\r\n this.initGrid();\r\n } else {\r\n this._grid.resetActiveCell();\r\n this._grid.setColumns(this._gridColumns);\r\n }\r\n if (this._gridSyncService) {\r\n let gridColumnWidths: number[] = this._grid.getColumnWidths();\r\n this._gridSyncService.rowNumberColumnWidthPX = gridColumnWidths[0];\r\n this._gridSyncService.columnWidthPXs = gridColumnWidths.slice(1);\r\n }\r\n hasGridStructureChanges = true;\r\n\r\n if (!columnDefinitionChanges.currentValue || columnDefinitionChanges.currentValue.length === 0) {\r\n activeCell = undefined;\r\n }\r\n if (activeCell) {\r\n let columnThatContainedActiveCell = columnDefinitionChanges.previousValue[Math.max(activeCell.cell - 1, 0)];\r\n let newActiveColumnIndex = columnThatContainedActiveCell\r\n ? columnDefinitionChanges.currentValue.findIndex(c => c.id === columnThatContainedActiveCell.id)\r\n : -1;\r\n activeCell.cell = newActiveColumnIndex !== -1 ? newActiveColumnIndex + 1 : 0;\r\n }\r\n }\r\n\r\n if (changes['dataRows']\r\n || (changes['highlightedCells'] && !_.isEqual(changes['highlightedCells'].currentValue, changes['highlightedCells'].previousValue))\r\n || (changes['blurredColumns'] && !_.isEqual(changes['blurredColumns'].currentValue, changes['blurredColumns'].previousValue))\r\n || (changes['columnsLoading'] && !_.isEqual(changes['columnsLoading'].currentValue, changes['columnsLoading'].previousValue))) {\r\n this.setCallbackOnDataRowsChanged();\r\n this._grid.updateRowCount();\r\n this._grid.setColumns(this._grid.getColumns());\r\n this._grid.invalidateAllRows();\r\n this._grid.render();\r\n if (this._gridSyncService) {\r\n this._gridSyncService.rowNumberColumnWidthPX = this._grid.getColumnWidths()[0];\r\n }\r\n hasGridStructureChanges = true;\r\n }\r\n\r\n if (hasGridStructureChanges) {\r\n if (activeCell) {\r\n this._grid.setActiveCell(activeCell.row, activeCell.cell);\r\n } else {\r\n this._grid.resetActiveCell();\r\n }\r\n }\r\n\r\n if (wasEditing && hasGridStructureChanges) {\r\n this._grid.editActiveCell();\r\n }\r\n\r\n /* andresse: commented out 11/1/2016 due to minification issues\r\n if (changes['editableColumnIds']) {\r\n let newValue = changes['editableColumnIds'].currentValue;\r\n if (!_.isEqual(newValue, changes['editableColumnIds'].previousValue)) {\r\n this._grid.onKeyDown.unsubscribe(this.finishGridEditingFn);\r\n if (newValue && newValue.length > 0) {\r\n this._grid.onKeyDown.subscribe(this.finishGridEditingFn);\r\n let firstEditableColumn = this._grid.getColumnIndex(newValue[0]) + 1;\r\n let rowToFocus = activeCell ? activeCell.row : this._grid.getViewport().top;\r\n this._grid.gotoCell(rowToFocus, firstEditableColumn, true);\r\n }\r\n }\r\n }\r\n */\r\n }\r\n\r\n ngOnInit(): void {\r\n // ngOnInit() will be called *after* the first time ngOnChanges() is called\r\n // so, grid must be there already\r\n if (this.topRowNumber === undefined) {\r\n this.topRowNumber = 0;\r\n }\r\n this._grid.scrollRowToTop(this.topRowNumber);\r\n\r\n if (this.resized) {\r\n // Re-rendering the grid is expensive. Throttle so we only do so every 100ms.\r\n this.resized.throttleTime(100)\r\n .subscribe(() => this.onResize());\r\n }\r\n\r\n // subscribe to slick events\r\n // https://github.com/mleibman/SlickGrid/wiki/Grid-Events\r\n this.subscribeToScroll();\r\n this.subscribeToCellChanged();\r\n this.subscribeToBeforeEditCell();\r\n this.subscribeToContextMenu();\r\n this.subscribeToActiveCellChanged();\r\n\r\n this._activeEditingRowHasChanges = false;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.loadFinished.emit();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._resizeSubscription !== undefined) {\r\n this._resizeSubscription.unsubscribe();\r\n }\r\n if (this._gridSyncSubscription !== undefined) {\r\n this._gridSyncSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n ////////// Public functions - Add public API functions here //////////////\r\n\r\n // Enables editing on the grid\r\n public enterEditSession(): void {\r\n this.changeEditSession(true);\r\n }\r\n\r\n // Disables editing on the grid\r\n public endEditSession(): void {\r\n this.changeEditSession(false);\r\n }\r\n\r\n // Called whenever the grid's selected rows change \r\n // Event args: { rows: number[] }\r\n public get onSelectedRowsChanged(): ISlickEvent {\r\n return this._grid.onSelectedRowsChanged;\r\n }\r\n\r\n // Returns an array of row indices corresponding to the currently selected rows.\r\n public getSelectedRows(): number[] {\r\n return this._grid.getSelectedRows();\r\n }\r\n\r\n // Gets the column index of the column with the given name\r\n public getColumnIndex(name: string): number {\r\n return this._columnNameToIndex[name];\r\n }\r\n\r\n // Gets a ISlickRange corresponding to the current selection on the grid\r\n public getSelectedRanges(): ISlickRange[] {\r\n if (this._gridSyncService && this._gridSyncService.selectionModel) {\r\n return this._gridSyncService.selectionModel.getSelectedRanges();\r\n }\r\n }\r\n\r\n // Registers a Slick plugin with the given name\r\n public registerPlugin(plugin: Slick.Plugin | string): void {\r\n if (typeof plugin === 'object') {\r\n this._grid.registerPlugin(plugin);\r\n } else if (typeof plugin === 'string' && Slick[plugin] && typeof Slick[plugin] === 'function') {\r\n this._grid.registerPlugin(new Slick[plugin]);\r\n } else {\r\n console.error(`Tried to register plugin ${plugin}, but none was found to be attached to Slick Grid or it was not a function.\r\n Please extend the Slick with the plugin as a function before registering`);\r\n }\r\n }\r\n\r\n // Set this grid to be the active grid\r\n public setActive(): void {\r\n this._grid.setActiveCell(0, 1);\r\n if (this._gridSyncService && this._gridSyncService.selectionModel) {\r\n this._gridSyncService.selectionModel.setSelectedRanges([new Slick.Range(0, 0, 0, 0)]);\r\n }\r\n }\r\n\r\n // Set the grid's selection\r\n public set selection(range: ISlickRange[] | boolean) {\r\n if (typeof range === 'boolean') {\r\n if (range) {\r\n this._gridSyncService.selectionModel.setSelectedRanges(\r\n [new Slick.Range(0, 0, this._grid.getDataLength() - 1, this._grid.getColumns().length - 1)]\r\n );\r\n } else {\r\n this._gridSyncService.selectionModel.clearSelection();\r\n }\r\n } else {\r\n this._gridSyncService.selectionModel.setSelectedRanges(range);\r\n }\r\n }\r\n\r\n // Add a context menu to SlickGrid\r\n public subscribeToContextMenu(): void {\r\n const self = this;\r\n this._grid.onContextMenu.subscribe(function (event): void {\r\n event.preventDefault();\r\n self.contextMenu.emit(event);\r\n });\r\n }\r\n\r\n ////////// Private functions //////////////////////////////////////////////\r\n\r\n private initGrid(): void {\r\n // https://github.com/mleibman/SlickGrid/wiki/Grid-Options\r\n let options = {\r\n enableCellNavigation: true,\r\n enableColumnReorder: this.enableColumnReorder,\r\n renderRowWithRange: true,\r\n showRowNumber: true,\r\n showDataTypeIcon: this.showDataTypeIcon,\r\n showHeader: this.showHeader,\r\n rowHeight: this._rowHeight,\r\n defaultColumnWidth: 120,\r\n editable: this.enableEditing,\r\n autoEdit: this.enableEditing,\r\n enableAddRow: false, // TODO change when we support enableAddRow\r\n enableAsyncPostRender: this.enableAsyncPostRender,\r\n editorFactory: {\r\n getEditor: this.getColumnEditor\r\n },\r\n formatterFactory: {\r\n getFormatter: this.getFormatter\r\n }\r\n };\r\n\r\n this._grid = new Slick.Grid(\r\n this._el.nativeElement.getElementsByClassName('grid')[0],\r\n this._gridData,\r\n this._gridColumns,\r\n options);\r\n\r\n if (this._gridSyncService) {\r\n if (this.selectionModel) {\r\n if (typeof this.selectionModel === 'object') {\r\n this._gridSyncService.underlyingSelectionModel = this.selectionModel;\r\n this._grid.setSelectionModel(this._gridSyncService.selectionModel);\r\n } else if (typeof this.selectionModel === 'string' && Slick[this.selectionModel] && typeof Slick[this.selectionModel] === 'function') {\r\n this._gridSyncService.underlyingSelectionModel = new Slick[this.selectionModel]();\r\n this._grid.setSelectionModel(this._gridSyncService.selectionModel);\r\n } else {\r\n console.error(`Tried to register selection model ${this.selectionModel}, \r\n but none was found to be attached to Slick Grid or it was not a function.\r\n Please extend the Slick with the selection model as a function before registering`);\r\n }\r\n }\r\n this._gridSyncService.scrollBarWidthPX = this._grid.getScrollbarDimensions().width;\r\n this._gridSyncSubscription = this._gridSyncService.updated\r\n .filter(p => p === 'columnWidthPXs')\r\n .debounceTime(10)\r\n .subscribe(p => {\r\n this.updateColumnWidths();\r\n });\r\n }\r\n\r\n for (let plugin of this.plugins) {\r\n this.registerPlugin(plugin);\r\n }\r\n\r\n this._columnNameToIndex = {};\r\n for (let i = 0; i < this._gridColumns.length; i++) {\r\n this._columnNameToIndex[this._gridColumns[i].name] = i;\r\n }\r\n\r\n this.onResize();\r\n }\r\n\r\n private changeEditSession(enabled: boolean): void {\r\n this.enableEditing = enabled;\r\n let options: any = this._grid.getOptions();\r\n options.editable = enabled;\r\n options.enableAddRow = false; // TODO change to \" options.enableAddRow = false;\" when we support enableAddRow\r\n this._grid.setOptions(options);\r\n }\r\n\r\n private handleEditorCellChange(rowNumber: number): void {\r\n // Need explicit undefined check due to row 0\r\n let firstTimeEditingRow = this._activeEditingRow === undefined;\r\n let editingNewRow = rowNumber !== this._activeEditingRow;\r\n\r\n // Check if we have existing edits on a row and we are leaving that row\r\n if (!firstTimeEditingRow && editingNewRow && this._activeEditingRowHasChanges) {\r\n this._activeEditingRowHasChanges = false;\r\n this.rowEditExit.emit({\r\n row: this._activeEditingRow\r\n });\r\n this._activeEditingRow = undefined;\r\n }\r\n\r\n // Check if we are entering a new row\r\n if (firstTimeEditingRow || editingNewRow) {\r\n this._activeEditingRow = rowNumber;\r\n this.rowEditBegin.emit({\r\n row: rowNumber\r\n });\r\n }\r\n }\r\n\r\n private static getDataWithSchema(data: IGridDataRow, columns: ISlickGridColumn[]): any {\r\n let dataWithSchema = {};\r\n for (let i = 0; i < columns.length; i++) {\r\n dataWithSchema[columns[i].field] = data.values[i];\r\n }\r\n\r\n return dataWithSchema;\r\n }\r\n\r\n private onResize(): void {\r\n if (this._grid !== undefined) {\r\n // this will make sure the grid header and body to be re-rendered\r\n this._grid.resizeCanvas();\r\n }\r\n }\r\n\r\n private invalidateRange(start: number, end: number): void {\r\n let refreshedRows = _.range(start, end);\r\n this._grid.invalidateRows(refreshedRows, true);\r\n this._grid.render();\r\n }\r\n\r\n /* tslint:disable:member-ordering */\r\n private getColumnEditor = (column: any): any => {\r\n if (this.isColumnEditable && !this.isColumnEditable(this.getColumnIndex(column.name))) {\r\n return undefined;\r\n }\r\n\r\n let columnId = column.id;\r\n let isColumnLoading = this.columnsLoading && this.columnsLoading.indexOf(columnId) !== -1;\r\n let canEditColumn = columnId !== undefined && !isColumnLoading;\r\n if (canEditColumn) {\r\n return getOverridableTextEditorClass(this);\r\n }\r\n return undefined;\r\n };\r\n\r\n private getFormatter = (column: any): any => {\r\n if (column.isRowNumber === true) {\r\n return undefined; // use default formatter for row number cell\r\n }\r\n return (row, cell, value, columnDef, dataContext) => {\r\n let columnId = cell > 0 && this.columnDefinitions.length > cell - 1 ? this.columnDefinitions[cell - 1].id : undefined;\r\n if (columnId) {\r\n let columnType = this.columnDefinitions[cell - 1].type;\r\n let isHighlighted = this.highlightedCells && !!this.highlightedCells.find(c => c.row === row && c.column + 1 === cell);\r\n let isColumnLoading = this.columnsLoading && this.columnsLoading.indexOf(columnId) !== -1;\r\n let isShadowed = this.blurredColumns && !!this.blurredColumns.find(c => c === columnId);\r\n let isContext = this.contextColumns && !!this.contextColumns.find(c => c === columnId);\r\n let overrideValue = this.overrideCellFn && this.overrideCellFn(row, columnId, value, dataContext);\r\n\r\n let valueToDisplay = (value + '').replace(/&/g, '&').replace(//g, '>');\r\n let cellClasses = 'grid-cell-value-container';\r\n if (columnType !== FieldType.String) {\r\n cellClasses += ' right-justified';\r\n }\r\n\r\n /* tslint:disable:no-null-keyword */\r\n let valueMissing = value === undefined || value === null;\r\n /* tslint:disable:no-null-keyword */\r\n let isOverridden = overrideValue !== undefined && overrideValue !== null;\r\n\r\n if (valueMissing && !isOverridden) {\r\n cellClasses += ' missing-value';\r\n }\r\n\r\n if (isColumnLoading === true && !isOverridden) {\r\n cellClasses += ' loading-cell';\r\n valueToDisplay = '';\r\n }\r\n\r\n if (isOverridden) {\r\n cellClasses += ' override-cell';\r\n valueToDisplay = overrideValue;\r\n }\r\n\r\n if (isContext) {\r\n cellClasses += ' context';\r\n }\r\n\r\n if (isHighlighted === true) {\r\n cellClasses += ' highlighted';\r\n }\r\n\r\n if (isShadowed && !isHighlighted && !isOverridden) {\r\n cellClasses += ' blurred';\r\n }\r\n\r\n return '' + valueToDisplay + '';\r\n }\r\n\r\n };\r\n };\r\n\r\n private subscribeToScroll(): void {\r\n this._grid.onScroll.subscribe((e, args) => {\r\n let scrollTop = args.scrollTop;\r\n let scrollRow = Math.floor(scrollTop / this._rowHeight);\r\n scrollRow = scrollRow < 0 ? 0 : scrollRow;\r\n if (scrollRow !== this._topRow) {\r\n this._topRow = scrollRow;\r\n this.topRowNumberChange.emit(scrollRow);\r\n }\r\n\r\n if (this._gridSyncService && args.scrollLeft !== this._leftPx) {\r\n this._leftPx = args.scrollLeft;\r\n this._gridSyncService.scrollLeftPX = this._leftPx;\r\n }\r\n });\r\n }\r\n\r\n private subscribeToCellChanged(): void {\r\n this._grid.onCellChange.subscribe((e, args) => {\r\n let modifiedColumn = this.columnDefinitions[args.cell - 1];\r\n this._activeEditingRowHasChanges = true;\r\n this.cellEditExit.emit({\r\n column: this.getColumnIndex(modifiedColumn.name),\r\n row: args.row,\r\n newValue: args.item[modifiedColumn.id]\r\n });\r\n });\r\n }\r\n\r\n private subscribeToBeforeEditCell(): void {\r\n this._grid.onBeforeEditCell.subscribe((e, args) => {\r\n this.handleEditorCellChange(args.row);\r\n this.cellEditBegin.emit({\r\n column: this.getColumnIndex(args.column.name),\r\n row: args.row\r\n });\r\n });\r\n }\r\n\r\n private subscribeToActiveCellChanged (): void {\r\n // Subscribe to all active cell changes to be able to catch when we tab to the header on the next row\r\n this._grid.onActiveCellChanged.subscribe((e, args) => {\r\n\r\n // If editing is disabled or this isn't the header, ignore. \r\n // We assume the header is always column 0, as it is hardcoded to be that way in initGrid\r\n if (!this.enableEditing || args.cell !== 0) {\r\n return;\r\n }\r\n\r\n let rowNumber = args.row;\r\n let haveRowEdits = this._activeEditingRow !== undefined;\r\n let tabbedToNextRow = rowNumber !== this._activeEditingRow; // Need explicit undefined check due to row 0\r\n\r\n // If we tabbed from an edited row to the header of the next row, emit a rowEditExit\r\n if (haveRowEdits && tabbedToNextRow && this._activeEditingRowHasChanges) {\r\n this.rowEditExit.emit();\r\n this._activeEditingRow = undefined;\r\n this._activeEditingRowHasChanges = false;\r\n }\r\n\r\n // Emit that we've changed active cells\r\n this.activeCellChanged.emit({row: args.row, column: args.cell});\r\n });\r\n }\r\n\r\n private updateColumnWidths(): void {\r\n for (let i = 0; i < this._gridColumns.length; i++) {\r\n this._gridColumns[i].width = this._gridSyncService.columnWidthPXs[i];\r\n }\r\n this._grid.setColumnWidths(this._gridColumns, true);\r\n }\r\n\r\n private updateSchema(): void {\r\n if (!this.columnDefinitions) {\r\n return;\r\n }\r\n\r\n this._gridColumns = this.columnDefinitions.map((c, i) => {\r\n let column: ISlickGridColumn = {\r\n name: c.name,\r\n field: c.id,\r\n id: c.id ? c.id : c.name,\r\n icon: this.getImagePathForDataType(c.type),\r\n resizable: true\r\n };\r\n\r\n if (c.asyncPostRender) {\r\n column.asyncPostRender = c.asyncPostRender;\r\n }\r\n\r\n if (c.formatter) {\r\n column.formatter = c.formatter;\r\n }\r\n\r\n if (this._gridSyncService) {\r\n let columnWidth = this._gridSyncService.columnWidthPXs[i];\r\n column.width = columnWidth ? columnWidth : undefined;\r\n column.minWidth = this._gridSyncService.columnMinWidthPX;\r\n }\r\n\r\n return column;\r\n });\r\n }\r\n\r\n private getImagePathForDataType(type: FieldType): string {\r\n const resourcePath = './resources/';\r\n switch (type) {\r\n case FieldType.String:\r\n return resourcePath + 'col-type-string.svg';\r\n case FieldType.Boolean:\r\n return resourcePath + 'col-type-boolean.svg';\r\n case FieldType.Integer:\r\n case FieldType.Decimal:\r\n return resourcePath + 'col-type-number.svg';\r\n case FieldType.Date:\r\n return resourcePath + 'col-type-timedate.svg';\r\n case FieldType.Unknown:\r\n default:\r\n return resourcePath + 'circle.svg';\r\n }\r\n }\r\n\r\n private setCallbackOnDataRowsChanged(): void {\r\n if (this.dataRows) {\r\n // We must wait until we get the first set of dataRows before we enable editing or slickgrid will complain\r\n if (this.enableEditing) {\r\n this.enterEditSession();\r\n }\r\n\r\n this.dataRows.setCollectionChangedCallback((change: CollectionChange, startIndex: number, count: number) => {\r\n this.renderGridDataRowsRange(startIndex, count);\r\n });\r\n }\r\n }\r\n\r\n private renderGridDataRowsRange(startIndex: number, count: number): void {\r\n let editor = this._grid.getCellEditor();\r\n let oldValue = editor ? editor.getValue() : undefined;\r\n let wasValueChanged = editor ? editor.isValueChanged() : false;\r\n this.invalidateRange(startIndex, startIndex + count);\r\n let activeCell = this._grid.getActiveCell();\r\n if (editor && activeCell.row >= startIndex && activeCell.row < startIndex + count) {\r\n if (oldValue && wasValueChanged) {\r\n editor.setValue(oldValue);\r\n }\r\n }\r\n }\r\n\r\n /* andresse: commented out 11/1/2016 due to minification issues\r\n private get finishGridEditingFn(): (e: any, args: any) => void {\r\n if (this._finishGridEditingFn === undefined) {\r\n this._finishGridEditingFn = ((e: any, args: any) => {\r\n if (e.ctrlKey === true\r\n && e.keyCode === 13\r\n && this.editableColumnIds\r\n && this.editableColumnIds.find(id => id === args.columnDef.id)) {\r\n // pressed [Ctrl + Enter] in the editing area\r\n this.editingFinished.next(undefined);\r\n }\r\n }).bind(this);\r\n }\r\n\r\n return this._finishGridEditingFn;\r\n }\r\n */\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["js/slickGrid.ts"],"names":[],"mappings":"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","file":"slickGrid.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Component, Input, Output, Inject, forwardRef, OnChanges, OnInit, OnDestroy, ElementRef, SimpleChange, EventEmitter,\n ViewEncapsulation, Optional, HostListener, AfterViewInit } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs/Rx';\nimport { IObservableCollection, CollectionChange, IGridDataRow, IColumnDefinition, FieldType } from './interfaces';\nimport { GridSyncService } from './gridsync.service';\nimport { ISlickRange, ISlickEvent } from './selectionModel';\n\ndeclare let Slick;\n\n////////// Interfaces /////////////////////////////////////////////////////////\n\ninterface ISlickGridData {\n // https://github.com/mleibman/SlickGrid/wiki/DataView\n getLength(): number;\n getItem(index: number): any;\n getRange(start: number, end: number): any; // only available in the forked SlickGrid\n getItemMetadata(index: number): any;\n}\n\ninterface ISlickGridColumn {\n // https://github.com/mleibman/SlickGrid/wiki/Column-Options\n name: string;\n field: string;\n id: string;\n icon: string;\n resizable: boolean;\n minWidth?: number;\n width?: number;\n asyncPostRender?: (cellRef: string, row: number, dataContext: JSON, colDef: any) => void;\n formatter?: (row: number, cell: any, value: any, columnDef: any, dataContext: any) => string;\n}\n\n////////// Text Editors ///////////////////////////////////////////////////////\n\nfunction getOverridableTextEditorClass(grid: SlickGrid): any {\n class OverridableTextEditor {\n private _textEditor: any;\n private _rowIndex: number;\n\n constructor(private _args: any) {\n this._textEditor = new Slick.Editors.Text(_args);\n }\n\n destroy(): void {\n this._textEditor.destroy();\n };\n\n focus(): void {\n this._textEditor.focus();\n };\n\n getValue(): string {\n return this._textEditor.getValue();\n };\n\n setValue(val): void {\n this._textEditor.setValue(val);\n };\n\n loadValue(item, rowNumber): void {\n if (grid.overrideCellFn) {\n let overrideValue = grid.overrideCellFn(rowNumber, this._args.column.id, item[this._args.column.id]);\n if (overrideValue !== undefined) {\n item[this._args.column.id] = overrideValue;\n }\n }\n\n this._rowIndex = rowNumber;\n this._textEditor.loadValue(item);\n };\n\n serializeValue(): string {\n return this._textEditor.serializeValue();\n };\n\n applyValue(item, state): void {\n let currentRow = grid.dataRows.at(this._rowIndex);\n let colIndex = grid.getColumnIndex(this._args.column.name);\n let dataLength: number = grid.dataRows.getLength();\n\n // If this is not the \"new row\" at the very bottom\n if (this._rowIndex !== dataLength) {\n currentRow.values[colIndex] = state;\n this._textEditor.applyValue(item, state);\n }\n };\n\n isValueChanged(): boolean {\n return this._textEditor.isValueChanged();\n };\n\n validate(): any {\n let result: any = { valid: true, msg: undefined };\n let colIndex: number = grid.getColumnIndex(this._args.column.name);\n let newValue: any = this._textEditor.getValue();\n\n // TODO: It would be nice if we could support the isCellEditValid as a promise \n if (grid.isCellEditValid && !grid.isCellEditValid(this._rowIndex, colIndex, newValue)) {\n result.valid = false;\n }\n\n return result;\n };\n }\n\n return OverridableTextEditor;\n}\n\n////////// Implementation /////////////////////////////////////////////////////\n\n@Component({\n selector: 'slick-grid',\n template: '
',\n providers: [GridSyncService],\n encapsulation: ViewEncapsulation.None\n})\nexport class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit {\n\n @Input() columnDefinitions: IColumnDefinition[];\n @Input() dataRows: IObservableCollection;\n @Input() resized: Observable;\n @Input() highlightedCells: {row: number, column: number}[] = [];\n @Input() blurredColumns: string[] = [];\n @Input() contextColumns: string[] = [];\n @Input() columnsLoading: string[] = [];\n @Input() showHeader: boolean = true;\n @Input() showDataTypeIcon: boolean = true;\n @Input() enableColumnReorder: boolean = false;\n @Input() enableAsyncPostRender: boolean = false;\n @Input() selectionModel: string | Slick.SelectionModel = '';\n @Input() plugins: Array> = [];\n @Input() enableEditing: boolean = false;\n @Input() topRowNumber: number;\n\n @Input() overrideCellFn: (rowNumber, columnId, value?, data?) => string;\n @Input() isColumnEditable: (column: number) => boolean;\n @Input() isCellEditValid: (row: number, column: number, newValue: any) => boolean;\n\n @Output() loadFinished: EventEmitter = new EventEmitter();\n @Output() editingFinished: EventEmitter = new EventEmitter();\n @Output() contextMenu: EventEmitter = new EventEmitter();\n @Output() topRowNumberChange: EventEmitter = new EventEmitter();\n\n @Output() activeCellChanged: EventEmitter<{row: number, column: number}> = new EventEmitter<{row: number, column: number}>();\n @Output() cellEditBegin: EventEmitter<{row: number, column: number }> = new EventEmitter<{row: number, column: number}>();\n @Output() cellEditExit: EventEmitter<{row: number, column: number, newValue: any}> = new EventEmitter<{row: number, column: number, newValue: any}>();\n @Output() rowEditBegin: EventEmitter<{row: number}> = new EventEmitter<{row: number}>();\n @Output() rowEditExit: EventEmitter<{row: number}> = new EventEmitter<{row: number}>();\n\n @HostListener('focus')\n onFocus(): void {\n if (this._grid) {\n this._grid.focus();\n }\n }\n\n private _grid: any;\n private _gridColumns: ISlickGridColumn[];\n private _columnNameToIndex: any;\n private _gridData: ISlickGridData;\n private _rowHeight = 29;\n private _resizeSubscription: Subscription;\n private _gridSyncSubscription: Subscription;\n private _topRow: number = 0;\n private _leftPx: number = 0;\n private _activeEditingRow: number;\n private _activeEditingRowHasChanges: boolean;\n /* andresse: commented out 11/1/2016 due to minification issues\n private _finishGridEditingFn: (e: any, args: any) => void;\n */\n\n ////////// Constructor and Angular functions //////////////////////////////\n\n constructor(@Inject(forwardRef(() => ElementRef)) private _el,\n @Optional() @Inject(forwardRef(() => GridSyncService)) private _gridSyncService) {\n this._gridData = {\n getLength: (): number => {\n return this.dataRows && this._gridColumns ? this.dataRows.getLength() : 0;\n },\n getItem: (index): any => {\n return SlickGrid.getDataWithSchema(this.dataRows.at(index), this._gridColumns);\n },\n getRange: (start, end): any => {\n return !this.dataRows ? undefined : this.dataRows.getRange(start, end).map(d => {\n return SlickGrid.getDataWithSchema(d, this._gridColumns);\n });\n },\n getItemMetadata: undefined\n };\n }\n\n ngOnChanges(changes: {[propName: string]: SimpleChange}): void {\n let columnDefinitionChanges = changes['columnDefinitions'];\n let activeCell = this._grid ? this._grid.getActiveCell() : undefined;\n let hasGridStructureChanges = false;\n let wasEditing = this._grid ? !!this._grid.getCellEditor() : false;\n\n if (columnDefinitionChanges\n && !_.isEqual(columnDefinitionChanges.previousValue, columnDefinitionChanges.currentValue)) {\n this.updateSchema();\n if (!this._grid) {\n this.initGrid();\n } else {\n this._grid.resetActiveCell();\n this._grid.setColumns(this._gridColumns);\n }\n if (this._gridSyncService) {\n let gridColumnWidths: number[] = this._grid.getColumnWidths();\n this._gridSyncService.rowNumberColumnWidthPX = gridColumnWidths[0];\n this._gridSyncService.columnWidthPXs = gridColumnWidths.slice(1);\n }\n hasGridStructureChanges = true;\n\n if (!columnDefinitionChanges.currentValue || columnDefinitionChanges.currentValue.length === 0) {\n activeCell = undefined;\n }\n if (activeCell) {\n let columnThatContainedActiveCell = columnDefinitionChanges.previousValue[Math.max(activeCell.cell - 1, 0)];\n let newActiveColumnIndex = columnThatContainedActiveCell\n ? columnDefinitionChanges.currentValue.findIndex(c => c.id === columnThatContainedActiveCell.id)\n : -1;\n activeCell.cell = newActiveColumnIndex !== -1 ? newActiveColumnIndex + 1 : 0;\n }\n }\n\n if (changes['dataRows']\n || (changes['highlightedCells'] && !_.isEqual(changes['highlightedCells'].currentValue, changes['highlightedCells'].previousValue))\n || (changes['blurredColumns'] && !_.isEqual(changes['blurredColumns'].currentValue, changes['blurredColumns'].previousValue))\n || (changes['columnsLoading'] && !_.isEqual(changes['columnsLoading'].currentValue, changes['columnsLoading'].previousValue))) {\n this.setCallbackOnDataRowsChanged();\n this._grid.updateRowCount();\n this._grid.setColumns(this._grid.getColumns());\n this._grid.invalidateAllRows();\n this._grid.render();\n if (this._gridSyncService) {\n this._gridSyncService.rowNumberColumnWidthPX = this._grid.getColumnWidths()[0];\n }\n hasGridStructureChanges = true;\n }\n\n if (hasGridStructureChanges) {\n if (activeCell) {\n this._grid.setActiveCell(activeCell.row, activeCell.cell);\n } else {\n this._grid.resetActiveCell();\n }\n }\n\n if (wasEditing && hasGridStructureChanges) {\n this._grid.editActiveCell();\n }\n\n /* andresse: commented out 11/1/2016 due to minification issues\n if (changes['editableColumnIds']) {\n let newValue = changes['editableColumnIds'].currentValue;\n if (!_.isEqual(newValue, changes['editableColumnIds'].previousValue)) {\n this._grid.onKeyDown.unsubscribe(this.finishGridEditingFn);\n if (newValue && newValue.length > 0) {\n this._grid.onKeyDown.subscribe(this.finishGridEditingFn);\n let firstEditableColumn = this._grid.getColumnIndex(newValue[0]) + 1;\n let rowToFocus = activeCell ? activeCell.row : this._grid.getViewport().top;\n this._grid.gotoCell(rowToFocus, firstEditableColumn, true);\n }\n }\n }\n */\n }\n\n ngOnInit(): void {\n // ngOnInit() will be called *after* the first time ngOnChanges() is called\n // so, grid must be there already\n if (this.topRowNumber === undefined) {\n this.topRowNumber = 0;\n }\n this._grid.scrollRowToTop(this.topRowNumber);\n\n if (this.resized) {\n // Re-rendering the grid is expensive. Throttle so we only do so every 100ms.\n this.resized.throttleTime(100)\n .subscribe(() => this.onResize());\n }\n\n // subscribe to slick events\n // https://github.com/mleibman/SlickGrid/wiki/Grid-Events\n this.subscribeToScroll();\n this.subscribeToCellChanged();\n this.subscribeToBeforeEditCell();\n this.subscribeToContextMenu();\n this.subscribeToActiveCellChanged();\n\n this._activeEditingRowHasChanges = false;\n }\n\n ngAfterViewInit(): void {\n this.loadFinished.emit();\n }\n\n ngOnDestroy(): void {\n if (this._resizeSubscription !== undefined) {\n this._resizeSubscription.unsubscribe();\n }\n if (this._gridSyncSubscription !== undefined) {\n this._gridSyncSubscription.unsubscribe();\n }\n }\n\n ////////// Public functions - Add public API functions here //////////////\n\n // Enables editing on the grid\n public enterEditSession(): void {\n this.changeEditSession(true);\n }\n\n // Disables editing on the grid\n public endEditSession(): void {\n this.changeEditSession(false);\n }\n\n // Called whenever the grid's selected rows change \n // Event args: { rows: number[] }\n public get onSelectedRowsChanged(): ISlickEvent {\n return this._grid.onSelectedRowsChanged;\n }\n\n // Returns an array of row indices corresponding to the currently selected rows.\n public getSelectedRows(): number[] {\n return this._grid.getSelectedRows();\n }\n\n // Gets the column index of the column with the given name\n public getColumnIndex(name: string): number {\n return this._columnNameToIndex[name];\n }\n\n // Gets a ISlickRange corresponding to the current selection on the grid\n public getSelectedRanges(): ISlickRange[] {\n if (this._gridSyncService && this._gridSyncService.selectionModel) {\n return this._gridSyncService.selectionModel.getSelectedRanges();\n }\n }\n\n // Registers a Slick plugin with the given name\n public registerPlugin(plugin: Slick.Plugin | string): void {\n if (typeof plugin === 'object') {\n this._grid.registerPlugin(plugin);\n } else if (typeof plugin === 'string' && Slick[plugin] && typeof Slick[plugin] === 'function') {\n this._grid.registerPlugin(new Slick[plugin]);\n } else {\n console.error(`Tried to register plugin ${plugin}, but none was found to be attached to Slick Grid or it was not a function.\n Please extend the Slick with the plugin as a function before registering`);\n }\n }\n\n // Set this grid to be the active grid\n public setActive(): void {\n this._grid.setActiveCell(0, 1);\n if (this._gridSyncService && this._gridSyncService.selectionModel) {\n this._gridSyncService.selectionModel.setSelectedRanges([new Slick.Range(0, 0, 0, 0)]);\n }\n }\n\n // Set the grid's selection\n public set selection(range: ISlickRange[] | boolean) {\n if (typeof range === 'boolean') {\n if (range) {\n this._gridSyncService.selectionModel.setSelectedRanges(\n [new Slick.Range(0, 0, this._grid.getDataLength() - 1, this._grid.getColumns().length - 1)]\n );\n } else {\n this._gridSyncService.selectionModel.clearSelection();\n }\n } else {\n this._gridSyncService.selectionModel.setSelectedRanges(range);\n }\n }\n\n // Add a context menu to SlickGrid\n public subscribeToContextMenu(): void {\n const self = this;\n this._grid.onContextMenu.subscribe(function (event): void {\n event.preventDefault();\n self.contextMenu.emit(event);\n });\n }\n\n ////////// Private functions //////////////////////////////////////////////\n\n private initGrid(): void {\n // https://github.com/mleibman/SlickGrid/wiki/Grid-Options\n let options = {\n enableCellNavigation: true,\n enableColumnReorder: this.enableColumnReorder,\n renderRowWithRange: true,\n showRowNumber: true,\n showDataTypeIcon: this.showDataTypeIcon,\n showHeader: this.showHeader,\n rowHeight: this._rowHeight,\n defaultColumnWidth: 120,\n editable: this.enableEditing,\n autoEdit: this.enableEditing,\n enableAddRow: false, // TODO change when we support enableAddRow\n enableAsyncPostRender: this.enableAsyncPostRender,\n editorFactory: {\n getEditor: this.getColumnEditor\n },\n formatterFactory: {\n getFormatter: this.getFormatter\n }\n };\n\n this._grid = new Slick.Grid(\n this._el.nativeElement.getElementsByClassName('grid')[0],\n this._gridData,\n this._gridColumns,\n options);\n\n if (this._gridSyncService) {\n if (this.selectionModel) {\n if (typeof this.selectionModel === 'object') {\n this._gridSyncService.underlyingSelectionModel = this.selectionModel;\n this._grid.setSelectionModel(this._gridSyncService.selectionModel);\n } else if (typeof this.selectionModel === 'string' && Slick[this.selectionModel] && typeof Slick[this.selectionModel] === 'function') {\n this._gridSyncService.underlyingSelectionModel = new Slick[this.selectionModel]();\n this._grid.setSelectionModel(this._gridSyncService.selectionModel);\n } else {\n console.error(`Tried to register selection model ${this.selectionModel}, \n but none was found to be attached to Slick Grid or it was not a function.\n Please extend the Slick with the selection model as a function before registering`);\n }\n }\n this._gridSyncService.scrollBarWidthPX = this._grid.getScrollbarDimensions().width;\n this._gridSyncSubscription = this._gridSyncService.updated\n .filter(p => p === 'columnWidthPXs')\n .debounceTime(10)\n .subscribe(p => {\n this.updateColumnWidths();\n });\n }\n\n for (let plugin of this.plugins) {\n this.registerPlugin(plugin);\n }\n\n this._columnNameToIndex = {};\n for (let i = 0; i < this._gridColumns.length; i++) {\n this._columnNameToIndex[this._gridColumns[i].name] = i;\n }\n\n this.onResize();\n }\n\n private changeEditSession(enabled: boolean): void {\n this.enableEditing = enabled;\n let options: any = this._grid.getOptions();\n options.editable = enabled;\n options.enableAddRow = false; // TODO change to \" options.enableAddRow = false;\" when we support enableAddRow\n this._grid.setOptions(options);\n }\n\n private handleEditorCellChange(rowNumber: number): void {\n // Need explicit undefined check due to row 0\n let firstTimeEditingRow = this._activeEditingRow === undefined;\n let editingNewRow = rowNumber !== this._activeEditingRow;\n\n // Check if we have existing edits on a row and we are leaving that row\n if (!firstTimeEditingRow && editingNewRow && this._activeEditingRowHasChanges) {\n this._activeEditingRowHasChanges = false;\n this.rowEditExit.emit({\n row: this._activeEditingRow\n });\n this._activeEditingRow = undefined;\n }\n\n // Check if we are entering a new row\n if (firstTimeEditingRow || editingNewRow) {\n this._activeEditingRow = rowNumber;\n this.rowEditBegin.emit({\n row: rowNumber\n });\n }\n }\n\n private static getDataWithSchema(data: IGridDataRow, columns: ISlickGridColumn[]): any {\n let dataWithSchema = {};\n for (let i = 0; i < columns.length; i++) {\n dataWithSchema[columns[i].field] = data.values[i];\n }\n\n return dataWithSchema;\n }\n\n private onResize(): void {\n if (this._grid !== undefined) {\n // this will make sure the grid header and body to be re-rendered\n this._grid.resizeCanvas();\n }\n }\n\n private invalidateRange(start: number, end: number): void {\n let refreshedRows = _.range(start, end);\n this._grid.invalidateRows(refreshedRows, true);\n this._grid.render();\n }\n\n /* tslint:disable:member-ordering */\n private getColumnEditor = (column: any): any => {\n if (this.isColumnEditable && !this.isColumnEditable(this.getColumnIndex(column.name))) {\n return undefined;\n }\n\n let columnId = column.id;\n let isColumnLoading = this.columnsLoading && this.columnsLoading.indexOf(columnId) !== -1;\n let canEditColumn = columnId !== undefined && !isColumnLoading;\n if (canEditColumn) {\n return getOverridableTextEditorClass(this);\n }\n return undefined;\n };\n\n private getFormatter = (column: any): any => {\n if (column.isRowNumber === true) {\n return undefined; // use default formatter for row number cell\n }\n return (row, cell, value, columnDef, dataContext) => {\n let columnId = cell > 0 && this.columnDefinitions.length > cell - 1 ? this.columnDefinitions[cell - 1].id : undefined;\n if (columnId) {\n let columnType = this.columnDefinitions[cell - 1].type;\n let isHighlighted = this.highlightedCells && !!this.highlightedCells.find(c => c.row === row && c.column + 1 === cell);\n let isColumnLoading = this.columnsLoading && this.columnsLoading.indexOf(columnId) !== -1;\n let isShadowed = this.blurredColumns && !!this.blurredColumns.find(c => c === columnId);\n let isContext = this.contextColumns && !!this.contextColumns.find(c => c === columnId);\n let overrideValue = this.overrideCellFn && this.overrideCellFn(row, columnId, value, dataContext);\n\n let valueToDisplay = (value + '').replace(/&/g, '&').replace(//g, '>');\n let cellClasses = 'grid-cell-value-container';\n if (columnType !== FieldType.String) {\n cellClasses += ' right-justified';\n }\n\n /* tslint:disable:no-null-keyword */\n let valueMissing = value === undefined || value === null;\n /* tslint:disable:no-null-keyword */\n let isOverridden = overrideValue !== undefined && overrideValue !== null;\n\n if (valueMissing && !isOverridden) {\n cellClasses += ' missing-value';\n }\n\n if (isColumnLoading === true && !isOverridden) {\n cellClasses += ' loading-cell';\n valueToDisplay = '';\n }\n\n if (isOverridden) {\n cellClasses += ' override-cell';\n valueToDisplay = overrideValue;\n }\n\n if (isContext) {\n cellClasses += ' context';\n }\n\n if (isHighlighted === true) {\n cellClasses += ' highlighted';\n }\n\n if (isShadowed && !isHighlighted && !isOverridden) {\n cellClasses += ' blurred';\n }\n\n return '' + valueToDisplay + '';\n }\n\n };\n };\n\n private subscribeToScroll(): void {\n this._grid.onScroll.subscribe((e, args) => {\n let scrollTop = args.scrollTop;\n let scrollRow = Math.floor(scrollTop / this._rowHeight);\n scrollRow = scrollRow < 0 ? 0 : scrollRow;\n if (scrollRow !== this._topRow) {\n this._topRow = scrollRow;\n this.topRowNumberChange.emit(scrollRow);\n }\n\n if (this._gridSyncService && args.scrollLeft !== this._leftPx) {\n this._leftPx = args.scrollLeft;\n this._gridSyncService.scrollLeftPX = this._leftPx;\n }\n });\n }\n\n private subscribeToCellChanged(): void {\n this._grid.onCellChange.subscribe((e, args) => {\n let modifiedColumn = this.columnDefinitions[args.cell - 1];\n this._activeEditingRowHasChanges = true;\n this.cellEditExit.emit({\n column: this.getColumnIndex(modifiedColumn.name),\n row: args.row,\n newValue: args.item[modifiedColumn.id]\n });\n });\n }\n\n private subscribeToBeforeEditCell(): void {\n this._grid.onBeforeEditCell.subscribe((e, args) => {\n this.handleEditorCellChange(args.row);\n this.cellEditBegin.emit({\n column: this.getColumnIndex(args.column.name),\n row: args.row\n });\n });\n }\n\n private subscribeToActiveCellChanged (): void {\n // Subscribe to all active cell changes to be able to catch when we tab to the header on the next row\n this._grid.onActiveCellChanged.subscribe((e, args) => {\n // Emit that we've changed active cells\n this.activeCellChanged.emit({row: args.row, column: args.cell});\n\n // If editing is disabled or this isn't the header, ignore. \n // We assume the header is always column 0, as it is hardcoded to be that way in initGrid\n if (!this.enableEditing || args.cell !== 0) {\n return;\n }\n\n let rowNumber = args.row;\n let haveRowEdits = this._activeEditingRow !== undefined;\n let tabbedToNextRow = rowNumber !== this._activeEditingRow; // Need explicit undefined check due to row 0\n\n // If we tabbed from an edited row to the header of the next row, emit a rowEditExit\n if (haveRowEdits && tabbedToNextRow && this._activeEditingRowHasChanges) {\n this.rowEditExit.emit();\n this._activeEditingRow = undefined;\n this._activeEditingRowHasChanges = false;\n }\n });\n }\n\n private updateColumnWidths(): void {\n for (let i = 0; i < this._gridColumns.length; i++) {\n this._gridColumns[i].width = this._gridSyncService.columnWidthPXs[i];\n }\n this._grid.setColumnWidths(this._gridColumns, true);\n }\n\n private updateSchema(): void {\n if (!this.columnDefinitions) {\n return;\n }\n\n this._gridColumns = this.columnDefinitions.map((c, i) => {\n let column: ISlickGridColumn = {\n name: c.name,\n field: c.id,\n id: c.id ? c.id : c.name,\n icon: this.getImagePathForDataType(c.type),\n resizable: true\n };\n\n if (c.asyncPostRender) {\n column.asyncPostRender = c.asyncPostRender;\n }\n\n if (c.formatter) {\n column.formatter = c.formatter;\n }\n\n if (this._gridSyncService) {\n let columnWidth = this._gridSyncService.columnWidthPXs[i];\n column.width = columnWidth ? columnWidth : undefined;\n column.minWidth = this._gridSyncService.columnMinWidthPX;\n }\n\n return column;\n });\n }\n\n private getImagePathForDataType(type: FieldType): string {\n const resourcePath = './resources/';\n switch (type) {\n case FieldType.String:\n return resourcePath + 'col-type-string.svg';\n case FieldType.Boolean:\n return resourcePath + 'col-type-boolean.svg';\n case FieldType.Integer:\n case FieldType.Decimal:\n return resourcePath + 'col-type-number.svg';\n case FieldType.Date:\n return resourcePath + 'col-type-timedate.svg';\n case FieldType.Unknown:\n default:\n return resourcePath + 'circle.svg';\n }\n }\n\n private setCallbackOnDataRowsChanged(): void {\n if (this.dataRows) {\n // We must wait until we get the first set of dataRows before we enable editing or slickgrid will complain\n if (this.enableEditing) {\n this.enterEditSession();\n }\n\n this.dataRows.setCollectionChangedCallback((change: CollectionChange, startIndex: number, count: number) => {\n this.renderGridDataRowsRange(startIndex, count);\n });\n }\n }\n\n private renderGridDataRowsRange(startIndex: number, count: number): void {\n let editor = this._grid.getCellEditor();\n let oldValue = editor ? editor.getValue() : undefined;\n let wasValueChanged = editor ? editor.isValueChanged() : false;\n this.invalidateRange(startIndex, startIndex + count);\n let activeCell = this._grid.getActiveCell();\n if (editor && activeCell.row >= startIndex && activeCell.row < startIndex + count) {\n if (oldValue && wasValueChanged) {\n editor.setValue(oldValue);\n }\n }\n }\n\n /* andresse: commented out 11/1/2016 due to minification issues\n private get finishGridEditingFn(): (e: any, args: any) => void {\n if (this._finishGridEditingFn === undefined) {\n this._finishGridEditingFn = ((e: any, args: any) => {\n if (e.ctrlKey === true\n && e.keyCode === 13\n && this.editableColumnIds\n && this.editableColumnIds.find(id => id === args.columnDef.id)) {\n // pressed [Ctrl + Enter] in the editing area\n this.editingFinished.next(undefined);\n }\n }).bind(this);\n }\n\n return this._finishGridEditingFn;\n }\n */\n}\n"]} \ No newline at end of file diff --git a/out/js/virtualizedCollection.js.map b/out/js/virtualizedCollection.js.map index b93f544..70adca8 100644 --- a/out/js/virtualizedCollection.js.map +++ b/out/js/virtualizedCollection.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/virtualizedCollection.ts"],"names":[],"mappings":"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","file":"virtualizedCollection.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IObservableCollection, CollectionChange } from './interfaces';\r\n\r\nclass LoadCancellationToken {\r\n isCancelled: boolean;\r\n}\r\n\r\nclass DataWindow {\r\n private _dataSourceLength: number;\r\n private _data: TData[];\r\n private _length: number = 0;\r\n private _offsetFromDataSource: number = -1;\r\n\r\n private loadFunction: (offset: number, count: number) => Promise;\r\n private lastLoadCancellationToken: LoadCancellationToken;\r\n private loadCompleteCallback: (start: number, end: number) => void;\r\n private placeholderItemGenerator: (index: number) => TData;\r\n\r\n constructor(dataSourceLength: number,\r\n loadFunction: (offset: number, count: number) => Promise,\r\n placeholderItemGenerator: (index: number) => TData,\r\n loadCompleteCallback: (start: number, end: number) => void) {\r\n this._dataSourceLength = dataSourceLength;\r\n this.loadFunction = loadFunction;\r\n this.placeholderItemGenerator = placeholderItemGenerator;\r\n this.loadCompleteCallback = loadCompleteCallback;\r\n }\r\n\r\n getStartIndex(): number {\r\n return this._offsetFromDataSource;\r\n }\r\n\r\n getEndIndex(): number {\r\n return this._offsetFromDataSource + this._length;\r\n }\r\n\r\n contains(dataSourceIndex: number): boolean {\r\n return dataSourceIndex >= this.getStartIndex() && dataSourceIndex < this.getEndIndex();\r\n }\r\n\r\n getItem(index: number): TData {\r\n if (!this._data) {\r\n return this.placeholderItemGenerator(index);\r\n }\r\n return this._data[index - this._offsetFromDataSource];\r\n }\r\n\r\n positionWindow(offset: number, length: number): void {\r\n this._offsetFromDataSource = offset;\r\n this._length = length;\r\n this._data = undefined;\r\n\r\n if (this.lastLoadCancellationToken) {\r\n this.lastLoadCancellationToken.isCancelled = true;\r\n }\r\n\r\n if (length === 0) {\r\n return;\r\n }\r\n\r\n let cancellationToken = new LoadCancellationToken();\r\n this.lastLoadCancellationToken = cancellationToken;\r\n this.loadFunction(offset, length).then(data => {\r\n if (!cancellationToken.isCancelled) {\r\n this._data = data;\r\n this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport class VirtualizedCollection implements IObservableCollection {\r\n\r\n private _length: number;\r\n private _windowSize: number;\r\n private _bufferWindowBefore: DataWindow;\r\n private _window: DataWindow;\r\n private _bufferWindowAfter: DataWindow;\r\n\r\n private collectionChangedCallback: (change: CollectionChange, startIndex: number, count: number) => void;\r\n\r\n constructor(windowSize: number,\r\n length: number,\r\n loadFn: (offset: number, count: number) => Promise,\r\n private _placeHolderGenerator: (index: number) => TData) {\r\n this._windowSize = windowSize;\r\n this._length = length;\r\n\r\n let loadCompleteCallback = (start: number, end: number) => {\r\n if (this.collectionChangedCallback) {\r\n this.collectionChangedCallback(CollectionChange.ItemsReplaced, start, end - start);\r\n }\r\n };\r\n\r\n this._bufferWindowBefore = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\r\n this._window = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\r\n this._bufferWindowAfter = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\r\n }\r\n\r\n setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void {\r\n this.collectionChangedCallback = callback;\r\n }\r\n\r\n getLength(): number {\r\n return this._length;\r\n }\r\n\r\n at(index: number): TData {\r\n return this.getRange(index, index + 1)[0];\r\n }\r\n\r\n getRange(start: number, end: number): TData[] {\r\n\r\n // current data may contain placeholders\r\n let currentData = this.getRangeFromCurrent(start, end);\r\n\r\n // only shift window and make promise of refreshed data in following condition:\r\n if (start < this._bufferWindowBefore.getStartIndex() || end > this._bufferWindowAfter.getEndIndex()) {\r\n // jump, reset\r\n this.resetWindowsAroundIndex(start);\r\n } else if (end <= this._bufferWindowBefore.getEndIndex()) {\r\n // scroll up, shift up\r\n let windowToRecycle = this._bufferWindowAfter;\r\n this._bufferWindowAfter = this._window;\r\n this._window = this._bufferWindowBefore;\r\n this._bufferWindowBefore = windowToRecycle;\r\n let newWindowOffset = Math.max(0, this._window.getStartIndex() - this._windowSize);\r\n\r\n this._bufferWindowBefore.positionWindow(newWindowOffset, this._window.getStartIndex() - newWindowOffset);\r\n } else if (start >= this._bufferWindowAfter.getStartIndex()) {\r\n // scroll down, shift down\r\n let windowToRecycle = this._bufferWindowBefore;\r\n this._bufferWindowBefore = this._window;\r\n this._window = this._bufferWindowAfter;\r\n this._bufferWindowAfter = windowToRecycle;\r\n let newWindowOffset = Math.min(this._window.getStartIndex() + this._windowSize, this._length);\r\n let newWindowLength = Math.min(this._length - newWindowOffset, this._windowSize);\r\n\r\n this._bufferWindowAfter.positionWindow(newWindowOffset, newWindowLength);\r\n }\r\n\r\n return currentData;\r\n }\r\n\r\n private getRangeFromCurrent(start: number, end: number): TData[] {\r\n let currentData = [];\r\n for (let i = 0; i < end - start; i++) {\r\n currentData.push(this.getDataFromCurrent(start + i));\r\n }\r\n\r\n return currentData;\r\n }\r\n\r\n private getDataFromCurrent(index: number): TData {\r\n if (this._bufferWindowBefore.contains(index)) {\r\n return this._bufferWindowBefore.getItem(index);\r\n } else if (this._bufferWindowAfter.contains(index)) {\r\n return this._bufferWindowAfter.getItem(index);\r\n } else if (this._window.contains(index)) {\r\n return this._window.getItem(index);\r\n }\r\n\r\n return this._placeHolderGenerator(index);\r\n }\r\n\r\n private resetWindowsAroundIndex(index: number): void {\r\n\r\n let bufferWindowBeforeStart = Math.max(0, index - this._windowSize * 1.5);\r\n let bufferWindowBeforeEnd = Math.max(0, index - this._windowSize / 2);\r\n this._bufferWindowBefore.positionWindow(bufferWindowBeforeStart, bufferWindowBeforeEnd - bufferWindowBeforeStart);\r\n\r\n let mainWindowStart = bufferWindowBeforeEnd;\r\n let mainWindowEnd = Math.min(mainWindowStart + this._windowSize, this._length);\r\n this._window.positionWindow(mainWindowStart, mainWindowEnd - mainWindowStart);\r\n\r\n let bufferWindowAfterStart = mainWindowEnd;\r\n let bufferWindowAfterEnd = Math.min(bufferWindowAfterStart + this._windowSize, this._length);\r\n this._bufferWindowAfter.positionWindow(bufferWindowAfterStart, bufferWindowAfterEnd - bufferWindowAfterStart);\r\n }\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["js/virtualizedCollection.ts"],"names":[],"mappings":"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","file":"virtualizedCollection.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IObservableCollection, CollectionChange } from './interfaces';\n\nclass LoadCancellationToken {\n isCancelled: boolean;\n}\n\nclass DataWindow {\n private _dataSourceLength: number;\n private _data: TData[];\n private _length: number = 0;\n private _offsetFromDataSource: number = -1;\n\n private loadFunction: (offset: number, count: number) => Promise;\n private lastLoadCancellationToken: LoadCancellationToken;\n private loadCompleteCallback: (start: number, end: number) => void;\n private placeholderItemGenerator: (index: number) => TData;\n\n constructor(dataSourceLength: number,\n loadFunction: (offset: number, count: number) => Promise,\n placeholderItemGenerator: (index: number) => TData,\n loadCompleteCallback: (start: number, end: number) => void) {\n this._dataSourceLength = dataSourceLength;\n this.loadFunction = loadFunction;\n this.placeholderItemGenerator = placeholderItemGenerator;\n this.loadCompleteCallback = loadCompleteCallback;\n }\n\n getStartIndex(): number {\n return this._offsetFromDataSource;\n }\n\n getEndIndex(): number {\n return this._offsetFromDataSource + this._length;\n }\n\n contains(dataSourceIndex: number): boolean {\n return dataSourceIndex >= this.getStartIndex() && dataSourceIndex < this.getEndIndex();\n }\n\n getItem(index: number): TData {\n if (!this._data) {\n return this.placeholderItemGenerator(index);\n }\n return this._data[index - this._offsetFromDataSource];\n }\n\n positionWindow(offset: number, length: number): void {\n this._offsetFromDataSource = offset;\n this._length = length;\n this._data = undefined;\n\n if (this.lastLoadCancellationToken) {\n this.lastLoadCancellationToken.isCancelled = true;\n }\n\n if (length === 0) {\n return;\n }\n\n let cancellationToken = new LoadCancellationToken();\n this.lastLoadCancellationToken = cancellationToken;\n this.loadFunction(offset, length).then(data => {\n if (!cancellationToken.isCancelled) {\n this._data = data;\n this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length);\n }\n });\n }\n}\n\nexport class VirtualizedCollection implements IObservableCollection {\n\n private _length: number;\n private _windowSize: number;\n private _bufferWindowBefore: DataWindow;\n private _window: DataWindow;\n private _bufferWindowAfter: DataWindow;\n\n private collectionChangedCallback: (change: CollectionChange, startIndex: number, count: number) => void;\n\n constructor(windowSize: number,\n length: number,\n loadFn: (offset: number, count: number) => Promise,\n private _placeHolderGenerator: (index: number) => TData) {\n this._windowSize = windowSize;\n this._length = length;\n\n let loadCompleteCallback = (start: number, end: number) => {\n if (this.collectionChangedCallback) {\n this.collectionChangedCallback(CollectionChange.ItemsReplaced, start, end - start);\n }\n };\n\n this._bufferWindowBefore = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\n this._window = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\n this._bufferWindowAfter = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback);\n }\n\n setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void {\n this.collectionChangedCallback = callback;\n }\n\n getLength(): number {\n return this._length;\n }\n\n at(index: number): TData {\n return this.getRange(index, index + 1)[0];\n }\n\n getRange(start: number, end: number): TData[] {\n\n // current data may contain placeholders\n let currentData = this.getRangeFromCurrent(start, end);\n\n // only shift window and make promise of refreshed data in following condition:\n if (start < this._bufferWindowBefore.getStartIndex() || end > this._bufferWindowAfter.getEndIndex()) {\n // jump, reset\n this.resetWindowsAroundIndex(start);\n } else if (end <= this._bufferWindowBefore.getEndIndex()) {\n // scroll up, shift up\n let windowToRecycle = this._bufferWindowAfter;\n this._bufferWindowAfter = this._window;\n this._window = this._bufferWindowBefore;\n this._bufferWindowBefore = windowToRecycle;\n let newWindowOffset = Math.max(0, this._window.getStartIndex() - this._windowSize);\n\n this._bufferWindowBefore.positionWindow(newWindowOffset, this._window.getStartIndex() - newWindowOffset);\n } else if (start >= this._bufferWindowAfter.getStartIndex()) {\n // scroll down, shift down\n let windowToRecycle = this._bufferWindowBefore;\n this._bufferWindowBefore = this._window;\n this._window = this._bufferWindowAfter;\n this._bufferWindowAfter = windowToRecycle;\n let newWindowOffset = Math.min(this._window.getStartIndex() + this._windowSize, this._length);\n let newWindowLength = Math.min(this._length - newWindowOffset, this._windowSize);\n\n this._bufferWindowAfter.positionWindow(newWindowOffset, newWindowLength);\n }\n\n return currentData;\n }\n\n private getRangeFromCurrent(start: number, end: number): TData[] {\n let currentData = [];\n for (let i = 0; i < end - start; i++) {\n currentData.push(this.getDataFromCurrent(start + i));\n }\n\n return currentData;\n }\n\n private getDataFromCurrent(index: number): TData {\n if (this._bufferWindowBefore.contains(index)) {\n return this._bufferWindowBefore.getItem(index);\n } else if (this._bufferWindowAfter.contains(index)) {\n return this._bufferWindowAfter.getItem(index);\n } else if (this._window.contains(index)) {\n return this._window.getItem(index);\n }\n\n return this._placeHolderGenerator(index);\n }\n\n private resetWindowsAroundIndex(index: number): void {\n\n let bufferWindowBeforeStart = Math.max(0, index - this._windowSize * 1.5);\n let bufferWindowBeforeEnd = Math.max(0, index - this._windowSize / 2);\n this._bufferWindowBefore.positionWindow(bufferWindowBeforeStart, bufferWindowBeforeEnd - bufferWindowBeforeStart);\n\n let mainWindowStart = bufferWindowBeforeEnd;\n let mainWindowEnd = Math.min(mainWindowStart + this._windowSize, this._length);\n this._window.positionWindow(mainWindowStart, mainWindowEnd - mainWindowStart);\n\n let bufferWindowAfterStart = mainWindowEnd;\n let bufferWindowAfterEnd = Math.min(bufferWindowAfterStart + this._windowSize, this._length);\n this._bufferWindowAfter.positionWindow(bufferWindowAfterStart, bufferWindowAfterEnd - bufferWindowAfterStart);\n }\n}\n"]} \ No newline at end of file