RED-6535, refactor main file attribute display method.

This commit is contained in:
George 2023-04-21 18:26:21 +03:00
parent d90571d2f7
commit db4230103b
2 changed files with 14 additions and 23 deletions

View File

@ -12,10 +12,10 @@
</div>
</div>
<div *ngIf="primaryAttribute" class="small-label">
<div *ngIf="ctx.primaryAttribute" class="small-label">
<div class="primary-attribute">
<span [matTooltip]="primaryAttribute" matTooltipPosition="above">
{{ primaryAttribute }}
<span [matTooltip]="ctx.primaryAttribute" matTooltipPosition="above">
{{ ctx.primaryAttribute }}
</span>
</div>
</div>

View File

@ -1,10 +1,9 @@
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { PrimaryFileAttributeService } from '@services/primary-file-attribute.service';
import { FileAttributes } from '@red/domain';
import { ContextComponent, ScrollableParentView, ScrollableParentViews } from '@iqser/common-ui';
import { FileAttributesConfigMap, FileAttributesService } from '@services/entity-services/file-attributes.service';
import { tap } from 'rxjs/operators';
import { BehaviorSubject, combineLatestWith, map } from 'rxjs';
import { ContextComponent } from '@iqser/common-ui';
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
import { combineLatest, map, ReplaySubject } from 'rxjs';
interface PartialFile {
readonly isError: boolean;
@ -18,7 +17,7 @@ interface PartialFile {
}
interface FileNameColumnContext {
fileAttributesConfig: FileAttributesConfigMap;
primaryAttribute: string;
}
@Component({
@ -30,35 +29,27 @@ interface FileNameColumnContext {
export class FileNameColumnComponent extends ContextComponent<FileNameColumnContext> implements OnInit, OnChanges {
@Input() file: PartialFile;
@Input() dossierTemplateId: string;
primaryAttribute: string;
readonly #reloadAttribute = new BehaviorSubject(null);
readonly #reloadAttribute = new ReplaySubject<void>(1);
constructor(
private readonly _fileAttributeService: FileAttributesService,
private readonly _primaryFileAttributeService: PrimaryFileAttributeService,
private readonly _changeDetectorRef: ChangeDetectorRef,
) {
super();
}
ngOnInit(): void {
const fileAttributesConfig$ = this._fileAttributeService.fileAttributesConfig$.pipe(
combineLatestWith(this.#reloadAttribute),
tap(() => {
this.primaryAttribute = this._primaryFileAttributeService.getPrimaryFileAttributeValue(this.file, this.dossierTemplateId);
this._changeDetectorRef.detectChanges();
}),
map(([attributes]) => attributes),
const primaryAttribute$ = combineLatest([this._fileAttributeService.fileAttributesConfig$, this.#reloadAttribute]).pipe(
map(() => this._primaryFileAttributeService.getPrimaryFileAttributeValue(this.file, this.dossierTemplateId)),
);
super._initContext({
fileAttributesConfig: fileAttributesConfig$,
primaryAttribute: primaryAttribute$,
});
}
ngOnChanges(changes: SimpleChanges): void {
if (!changes.file) {
return;
if (changes.file) {
this.#reloadAttribute.next();
}
this.#reloadAttribute.next(null);
}
}