From 7a75e1fa7f07aa9bc27eafc6dbcce7035831f248 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Thu, 5 Jan 2023 16:03:46 +0200 Subject: [PATCH] Listing component refactor --- src/lib/common-ui.module.ts | 3 +-- src/lib/listing/listing-component.directive.ts | 9 +++------ .../table-item/table-item.component.html | 2 +- .../table-item/table-item.component.ts | 15 ++++++++++----- .../services/default-user-preference.service.ts | 9 --------- src/lib/services/dialog.service.ts | 4 ++-- src/lib/services/iqser-user-preference.service.ts | 10 ++++++++-- 7 files changed, 25 insertions(+), 27 deletions(-) delete mode 100644 src/lib/services/default-user-preference.service.ts diff --git a/src/lib/common-ui.module.ts b/src/lib/common-ui.module.ts index 92950e1..9012fa8 100644 --- a/src/lib/common-ui.module.ts +++ b/src/lib/common-ui.module.ts @@ -21,8 +21,7 @@ import { MatLegacyCheckboxModule as MatCheckboxModule } from '@angular/material/ import { MatLegacyProgressBarModule as MatProgressBarModule } from '@angular/material/legacy-progress-bar'; import { ConfirmationDialogComponent } from './dialog'; import { MatLegacyTooltipModule as MatTooltipModule } from '@angular/material/legacy-tooltip'; -import { ApiPathInterceptor, IqserConfigService, IqserUserPreferenceService } from './services'; -import { DefaultUserPreferenceService } from './services/default-user-preference.service'; +import { ApiPathInterceptor, DefaultUserPreferenceService, IqserConfigService, IqserUserPreferenceService } from './services'; import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; import { IqserSkeletonModule } from './skeleton/skeleton.module'; diff --git a/src/lib/listing/listing-component.directive.ts b/src/lib/listing/listing-component.directive.ts index c35fac9..75d31aa 100644 --- a/src/lib/listing/listing-component.directive.ts +++ b/src/lib/listing/listing-component.directive.ts @@ -20,7 +20,9 @@ export abstract class ListingComponent, Prim readonly entitiesService = inject>(EntitiesService); readonly listingService = inject>(ListingService); + // TODO: Move to table content component readonly noMatch$ = this.#noMatch$; + // TODO: Move to table content component readonly noContent$ = this.#noContent$; readonly sortedDisplayedEntities$ = this.#sortedDisplayedEntities$; @@ -50,17 +52,12 @@ export abstract class ListingComponent, Prim } get #noContent$(): Observable { - return combineLatest([this.#noMatch$, this.entitiesService.noData$]).pipe( + return combineLatest([this.noMatch$, this.entitiesService.noData$]).pipe( map(([noMatch, noData]) => noMatch || noData), shareDistinctLast(), ); } - toggleEntitySelected(event: MouseEvent, entity: Class): void { - event.stopPropagation(); - this.listingService.select(entity); - } - cast(entity: unknown): Class { return entity as Class; } diff --git a/src/lib/listing/table-content/table-item/table-item.component.html b/src/lib/listing/table-content/table-item/table-item.component.html index 2a34876..eef369e 100644 --- a/src/lib/listing/table-content/table-item/table-item.component.html +++ b/src/lib/listing/table-content/table-item/table-item.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/lib/listing/table-content/table-item/table-item.component.ts b/src/lib/listing/table-content/table-item/table-item.component.ts index 8c25551..f45725a 100644 --- a/src/lib/listing/table-content/table-item/table-item.component.ts +++ b/src/lib/listing/table-content/table-item/table-item.component.ts @@ -6,7 +6,7 @@ import { ListingService } from '../../services'; import { switchMap } from 'rxjs/operators'; @Component({ - selector: 'iqser-table-item', + selector: 'iqser-table-item [entity]', templateUrl: './table-item.component.html', styleUrls: ['./table-item.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, @@ -15,17 +15,22 @@ export class TableItemComponent implements OnChanges { @Input() entity!: T; @Input() selectionEnabled = false; - isSelected$!: Observable; - private readonly _entityChanged$ = new BehaviorSubject(this.entity); + readonly isSelected$: Observable; + readonly #entityChanged$ = new BehaviorSubject(this.entity); constructor( @Inject(forwardRef(() => ListingComponent)) readonly listingComponent: ListingComponent, readonly listingService: ListingService, ) { - this.isSelected$ = this._entityChanged$.pipe(switchMap(entity => this.listingService.isSelected$(entity))); + this.isSelected$ = this.#entityChanged$.pipe(switchMap(entity => this.listingService.isSelected$(entity))); } ngOnChanges(): void { - this._entityChanged$.next(this.entity); + this.#entityChanged$.next(this.entity); + } + + toggleEntitySelected(event: MouseEvent, entity: T): void { + event.stopPropagation(); + this.listingService.select(entity); } } diff --git a/src/lib/services/default-user-preference.service.ts b/src/lib/services/default-user-preference.service.ts deleted file mode 100644 index 221d2ef..0000000 --- a/src/lib/services/default-user-preference.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { inject, Injectable } from '@angular/core'; -import { BASE_HREF } from '../utils'; -import { IqserUserPreferenceService } from './iqser-user-preference.service'; - -@Injectable() -export class DefaultUserPreferenceService extends IqserUserPreferenceService { - protected readonly _defaultModelPath = 'attributes'; - protected readonly _devFeaturesEnabledKey = inject(BASE_HREF) + '.enable-dev-features'; -} diff --git a/src/lib/services/dialog.service.ts b/src/lib/services/dialog.service.ts index 61e4123..98058bc 100644 --- a/src/lib/services/dialog.service.ts +++ b/src/lib/services/dialog.service.ts @@ -42,8 +42,8 @@ export abstract class DialogService { type: T, $event: MouseEvent, data: unknown, - cb?: (...params: unknown[]) => Promise | unknown, - finallyCb?: (...params: unknown[]) => unknown | Promise, + cb?: (...params: unknown[]) => Promise | void, + finallyCb?: (...params: unknown[]) => void | Promise, ): MatDialogRef { const config = this._config[type]; diff --git a/src/lib/services/iqser-user-preference.service.ts b/src/lib/services/iqser-user-preference.service.ts index d60f74b..1e1083a 100644 --- a/src/lib/services/iqser-user-preference.service.ts +++ b/src/lib/services/iqser-user-preference.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { firstValueFrom } from 'rxjs'; -import { List, RequiredParam, Validate } from '../utils'; +import { BASE_HREF, List, RequiredParam, Validate } from '../utils'; import { GenericService } from './generic.service'; export type UserAttributes = Record; @@ -68,3 +68,9 @@ export abstract class IqserUserPreferenceService extends GenericService