DM-516: Fixed breadcrumbs

This commit is contained in:
Adina Țeudan 2023-10-19 18:29:56 +03:00
parent aa383781f9
commit 4c9a6651bc
3 changed files with 32 additions and 31 deletions

View File

@ -1,6 +1,6 @@
<section> <section>
<iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'"> <iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'">
<ng-container slot="beforeFilters"> <ng-container *ngIf="isArchiveEnabled" slot="beforeFilters">
<redaction-dossiers-type-switch></redaction-dossiers-type-switch> <redaction-dossiers-type-switch></redaction-dossiers-type-switch>
</ng-container> </ng-container>
</iqser-page-header> </iqser-page-header>
@ -12,6 +12,7 @@
<iqser-table <iqser-table
(noDataAction)="openAddDossierDialog()" (noDataAction)="openAddDossierDialog()"
[hasScrollButton]="true" [hasScrollButton]="true"
[headerHelpModeKey]="'dossier_list'"
[helpModeKey]="'dossier'" [helpModeKey]="'dossier'"
[itemSize]="85" [itemSize]="85"
[noDataButtonLabel]="'dossier-listing.no-data.action' | translate" [noDataButtonLabel]="'dossier-listing.no-data.action' | translate"
@ -19,7 +20,6 @@
[noMatchText]="'dossier-listing.no-match.title' | translate" [noMatchText]="'dossier-listing.no-match.title' | translate"
[showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate)" [showNoDataButton]="permissionsService.canCreateDossier(dossierTemplate)"
[tableColumnConfigs]="tableColumnConfigs" [tableColumnConfigs]="tableColumnConfigs"
[headerHelpModeKey]="'dossier_list'"
noDataIcon="red:folder" noDataIcon="red:folder"
></iqser-table> ></iqser-table>
</div> </div>

View File

