mirror of
https://github.com/WowUp/WowUp.git
synced 2026-04-23 07:17:00 -04:00
Single row de-select should work the same as my addons
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<ag-grid-angular class="wu-ag-table ag-theme-material" [hidden]="(showTable$ | async) === false"
|
||||
[rowData]="rowData$ | async" [columnDefs]="columnDefs" [columnTypes]="columnTypes" [rowSelection]="'single'"
|
||||
[frameworkComponents]="frameworkComponents" [rowHeight]="63" (rowDoubleClicked)="onRowDoubleClicked($event)"
|
||||
(gridReady)="onGridReady($event)">
|
||||
(rowClicked)="onRowClicked($event)" (gridReady)="onGridReady($event)">
|
||||
</ag-grid-angular>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -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<boolean>(true);
|
||||
private _rowDataSrc = new BehaviorSubject<GetAddonListItem[]>([]);
|
||||
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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user