diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.html b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.html index ed33dca227..3b00b4c171 100644 --- a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.html +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.html @@ -51,7 +51,8 @@
@if (effectiveRowDetailTemplate) { - - - - - + @let detailRowHeight = effectiveRowDetailRowHeight(); + @if (detailRowHeight !== undefined) { + + + + + + } @else { + + + + + + } @@ -64,7 +75,7 @@ class="form-check-input table-check" type="checkbox" [checked]="allRowsSelected" - (change)="selectFn(!allRowsSelected)" + (change)="selectFn()" />
} @@ -136,17 +147,17 @@ [placement]="prop.tooltip.placement || 'auto'" container="body" [class.pointer]="prop.sortable" - (click)="prop.sortable && sortFn(column)" + (click)="prop.sortable && sortFn()" > {{ column.name }} } @else { - + {{ column.name }} } - + @if (!row['_' + prop.name].component) { @@ -186,7 +197,7 @@ row['_' + prop.name].component; injector: row['_' + prop.name].injector " - > + /> } diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts index 3112ab0a74..7c8409d650 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts @@ -23,7 +23,12 @@ import { AsyncPipe, isPlatformBrowser, NgComponentOutlet, NgTemplateOutlet } fro import { Observable, filter, map, Subject, debounceTime, distinctUntilChanged } from 'rxjs'; import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; -import { NgxDatatableModule, SelectionType, DatatableComponent } from '@swimlane/ngx-datatable'; +import { + NgxDatatableModule, + SelectionType, + DatatableComponent, + ScrollEvent, +} from '@swimlane/ngx-datatable'; import { ABP, @@ -130,7 +135,7 @@ export class ExtensibleTableComponent implements AfterViewInit, OnDestr // Internal signals protected readonly _data = signal([]); - private readonly _actionsColumnWidth = signal(DEFAULT_ACTIONS_COLUMN_WIDTH); + protected readonly _actionsColumnWidth = signal(DEFAULT_ACTIONS_COLUMN_WIDTH); readonly rowDetailComponent = contentChild(ExtensibleTableRowDetailComponent); @@ -162,6 +167,27 @@ export class ExtensibleTableComponent implements AfterViewInit, OnDestr return this.rowDetailComponent()?.rowHeight() ?? this.rowDetailHeight(); } + protected readonly effectiveRowDetailRowHeight = computed( + (): number | ((row?: R, index?: number) => number) | undefined => { + const height = this.effectiveRowDetailHeight; + + if (typeof height === 'number') { + return height as number; + } + + if (typeof height === 'function') { + return height as (row?: R, index?: number) => number; + } + + if (typeof height === 'string' && !height.endsWith('%')) { + const parsed = Number.parseInt(height, 10); + return Number.isNaN(parsed) ? undefined : parsed; + } + + return undefined; + }, + ); + hasAtLeastOnePermittedAction: boolean; readonly propList: EntityPropList; @@ -299,17 +325,16 @@ export class ExtensibleTableComponent implements AfterViewInit, OnDestr this.selectionChange.emit(selected); } - onScroll(scrollEvent: Event): void { + onScroll(scrollEvent: ScrollEvent): void { if (!this.shouldHandleScroll()) { return; } - const target = scrollEvent.target as HTMLElement; - if (!target) { - return; - } + const table = this.table(); + const viewportHeight = table.bodyHeight; + const scrollHeight = table.bodyComponent.scrollHeight(); - if (this.isNearScrollBottom(target)) { + if (scrollEvent.offsetY + viewportHeight >= scrollHeight - this.scrollThreshold()) { this.loadMoreSubject.next(); } } @@ -318,11 +343,6 @@ export class ExtensibleTableComponent implements AfterViewInit, OnDestr return this.infiniteScroll() && !this.isLoading(); } - private isNearScrollBottom(element: HTMLElement): boolean { - const { offsetHeight, scrollTop, scrollHeight } = element; - return offsetHeight + scrollTop >= scrollHeight - this.scrollThreshold(); - } - private triggerLoadMore(): void { this.loadMore.emit(); } diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index abb9cc876d..ba34aa21d2 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "chart.js": "^3.5.1", - "ng-zorro-antd": "~21.0.0-next.1", + "ng-zorro-antd": "~21.3.1", "@ctrl/tinycolor": "^4.0.0", "tslib": "^2.0.0" }, diff --git a/npm/ng-packs/packages/components/project.json b/npm/ng-packs/packages/components/project.json index d80db9b26d..763b7d00e1 100644 --- a/npm/ng-packs/packages/components/project.json +++ b/npm/ng-packs/packages/components/project.json @@ -31,7 +31,7 @@ "executor": "@nx/vitest:test", "outputs": ["{options.reportsDirectory}"], "options": { - "reportsDirectory": "../../coverage/packages/components" + "reportsDirectory": "{projectRoot}/../../coverage/packages/components" } } } diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts index 1cfbbb09f9..82f9871103 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts @@ -163,23 +163,25 @@ export class TreeComponent implements OnInit { } } - onCheckboxChange(event: { keys: any[] }) { - this._checkedKeys.set([...event.keys]); - this.checkedKeysChange.emit(event.keys); + onCheckboxChange(event: NzFormatEmitEvent) { + this._checkedKeys.set([...event.keys as any[]]); + this.checkedKeysChange.emit(event.keys as any[]); } - onExpandedKeysChange(event: { keys: string[] } & NzFormatEmitEvent) { - this._expandedKeys.set([...event.keys]); - this.expandedKeysChange.emit(event.keys); + onExpandedKeysChange(event: NzFormatEmitEvent) { + this._expandedKeys.set([...event.keys as string[]]); + this.expandedKeysChange.emit(event.keys as string[]); this.nzExpandChange.emit(event); } - onDrop(event: DropEvent) { + onDrop(event: NzFormatEmitEvent) { event.event?.stopPropagation(); event.event?.preventDefault(); - event.pos = this.dropPosition; - this.dropOver.emit(event); + this.dropOver.emit({ + ...event, + pos: this.dropPosition, + }); } initDropdown(key: string, dropdown: NgbDropdown) { diff --git a/npm/ng-packs/packages/components/tsconfig.lib.json b/npm/ng-packs/packages/components/tsconfig.lib.json index e4e2e20714..e66d468e91 100644 --- a/npm/ng-packs/packages/components/tsconfig.lib.json +++ b/npm/ng-packs/packages/components/tsconfig.lib.json @@ -12,7 +12,7 @@ }, "exclude": [ "src/test-setup.ts", - "src/**/*.spec.ts", + "**/*.spec.ts", "jest.config.ts", "vite.config.ts", "vite.config.mts", @@ -27,5 +27,5 @@ "src/**/*.spec.jsx", "src/test-setup.ts" ], - "include": ["src/**/*.ts"] + "include": ["**/*.ts"] }