@ -1,5 +1,5 @@
import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core'; import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
import { Dossier, DOSSIER_TEMPLATE_ID, DossierTemplate } from '@red/domain'; import { Dossier, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DossierTemplate } from '@red/domain';
import { PermissionsService } from '@services/permissions.service'; import { PermissionsService } from '@services/permissions.service';
import { ButtonConfig, ListingComponent, listingProvidersFactory, LoadingService, TableComponent } from '@iqser/common-ui'; import { ButtonConfig, ListingComponent, listingProvidersFactory, LoadingService, TableComponent } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@ -11,6 +11,7 @@ import { UserPreferenceService } from '@users/user-preference.service';
import { SharedDialogService } from '@shared/services/dialog.service'; import { SharedDialogService } from '@shared/services/dialog.service';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
import { OnAttach } from '@iqser/common-ui/lib/utils'; import { OnAttach } from '@iqser/common-ui/lib/utils';
import { FeaturesService } from '@services/features.service';
@Component({ @Component({
templateUrl: './dossiers-listing-screen.component.html', templateUrl: './dossiers-listing-screen.component.html',
@ -19,27 +20,29 @@ import { OnAttach } from '@iqser/common-ui/lib/utils';
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class DossiersListingScreenComponent extends ListingComponent<Dossier> implements OnInit, OnAttach { 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 computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters()));
readonly isArchiveEnabled = this._featuresService.isEnabled(DOSSIERS_ARCHIVE);
@ViewChild('needsWorkFilterTemplate', { @ViewChild('needsWorkFilterTemplate', {
read: TemplateRef, read: TemplateRef,
static: true, static: true,
}) })
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>; private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>; @ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
readonly tableColumnConfigs = this._configService.tableConfig;
readonly tableHeaderLabel = _('dossier-listing.table-header.title');
readonly buttonConfigs: ButtonConfig[];
readonly dossierTemplate: DossierTemplate;
readonly computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters()));
constructor( constructor(
router: Router, readonly router: Router,
private readonly _configService: ConfigService, private readonly _configService: ConfigService,
readonly permissionsService: PermissionsService, readonly permissionsService: PermissionsService,
private readonly _dialogService: SharedDialogService, private readonly _dialogService: SharedDialogService,
private readonly _activeDossiersService: ActiveDossiersService, private readonly _activeDossiersService: ActiveDossiersService,
private readonly _userPreferenceService: UserPreferenceService, private readonly _userPreferenceService: UserPreferenceService,
private readonly _loadingService: LoadingService, private readonly _loadingService: LoadingService,
dossierTemplatesService: DossierTemplatesService, readonly dossierTemplatesService: DossierTemplatesService,
private readonly _featuresService: FeaturesService,
) { ) {
super(); super();
const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID);

View File

@ -5,10 +5,9 @@ import { BehaviorSubject, Observable, of } from 'rxjs';
import { filter, pluck } from 'rxjs/operators'; import { filter, pluck } from 'rxjs/operators';
import { FilesMapService } from './files/files-map.service'; import { FilesMapService } from './files/files-map.service';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, FILE_ID } from '@red/domain'; import { BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, FILE_ID } from '@red/domain';
import { DossiersService } from './dossiers/dossiers.service'; import { DossiersService } from './dossiers/dossiers.service';
import { dossiersServiceResolver } from './entity-services/dossiers.service.provider'; import { dossiersServiceResolver } from './entity-services/dossiers.service.provider';
import { FeaturesService } from './features.service';
import { DashboardStatsService } from './dossier-templates/dashboard-stats.service'; import { DashboardStatsService } from './dossier-templates/dashboard-stats.service';
export type RouterLinkActiveOptions = { exact: boolean } | IsActiveMatchOptions; export type RouterLinkActiveOptions = { exact: boolean } | IsActiveMatchOptions;
@ -32,25 +31,8 @@ export type Breadcrumbs = List<Breadcrumb>;
providedIn: 'root', providedIn: 'root',
}) })
export class BreadcrumbsService { export class BreadcrumbsService {
readonly #store$ = new BehaviorSubject<Breadcrumbs>([]);
readonly breadcrumbs$: Observable<Breadcrumbs>; readonly breadcrumbs$: Observable<Breadcrumbs>;
readonly #store$ = new BehaviorSubject<Breadcrumbs>([]);
constructor(
private readonly _injector: Injector,
private readonly _router: Router,
private readonly _translateService: TranslateService,
private readonly _filesMapService: FilesMapService,
private readonly _dashboardStatsService: DashboardStatsService,
private readonly _featuresService: FeaturesService,
) {
this.breadcrumbs$ = this.#store$.asObservable();
_router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
const root = _router.routerState.snapshot.root;
this._clear();
this._addBreadcrumbs(root);
});
}
get breadcrumbs() { get breadcrumbs() {
return this.#store$.value; return this.#store$.value;
@ -71,6 +53,22 @@ export class BreadcrumbsService {
}; };
} }
constructor(
private readonly _injector: Injector,
private readonly _router: Router,
private readonly _translateService: TranslateService,
private readonly _filesMapService: FilesMapService,
private readonly _dashboardStatsService: DashboardStatsService,
) {
this.breadcrumbs$ = this.#store$.asObservable();
_router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
const root = _router.routerState.snapshot.root;
this._clear();
this._addBreadcrumbs(root);
});
}
private _append(breadcrumb: Breadcrumb) { private _append(breadcrumb: Breadcrumb) {
this.#store$.next([...this.#store$.value, breadcrumb]); this.#store$.next([...this.#store$.value, breadcrumb]);
} }
@ -87,7 +85,7 @@ export class BreadcrumbsService {
const breadcrumbs = route.data.breadcrumbs || []; const breadcrumbs = route.data.breadcrumbs || [];
if (breadcrumbs.length === 1 && this._featuresService.isEnabled(DOSSIERS_ARCHIVE)) { if (breadcrumbs.length === 1) {
if (breadcrumbs[0] === BreadcrumbTypes.dossierTemplate) { if (breadcrumbs[0] === BreadcrumbTypes.dossierTemplate) {
this._addDossierTemplateDropdown(params); this._addDossierTemplateDropdown(params);
return; return;