RED-7856: Sort dossier states stats by rank

This commit is contained in:
Adina Țeudan 2023-11-01 01:33:36 +02:00
parent 946bc87198
commit 19a47bccec
4 changed files with 47 additions and 19 deletions

View File

@ -1,8 +1,8 @@
<a
*ngIf="stats as dossierTemplate"
[attr.help-mode-key]="!dossierTemplate.isEmpty ? 'open_dossier_template' : null"
[class.empty]="dossierTemplate.isEmpty"
[routerLink]="dossierTemplate.isEmpty ? null : ['..', dossierTemplate.dossierTemplateId, 'dossiers']"
[attr.help-mode-key]="!dossierTemplate.isEmpty ? 'open_dossier_template' : null"
class="dialog"
>
<ng-container *ngIf="!dossierTemplate.isEmpty; else empty">
@ -39,7 +39,7 @@
</div>
<div class="flex-3">
<redaction-donut-chart
[config]="translateChartService.translateDossierStates(dossierTemplate.dossiersChartConfig, dossierTemplate.id)"
[config]="translateChartService.translateAndSortDossierStates(dossierTemplate.dossiersChartConfig, dossierTemplate.id)"
[radius]="63"
[strokeWidth]="15"
[subtitles]="['dossier-template-stats.active-dossiers' | translate: { count: dossierTemplate.numberOfActiveDossiers }]"
@ -72,9 +72,9 @@
<iqser-icon-button
(action)="newDossier()"
*ngIf="permissionsService.canCreateDossier(dossierTemplate)"
[attr.help-mode-key]="'new_dossier'"
[label]="'dashboard.empty-template.new-dossier' | translate"
[type]="iconButtonTypes.primary"
[attr.help-mode-key]="'new_dossier'"
icon="iqser:plus"
></iqser-icon-button>
</ng-template>

View File

@ -17,13 +17,16 @@ export class DossiersListingDetailsComponent {
readonly documentsChartConfig$: Observable<DonutChartConfig[]>;
readonly dossiersChartConfig$: Observable<DonutChartConfig[]>;
constructor(dashboardStatsService: DashboardStatsService, private readonly _translateChartService: TranslateChartService) {
constructor(
dashboardStatsService: DashboardStatsService,
private readonly _translateChartService: TranslateChartService,
) {
const dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
this.stats$ = dashboardStatsService.getEntityChanged$(dossierTemplateId);
this.dossiersChartConfig$ = this.stats$.pipe(
map(stats => stats.dossiersChartConfig),
map(data => _translateChartService.translateDossierStates(data, dossierTemplateId)),
map(data => _translateChartService.translateAndSortDossierStates(data, dossierTemplateId)),
);
this.documentsChartConfig$ = this.stats$.pipe(
map(stats => stats.documentsChartConfig),

View File

@ -5,28 +5,53 @@ import { rolesTranslations } from '@translations/roles-translations';
import { workflowFileStatusTranslations } from '@translations/file-status-translations';
import { DossierStatesMapService } from './entity-services/dossier-states-map.service';
function sortStatesByRank(
a: DonutChartConfig,
b: DonutChartConfig,
dossierTemplateId: string,
dossierStatesMapService: DossierStatesMapService,
): number {
if (a.key === 'undefined') {
return 1;
}
if (b.key === 'undefined') {
return -1;
}
const aState = dossierStatesMapService.get(dossierTemplateId, a.key);
const bState = dossierStatesMapService.get(dossierTemplateId, b.key);
return aState.rank - bState.rank;
}
@Injectable({
providedIn: 'root',
})
export class TranslateChartService {
constructor(private readonly _translateService: TranslateService, private readonly _dossierStatesMapService: DossierStatesMapService) {}
constructor(
private readonly _translateService: TranslateService,
private readonly _dossierStatesMapService: DossierStatesMapService,
) {}
translateLabels(config: DonutChartConfig[]): DonutChartConfig[] {
return config.map(val => ({ ...val, label: this._translateService.instant(val.label) }));
}
translateDossierStates(config: DonutChartConfig[], dossierTemplateId: string): DonutChartConfig[] {
return config.map(val => {
if (val.key === 'undefined') {
return { ...val, label: this._translateService.instant(val.label) };
}
const dossierState = this._dossierStatesMapService.get(dossierTemplateId, val.key);
return { ...val, label: dossierState.name, color: dossierState.color };
});
translateAndSortDossierStates(config: DonutChartConfig[], dossierTemplateId: string): DonutChartConfig[] {
return config
.map(val => {
if (val.key === 'undefined') {
return { ...val, label: this._translateService.instant(val.label) };
}
const dossierState = this._dossierStatesMapService.get(dossierTemplateId, val.key);
return { ...val, label: dossierState.name, color: dossierState.color };
})
.sort((a: DonutChartConfig, b: DonutChartConfig) => sortStatesByRank(a, b, dossierTemplateId, this._dossierStatesMapService));
}
translateWorkflowStatus(config: DonutChartConfig[]): DonutChartConfig[] {
return config.map(val => ({ ...val, label: this._translateService.instant(workflowFileStatusTranslations[val.label] as string) }));
return config.map(val => ({
...val,
label: this._translateService.instant(workflowFileStatusTranslations[val.label] as string),
}));
}
translateRoles(config: DonutChartConfig[]): DonutChartConfig[] {

View File

@ -3763,10 +3763,10 @@
node-addon-api "^3.2.1"
node-gyp-build "^4.3.0"
"@pdftron/webviewer@10.4.0":
version "10.4.0"
resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.4.0.tgz#9f59c38f0ec1b7cc08d446ca1a9abc94aa549c41"
integrity sha512-aJOuAYEnkxn/tCaB1m548VfxILbBesLB7Fd1S15/KvjklM9nCQjwJv4+R99zL+WaxvVet9kem5LVPoiGXDHXmg==
"@pdftron/webviewer@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.5.0.tgz#d65ee2b7b10858596dadb7764c477f090039e27b"
integrity sha512-lgNQyMGVj38E5RlzTAhlfXSbODBNFSOS5H47URfhthcV9No1ErMb342TniXTa77XLClddvfrPkvXg3PM6gJgEA==
"@phenomnomnominal/tsquery@^4.1.1":
version "4.2.0"