From a9df4c7ad0183badbe557da937ddec429d93831a Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 18:47:04 +0300 Subject: [PATCH] refactor(theme-shared): add trackByFn #2537 --- .../theme-shared/src/lib/components/index.ts | 1 + .../paginator/paginator.component.html | 2 +- .../components/paginator/paginator.component.ts | 7 ++++--- .../lib/components/table/table.component.html | 6 ++---- .../src/lib/components/table/table.component.ts | 17 ++++++++++++++++- .../theme-shared/src/lib/directives/index.ts | 1 + .../theme-shared/src/lib/theme-shared.module.ts | 8 +++++++- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index 13fe3365d3..2e010417ce 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -2,6 +2,7 @@ export * from './breadcrumb/breadcrumb.component'; export * from './button/button.component'; export * from './chart/chart.component'; export * from './confirmation/confirmation.component'; +export * from './loading/loading.component'; export * from './loader-bar/loader-bar.component'; export * from './modal/modal.component'; export * from './paginator/paginator.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html index 56e1e5545f..b42f45a148 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html @@ -15,7 +15,7 @@ > this.totalPages) return; + if (newValue < 1 || newValue > this.totalPages || newValue === this._value) return; this._value = newValue; this.valueChange.emit(newValue); @@ -36,6 +35,8 @@ export class PaginatorComponent implements OnInit { } } + trackByFn: TrackByFunction = (_, page) => page; + ngOnInit() { if (!this.value || this.value < 1 || this.value > this.totalPages) { this.value = 1; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index fa53170728..b3be1cafb5 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -46,9 +46,7 @@ - - - + @@ -60,7 +58,7 @@ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 27436393ba..33c6126a24 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -1,4 +1,12 @@ -import { Component, OnInit, Input, TemplateRef, Output, EventEmitter } from '@angular/core'; +import { + Component, + OnInit, + Input, + TemplateRef, + Output, + EventEmitter, + TrackByFunction, +} from '@angular/core'; @Component({ selector: 'abp-table', @@ -28,6 +36,9 @@ export class TableComponent implements OnInit { @Input() rows: number; + @Input() + trackingProp = 'id'; + @Output() readonly pageChange = new EventEmitter(); @@ -35,6 +46,10 @@ export class TableComponent implements OnInit { bodyScrollLeft = 0; + trackByFn: TrackByFunction = (_, value) => { + return typeof value === 'object' ? value[this.trackingProp] || value : value; + }; + @Input() get totalRecords(): number { return this._totalRecords || this.value.length; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts index 8efed514bf..aa2725e328 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts @@ -1 +1,2 @@ +export * from './loading.directive'; export * from './table-sort.directive'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 370262be97..6132f01a25 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -24,6 +24,8 @@ import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.t import { DateParserFormatter } from './utils/date-parser-formatter'; import { chartJsLoaded$ } from './utils/widget-utils'; import { PaginatorComponent } from './components/paginator/paginator.component'; +import { LoadingComponent } from './components/loading/loading.component'; +import { LoadingDirective } from './directives/loading.directive'; export function appendScript(injector: Injector) { const fn = () => { @@ -45,12 +47,14 @@ export function appendScript(injector: Injector) { ConfirmationComponent, HttpErrorWrapperComponent, LoaderBarComponent, + LoadingComponent, ModalComponent, PaginatorComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, + LoadingDirective, TableSortDirective, ], exports: [ @@ -59,16 +63,18 @@ export function appendScript(injector: Injector) { ChartComponent, ConfirmationComponent, LoaderBarComponent, + LoadingComponent, ModalComponent, PaginatorComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, + LoadingDirective, TableSortDirective, ], providers: [DatePipe], - entryComponents: [HttpErrorWrapperComponent], + entryComponents: [HttpErrorWrapperComponent, LoadingComponent], }) export class ThemeSharedModule { constructor(private errorHandler: ErrorHandler) {}