RED-10206: disable new dossier button when the template is invalid.

This commit is contained in:
Nicoleta Panaghiu 2024-11-01 16:34:11 +02:00
parent 4dc7ecee78
commit b2e40b8f86
9 changed files with 32 additions and 24 deletions

View File

@ -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',
},
];

View File

@ -1,5 +1,5 @@
<section>
<iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'">
<iqser-page-header [buttonConfigs]="buttonConfigs()" [helpModeKey]="'dossier'">
<ng-container slot="beforeFilters">
<redaction-dossiers-type-switch></redaction-dossiers-type-switch>
</ng-container>
@ -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 @@
</section>
<ng-template #needsWorkFilterTemplate let-filter="filter">
<redaction-type-filter [dossierTemplateId]="dossierTemplate.id" [filter]="filter"></redaction-type-filter>
<redaction-type-filter [dossierTemplateId]="dossierTemplate().id" [filter]="filter"></redaction-type-filter>
</ng-template>
<ng-template #tableItemTemplate let-dossier="entity">

View File

@ -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<Dossier> 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<Dossier> 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<void> {
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<Dossier> im
const filterGroups = this._configService.filterGroups(
this.entitiesService.all,
this._needsWorkFilterTemplate,
this.dossierTemplate.id,
this.dossierTemplate().id,
);
this.filterService.addFilterGroups(filterGroups);
}

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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'",

@ -1 +1 @@
Subproject commit 074f88e66abc765b0ef8654eb56a552d88e1bbda
Subproject commit b5724849502e72995cba0d53f37688284f6d3e5f

View File

@ -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;
}