Browse Source

Merge pull request #23651 from abpframework/auto-merge/rel-9-3/3964

Merge branch dev with rel-9.3
pull/23656/head
Ma Liming 5 months ago
committed by GitHub
parent
commit
d7a02b3ffd
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html
  2. 29
      npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts

8
npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html

@ -40,8 +40,9 @@
@if (actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)) { @if (actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)) {
<ngx-datatable-column <ngx-datatable-column
[name]="actionsText | abpLocalization" [name]="actionsText | abpLocalization"
[maxWidth]="columnWidths[0]" [maxWidth]="columnWidths[0] ?? undefined"
[width]="columnWidths[0]" [width]="columnWidths[0] ?? 200"
[canAutoResize]="!columnWidths[0]"
[sortable]="false" [sortable]="false"
> >
<ng-template let-row="row" let-i="rowIndex" ngx-datatable-cell-template> <ng-template let-row="row" let-i="rowIndex" ngx-datatable-cell-template>
@ -59,7 +60,8 @@
@for (prop of propList; track prop.name; let i = $index) { @for (prop of propList; track prop.name; let i = $index) {
<ngx-datatable-column <ngx-datatable-column
*abpVisible="prop.columnVisible(getInjected)" *abpVisible="prop.columnVisible(getInjected)"
[width]="columnWidths[i + 1] || 200" [width]="columnWidths[i + 1] ?? 200"
[canAutoResize]="!columnWidths[i + 1]"
[name]="(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization" [name]="(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization"
[prop]="prop.name" [prop]="prop.name"
[sortable]="prop.sortable" [sortable]="prop.sortable"

29
npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts

@ -3,6 +3,7 @@ import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
computed,
EventEmitter, EventEmitter,
inject, inject,
Injector, Injector,
@ -10,9 +11,11 @@ import {
LOCALE_ID, LOCALE_ID,
OnChanges, OnChanges,
Output, Output,
signal,
SimpleChanges, SimpleChanges,
TemplateRef, TemplateRef,
TrackByFunction, TrackByFunction,
ViewChild,
} from '@angular/core'; } from '@angular/core';
import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common'; import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
@ -97,7 +100,7 @@ export class ExtensibleTableComponent<R = any> implements OnChanges, AfterViewIn
@Input() recordsTotal!: number; @Input() recordsTotal!: number;
@Input() set actionsColumnWidth(width: number) { @Input() set actionsColumnWidth(width: number) {
this.setColumnWidths(width ? Number(width) : undefined); this._actionsColumnWidth.set(width ? Number(width) : undefined);
} }
@Input() actionsTemplate?: TemplateRef<any>; @Input() actionsTemplate?: TemplateRef<any>;
@ -117,14 +120,24 @@ export class ExtensibleTableComponent<R = any> implements OnChanges, AfterViewIn
hasAtLeastOnePermittedAction: boolean; hasAtLeastOnePermittedAction: boolean;
readonly columnWidths!: number[];
readonly propList: EntityPropList<R>; readonly propList: EntityPropList<R>;
readonly actionList: EntityActionList<R>; readonly actionList: EntityActionList<R>;
readonly trackByFn: TrackByFunction<EntityProp<R>> = (_, item) => item.name; readonly trackByFn: TrackByFunction<EntityProp<R>> = (_, item) => item.name;
// Signal for actions column width
private readonly _actionsColumnWidth = signal<number | undefined>(DEFAULT_ACTIONS_COLUMN_WIDTH);
readonly columnWidths = computed(() => {
const actionsColumn = this._actionsColumnWidth();
const widths = [actionsColumn];
this.propList.forEach(({ value: prop }) => {
widths.push(prop.columnWidth);
});
return widths;
});
constructor() { constructor() {
const extensions = this.#injector.get(ExtensionsService); const extensions = this.#injector.get(ExtensionsService);
const name = this.#injector.get(EXTENSIONS_IDENTIFIER); const name = this.#injector.get(EXTENSIONS_IDENTIFIER);
@ -136,15 +149,6 @@ export class ExtensibleTableComponent<R = any> implements OnChanges, AfterViewIn
this.permissionService.filterItemsByPolicy( this.permissionService.filterItemsByPolicy(
this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })), this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })),
).length > 0; ).length > 0;
this.setColumnWidths(DEFAULT_ACTIONS_COLUMN_WIDTH);
}
private setColumnWidths(actionsColumn: number | undefined) {
const widths = [actionsColumn];
this.propList.forEach(({ value: prop }) => {
widths.push(prop.columnWidth);
});
(this.columnWidths as any) = widths;
} }
private getIcon(value: boolean) { private getIcon(value: boolean) {
@ -212,6 +216,7 @@ export class ExtensibleTableComponent<R = any> implements OnChanges, AfterViewIn
return record; return record;
}); });
} }
isVisibleActions(rowData: any): boolean { isVisibleActions(rowData: any): boolean {

Loading…
Cancel
Save