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);