diff --git a/src/lib/error/error.service.ts b/src/lib/error/error.service.ts index 01d91bc..a130be5 100644 --- a/src/lib/error/error.service.ts +++ b/src/lib/error/error.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { HttpErrorResponse } from '@angular/common/http'; import { LoadingService } from '../loading'; +import { filter } from 'rxjs/operators'; +import { NavigationStart, Router } from '@angular/router'; export type Error = HttpErrorResponse | null; @@ -10,8 +12,11 @@ export class ErrorService { readonly hasError$: Observable; private readonly _errorEvent$ = new BehaviorSubject(null); - constructor(private readonly _loadingService: LoadingService) { + constructor(private readonly _loadingService: LoadingService, private readonly _router: Router) { this.hasError$ = this._errorEvent$.asObservable(); + _router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(() => { + this.clear(); + }); } private _error: Error = null; diff --git a/src/lib/listing/models/table-column-config.model.ts b/src/lib/listing/models/table-column-config.model.ts index 28bf880..70ba78f 100644 --- a/src/lib/listing/models/table-column-config.model.ts +++ b/src/lib/listing/models/table-column-config.model.ts @@ -11,5 +11,6 @@ export interface TableColumnConfig { readonly notTranslatable?: boolean; readonly width?: string; readonly template?: TemplateRef; // TODO: make required + readonly extra?: unknown; last?: boolean; } diff --git a/src/lib/listing/table/table.component.html b/src/lib/listing/table/table.component.html index 305879a..4a14415 100644 --- a/src/lib/listing/table/table.component.html +++ b/src/lib/listing/table/table.component.html @@ -22,16 +22,15 @@
- +
diff --git a/src/lib/listing/table/table.component.scss b/src/lib/listing/table/table.component.scss index 9fb63ed..ed541f1 100644 --- a/src/lib/listing/table/table.component.scss +++ b/src/lib/listing/table/table.component.scss @@ -23,7 +23,7 @@ cdk-virtual-scroll-viewport { box-sizing: border-box; border-bottom: 1px solid $separator; height: var(--itemSize); - padding: 0 24px 0 var(--paddingLeft); + padding: 0 13px 0 var(--paddingLeft); &:not(.scrollbar-placeholder):not(.selection-column) { min-width: 110px; diff --git a/src/lib/listing/table/table.component.ts b/src/lib/listing/table/table.component.ts index 2ac2934..956d5f1 100644 --- a/src/lib/listing/table/table.component.ts +++ b/src/lib/listing/table/table.component.ts @@ -38,6 +38,7 @@ export class TableComponent implements OnInit { @Input() showNoDataButton = false; @Output() readonly noDataAction = new EventEmitter(); @Input() noMatchText?: string; + @Input() tableItemClasses?: { [key: string]: (e: T) => boolean }; routerLinkFn?: (entity: T) => string | string[]; tableColumnConfigs!: readonly TableColumnConfig[]; tableHeaderLabel?: string; // todo not optional @@ -58,6 +59,19 @@ export class TableComponent implements OnInit { this._setStyles(); } + getTableItemClasses(entity: T): { [key: string]: boolean } { + const classes: { [key: string]: boolean } = { + 'table-item': true, + pointer: !!this.routerLinkFn && this.routerLinkFn(entity).length > 0 + }; + for (const key in this.tableItemClasses) { + if (Object.prototype.hasOwnProperty.call(this.tableItemClasses, key)) { + classes[key] = this.tableItemClasses[key](entity); + } + } + return classes; + } + private _patchConfig() { this.tableColumnConfigs[this.tableColumnConfigs.length - 1].last = true; }