From b2e40b8f862b376d60cf642b782ccb14d0526d42 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 1 Nov 2024 16:34:11 +0200 Subject: [PATCH] RED-10206: disable new dossier button when the template is invalid. --- .../dossiers-listing/config.service.ts | 5 ++-- .../dossiers-listing-screen.component.html | 6 ++--- .../dossiers-listing-screen.component.ts | 27 ++++++++++--------- apps/red-ui/src/assets/i18n/redact/de.json | 3 ++- apps/red-ui/src/assets/i18n/redact/en.json | 3 ++- apps/red-ui/src/assets/i18n/scm/de.json | 3 ++- apps/red-ui/src/assets/i18n/scm/en.json | 3 ++- libs/common-ui | 2 +- .../dossier-template.model.ts | 4 +++ 9 files changed, 32 insertions(+), 24 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts index 7af5d80df..7f8db565d 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts @@ -15,7 +15,6 @@ import { import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; import { DefaultColorsService } from '@services/entity-services/default-colors.service'; import { DossierStatesMapService } from '@services/entity-services/dossier-states-map.service'; -import { PermissionsService } from '@services/permissions.service'; import { SharedDialogService } from '@shared/services/dialog.service'; import { workflowFileStatusTranslations } from '@translations/file-status-translations'; import { workloadTranslations } from '@translations/workload-translations'; @@ -40,7 +39,6 @@ export class ConfigService { private readonly _dossierStatsService: DossierStatsService, private readonly _dossierStatesMapService: DossierStatesMapService, private readonly _dialogService: SharedDialogService, - private readonly _permissionsService: PermissionsService, private readonly _defaultColorsService: DefaultColorsService, ) {} @@ -67,9 +65,10 @@ export class ConfigService { { label: _('dossier-listing.add-new'), action: () => this.#openAddDossierDialog(dossierTemplate.id), - hide: !this._permissionsService.canCreateDossier(dossierTemplate), icon: 'iqser:plus', type: 'primary', + tooltip: dossierTemplate.isInactive ? _('dossier-listing.template-inactive') : null, + disabled: dossierTemplate.isInactive, helpModeKey: 'new_dossier', }, ]; diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html index ec029e356..99e2978e0 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.html @@ -1,5 +1,5 @@
- + @@ -18,7 +18,7 @@ [noDataButtonLabel]="'dossier-listing.no-data.action' | translate" [noDataText]="'dossier-listing.no-data.title' | translate" [noMatchText]="'dossier-listing.no-match.title' | translate" - [showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate)" + [showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate())" [tableColumnConfigs]="tableColumnConfigs" [rowIdPrefix]="'dossier'" [namePropertyKey]="'dossierName'" @@ -33,7 +33,7 @@
- + diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts index c59b47b63..dc343f835 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -1,8 +1,7 @@ -import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core'; -import { Dossier, DOSSIER_TEMPLATE_ID, DossierTemplate } from '@red/domain'; +import { ChangeDetectionStrategy, Component, computed, OnInit, TemplateRef, ViewChild } from '@angular/core'; +import { Dossier, DOSSIER_TEMPLATE_ID } from '@red/domain'; import { PermissionsService } from '@services/permissions.service'; import { - ButtonConfig, HasScrollbarDirective, IqserListingModule, ListingComponent, @@ -25,6 +24,7 @@ import { DossiersListingDetailsComponent } from '../components/dossiers-listing- import { AsyncPipe, NgIf } from '@angular/common'; import { TypeFilterComponent } from '@shared/components/type-filter/type-filter.component'; import { TableItemComponent } from '../components/table-item/table-item.component'; +import { toSignal } from '@angular/core/rxjs-interop'; @Component({ templateUrl: './dossiers-listing-screen.component.html', @@ -47,8 +47,10 @@ import { TableItemComponent } from '../components/table-item/table-item.componen export class DossiersListingScreenComponent extends ListingComponent implements OnInit, OnAttach { readonly tableColumnConfigs = this._configService.tableConfig; readonly tableHeaderLabel = _('dossier-listing.table-header.title'); - readonly buttonConfigs: ButtonConfig[]; - readonly dossierTemplate: DossierTemplate; + readonly dossierTemplateId = this.router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); + readonly dossierTemplates = toSignal(this.dossierTemplatesService.all$); + readonly dossierTemplate = computed(() => this.dossierTemplates().find(template => this.dossierTemplateId === template.id)); + readonly buttonConfigs = computed(() => this._configService.buttonsConfig(this.dossierTemplate())); readonly computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters())); @ViewChild('needsWorkFilterTemplate', { read: TemplateRef, @@ -68,20 +70,19 @@ export class DossiersListingScreenComponent extends ListingComponent im readonly dossierTemplatesService: DossierTemplatesService, ) { super(); - const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); - this.dossierTemplate = dossierTemplatesService.find(dossierTemplateId); - this.buttonConfigs = this._configService.buttonsConfig(this.dossierTemplate); - this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplate.id)); + this.entitiesService.setEntities(this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.dossierTemplate().id)); } openAddDossierDialog(): void { - this._dialogService.openDialog('addDossier', { dossierTemplateId: this.dossierTemplate.id }); + this._dialogService.openDialog('addDossier', { dossierTemplateId: this.dossierTemplate().id }); } async ngOnInit(): Promise { - await this._userPreferenceService.saveLastDossierTemplate(this.dossierTemplate.id); + await this._userPreferenceService.saveLastDossierTemplate(this.dossierTemplate().id); this.addSubscription = this._activeDossiersService.all$ - .pipe(tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this.dossierTemplate.id)))) + .pipe( + tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this.dossierTemplate().id))), + ) .subscribe(); this._loadingService.stop(); } @@ -95,7 +96,7 @@ export class DossiersListingScreenComponent extends ListingComponent im const filterGroups = this._configService.filterGroups( this.entitiesService.all, this._needsWorkFilterTemplate, - this.dossierTemplate.id, + this.dossierTemplate().id, ); this.filterService.addFilterGroups(filterGroups); } diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 165d3e521..eedd3df89 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -943,7 +943,8 @@ }, "table-header": { "title": "{length} {length, plural, one{aktives Dossier} other{aktive Dossiers}}" - } + }, + "template-inactive": "Aktuell ausgewählte Dossier-Vorlage inaktiv!" }, "dossier-overview": { "approve": "Freigeben", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index fe23301b5..e7944d4ba 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -943,7 +943,8 @@ }, "table-header": { "title": "{length} active {length, plural, one{dossier} other{dossiers}}" - } + }, + "template-inactive": "Currently selected dossier template inactive!" }, "dossier-overview": { "approve": "Approve", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 2518f65eb..0ef81d09d 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -943,7 +943,8 @@ }, "table-header": { "title": "{length} {length, plural, one{aktives Dossier} other{aktive Dossiers}}" - } + }, + "template-inactive": "Aktuell ausgewählte Dossier-Vorlage inaktiv!" }, "dossier-overview": { "approve": "Genehmigen", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 27dc5dc68..ccd4add2e 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -943,7 +943,8 @@ }, "table-header": { "title": "{length} active {length, plural, one{dossier} other{dossiers}}" - } + }, + "template-inactive": "Currently selected dossier template inactive!" }, "dossier-overview": { "approve": "Move to 'Done'", diff --git a/libs/common-ui b/libs/common-ui index 074f88e66..b57248495 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 074f88e66abc765b0ef8654eb56a552d88e1bbda +Subproject commit b5724849502e72995cba0d53f37688284f6d3e5f diff --git a/libs/red-domain/src/lib/dossier-templates/dossier-template.model.ts b/libs/red-domain/src/lib/dossier-templates/dossier-template.model.ts index b3e249e92..e949b575b 100644 --- a/libs/red-domain/src/lib/dossier-templates/dossier-template.model.ts +++ b/libs/red-domain/src/lib/dossier-templates/dossier-template.model.ts @@ -49,6 +49,10 @@ export class DossierTemplate implements IDossierTemplate, IListable { return this.dossierTemplateStatus === DossierTemplateStatuses.ACTIVE; } + get isInactive(): boolean { + return this.dossierTemplateStatus === DossierTemplateStatuses.INACTIVE; + } + get id(): string { return this.dossierTemplateId; }