Merge branch 'RED-8217' into 'master'
RED-8217: sync header layer button state with layer checkbox state. See merge request redactmanager/red-ui!325
This commit is contained in:
commit
dc22920518
@ -699,6 +699,7 @@ export class FilePreviewScreenComponent
|
|||||||
|
|
||||||
#subscribeToFileUpdates(): void {
|
#subscribeToFileUpdates(): void {
|
||||||
this.addActiveScreenSubscription = this.loadAnnotations$().subscribe();
|
this.addActiveScreenSubscription = this.loadAnnotations$().subscribe();
|
||||||
|
this.addActiveScreenSubscription = this._viewerHeaderService.layersUpdated.subscribe();
|
||||||
|
|
||||||
this.addActiveScreenSubscription = this._dossiersService
|
this.addActiveScreenSubscription = this._dossiersService
|
||||||
.getEntityDeleted$(this.dossierId)
|
.getEntityDeleted$(this.dossierId)
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import { inject, Injectable } from '@angular/core';
|
import { effect, inject, Injectable, signal } from '@angular/core';
|
||||||
import { UserPreferenceService } from '@users/user-preference.service';
|
|
||||||
import { HeaderElements } from '../../file-preview/utils/constants';
|
import { HeaderElements } from '../../file-preview/utils/constants';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
@ -13,48 +12,49 @@ export class LayersService {
|
|||||||
readonly #enableIcon = this.#convertPath('/assets/icons/general/pdftron-action-disable-layers.svg');
|
readonly #enableIcon = this.#convertPath('/assets/icons/general/pdftron-action-disable-layers.svg');
|
||||||
readonly #disableIcon = this.#convertPath('/assets/icons/general/pdftron-action-enable-layers.svg');
|
readonly #disableIcon = this.#convertPath('/assets/icons/general/pdftron-action-enable-layers.svg');
|
||||||
|
|
||||||
private _active = false;
|
readonly active = signal(false);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _pdf: PdfViewer,
|
private readonly _pdf: PdfViewer,
|
||||||
private readonly _documentViewer: REDDocumentViewer,
|
private readonly _documentViewer: REDDocumentViewer,
|
||||||
private readonly _userPreferenceService: UserPreferenceService,
|
|
||||||
private readonly _translateService: TranslateService,
|
private readonly _translateService: TranslateService,
|
||||||
) {}
|
) {
|
||||||
|
effect(() => {
|
||||||
|
this.active();
|
||||||
|
this.#updateButton();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
get toggleLayersBtnTitle(): string {
|
get toggleLayersBtnTitle(): string {
|
||||||
return this._translateService.instant(_('pdf-viewer.toggle-layers'), {
|
return this._translateService.instant(_('pdf-viewer.toggle-layers'), {
|
||||||
active: this._active,
|
active: this.active(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get toggleLayersBtnIcon(): string {
|
get toggleLayersBtnIcon(): string {
|
||||||
const tooltipsDisabled = this._active;
|
const tooltipsDisabled = this.active();
|
||||||
return tooltipsDisabled ? this.#enableIcon : this.#disableIcon;
|
return tooltipsDisabled ? this.#enableIcon : this.#disableIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
resetLayers() {
|
resetLayers() {
|
||||||
this._active = false;
|
this.active.set(false);
|
||||||
this.#updateButton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async toggleLayers(): Promise<void> {
|
async toggleLayers(): Promise<void> {
|
||||||
const layers = await this._documentViewer.document.getLayersArray();
|
const layers = await this._documentViewer.document.getLayersArray();
|
||||||
layers.forEach(layer => {
|
layers.forEach(layer => {
|
||||||
if ('Layout grid' === layer.name) {
|
if ('Layout grid' === layer.name) {
|
||||||
layer.visible = !this._active;
|
layer.visible = !this.active();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this._documentViewer.document.setLayersArray(layers);
|
this._documentViewer.document.setLayersArray(layers);
|
||||||
this._documentViewer.refreshAndUpdateView();
|
this._documentViewer.refreshAndUpdateView();
|
||||||
|
|
||||||
this._active = !this._active;
|
this.active.update(value => !value);
|
||||||
this.#updateButton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#updateButton() {
|
#updateButton() {
|
||||||
this._pdf.instance.UI.updateElement(HeaderElements.TOGGLE_LAYERS, {
|
this._pdf.instance?.UI.updateElement(HeaderElements.TOGGLE_LAYERS, {
|
||||||
title: this.toggleLayersBtnTitle,
|
title: this.toggleLayersBtnTitle,
|
||||||
img: this.toggleLayersBtnIcon,
|
img: this.toggleLayersBtnIcon,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -4,8 +4,8 @@ import { TranslateService } from '@ngx-translate/core';
|
|||||||
import { IHeaderElement, RotationTypes } from '@red/domain';
|
import { IHeaderElement, RotationTypes } from '@red/domain';
|
||||||
import { FilesMapService } from '@services/files/files-map.service';
|
import { FilesMapService } from '@services/files/files-map.service';
|
||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { fromEvent, merge, Observable, Subject } from 'rxjs';
|
import { fromEvent, merge, Observable, Subject, timer } from 'rxjs';
|
||||||
import { filter, map, tap } from 'rxjs/operators';
|
import { filter, map, switchMap, tap } from 'rxjs/operators';
|
||||||
import { HeaderElements, HeaderElementType } from '../../file-preview/utils/constants';
|
import { HeaderElements, HeaderElementType } from '../../file-preview/utils/constants';
|
||||||
import { ROTATION_ACTION_BUTTONS, ROTATION_BUTTONS, ViewerEvents } from '../utils/constants';
|
import { ROTATION_ACTION_BUTTONS, ROTATION_BUTTONS, ViewerEvents } from '../utils/constants';
|
||||||
import { ViewerEvent, VisibilityChangedEvent } from '../utils/types';
|
import { ViewerEvent, VisibilityChangedEvent } from '../utils/types';
|
||||||
@ -70,6 +70,17 @@ export class ViewerHeaderService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get layersUpdated() {
|
||||||
|
const documentListener$ = timer(1000).pipe(switchMap(() => fromEvent(this._documentViewer.document, 'layersUpdated')));
|
||||||
|
return documentListener$.pipe(
|
||||||
|
tap(async () => {
|
||||||
|
const layers = await this._documentViewer.document.getLayersArray();
|
||||||
|
const layersVisible = layers.every(layer => layer.visible);
|
||||||
|
this._layersService.active.set(layersVisible);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
get #rectangle(): IHeaderElement {
|
get #rectangle(): IHeaderElement {
|
||||||
return {
|
return {
|
||||||
type: 'toolGroupButton',
|
type: 'toolGroupButton',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user