Single row de-select should work the same as my addons

This commit is contained in:
jliddev
2021-03-15 12:03:44 -05:00
parent 7e7bace6f2
commit 07d0d315d3
4 changed files with 49 additions and 20 deletions

View File

@@ -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();
}
}

View File

@@ -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>

View File

@@ -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 {

View File

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