From 992a8fead6ae1792b5c7dc0934af6037a21839a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Castanheira=20Sim=C3=B5es?= Date: Mon, 7 Apr 2025 14:41:33 +0100 Subject: [PATCH] feat: add selectable rows and selection change event to extensible table component --- .../extensible-table.component.html | 25 +++++++++++++++++++ .../extensible-table.component.ts | 19 +++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html index 471aad0f15..4a8f44b324 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html @@ -3,8 +3,33 @@ [rows]="data" [count]="recordsTotal" [list]="list" + [selectionType]="selectable ? _selectionType : undefined" (activate)="tableActivate.emit($event)" + (select)="onSelect($event)" + [selected]="selected" > + @if(selectable) { + + +
+ +
+
+ + +
+ +
+
+ +
+
+ +
+ } @if (actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)) { implements OnChanges, AfterViewIn @Output() tableActivate = new EventEmitter(); + @Input() selectable = false; + + @Input() set selectionType(value: SelectionType | string) { + this._selectionType = typeof value === 'string' ? SelectionType[value] : value; + } + _selectionType: SelectionType = SelectionType.multiClick; + + + @Input() selected: any[] = []; + @Output() selectionChange = new EventEmitter(); + hasAtLeastOnePermittedAction: boolean; readonly columnWidths!: number[]; @@ -229,6 +240,12 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn return visibleActions.length > 0; } + onSelect({ selected }) { + this.selected.splice(0, this.selected.length); + this.selected.push(...selected); + this.selectionChange.emit(selected); + } + ngAfterViewInit(): void { this.list?.requestStatus$?.pipe(filter(status => status === 'loading')).subscribe(() => { this.data = [];