diff --git a/wowup-electron/src/app/business-objects/get-addon-list-item.ts b/wowup-electron/src/app/business-objects/get-addon-list-item.ts index ccf00519..298831f4 100644 --- a/wowup-electron/src/app/business-objects/get-addon-list-item.ts +++ b/wowup-electron/src/app/business-objects/get-addon-list-item.ts @@ -18,6 +18,10 @@ export class GetAddonListItem { public installState: AddonInstallState = AddonInstallState.Unknown; + public get externalId(): string { + return this.searchResult.externalId; + } + public constructor(searchResult: AddonSearchResult, defaultAddonChannel: AddonChannelType) { this.searchResult = searchResult; this.author = this.searchResult.author; @@ -28,7 +32,7 @@ export class GetAddonListItem { const latestFile = SearchResults.getLatestFile(searchResult, defaultAddonChannel); this.latestAddonChannel = latestFile.channelType; - + this.releasedAt = new Date(latestFile?.releaseDate).getTime(); } } diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.html b/wowup-electron/src/app/pages/get-addons/get-addons.component.html index 0388e5e9..fe822d39 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.html +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.html @@ -49,7 +49,7 @@ + (rowClicked)="onRowClicked($event)" (gridReady)="onGridReady($event)"> diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts index a2fcf928..14a8098c 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts @@ -1,4 +1,12 @@ -import { ColDef, ColumnApi, GridApi, GridReadyEvent, RowDoubleClickedEvent } from "ag-grid-community"; +import { + ColDef, + ColumnApi, + GridApi, + GridReadyEvent, + RowClickedEvent, + RowDoubleClickedEvent, + RowNode, +} from "ag-grid-community"; import * as _ from "lodash"; import { BehaviorSubject, combineLatest, from, Observable, of, Subscription } from "rxjs"; import { catchError, filter, first, map } from "rxjs/operators"; @@ -50,6 +58,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy { private _lazyLoaded = false; private _isBusySubject = new BehaviorSubject(true); private _rowDataSrc = new BehaviorSubject([]); + private _lastSelectionState: RowNode[] = []; public columnDefs: ColDef[] = []; public rowData$ = this._rowDataSrc.asObservable(); @@ -159,8 +168,25 @@ export class GetAddonsComponent implements OnInit, OnDestroy { this.columnDefs = this.createColumns(); } + public onRowClicked(event: RowClickedEvent): void { + const selectedNodes = event.api.getSelectedNodes(); + + if ( + selectedNodes.length === 1 && + this._lastSelectionState.length === 1 && + event.node.data.externalId === this._lastSelectionState[0].data.externalId && + event.node.data.providerName === this._lastSelectionState[0].data.providerName + ) { + event.node.setSelected(false); + this._lastSelectionState = []; + } else { + this._lastSelectionState = [...selectedNodes]; + } + } + public onRowDoubleClicked(evt: RowDoubleClickedEvent): void { this.openDetailDialog(evt.data.searchResult, this.defaultAddonChannel); + evt.node.setSelected(true); } public onGridReady(params: GridReadyEvent): void { diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts index 15636f17..5e56cb1d 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts @@ -71,6 +71,7 @@ export class MyAddonsComponent implements OnInit, OnDestroy, AfterViewInit { private _lazyLoaded = false; private _isRefreshing = false; private _baseRowData: AddonViewModel[] = []; + private _lastSelectionState: RowNode[] = []; public readonly operationError$ = this._operationErrorSrc.asObservable(); @@ -346,23 +347,6 @@ export class MyAddonsComponent implements OnInit, OnDestroy, AfterViewInit { }); } - private _lastSelectionState: RowNode[] = []; - - public onRowClicked(event: RowClickedEvent): void { - const selectedNodes = event.api.getSelectedNodes(); - - if ( - selectedNodes.length === 1 && - this._lastSelectionState.length === 1 && - event.node.data.addon.id === this._lastSelectionState[0].data.addon.id - ) { - event.node.setSelected(false); - this._lastSelectionState = []; - } else { - this._lastSelectionState = [...selectedNodes]; - } - } - public selectAllRows(event: KeyboardEvent): void { event.preventDefault(); if ((event.ctrlKey && this.electronService.isMac) || (event.metaKey && !this.electronService.isMac)) { @@ -662,6 +646,21 @@ export class MyAddonsComponent implements OnInit, OnDestroy, AfterViewInit { this.onClickAutoUpdateAddons([listItem]); } + public onRowClicked(event: RowClickedEvent): void { + const selectedNodes = event.api.getSelectedNodes(); + + if ( + selectedNodes.length === 1 && + this._lastSelectionState.length === 1 && + event.node.data.addon.id === this._lastSelectionState[0].data.addon.id + ) { + event.node.setSelected(false); + this._lastSelectionState = []; + } else { + this._lastSelectionState = [...selectedNodes]; + } + } + public onRowDoubleClicked(evt: RowDoubleClickedEvent): void { this._dialogFactory.getAddonDetailsDialog(evt.data); evt.node.setSelected(true);