diff --git a/apps/red-ui/src/app/modules/file-preview/components/editable-structured-component-value/editable-structured-component-value.component.ts b/apps/red-ui/src/app/modules/file-preview/components/editable-structured-component-value/editable-structured-component-value.component.ts
index 51bf95b54..90dd06fc8 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/editable-structured-component-value/editable-structured-component-value.component.ts
+++ b/apps/red-ui/src/app/modules/file-preview/components/editable-structured-component-value/editable-structured-component-value.component.ts
@@ -3,11 +3,11 @@ import { KeyValuePipe, NgClass, NgForOf, NgIf } from '@angular/common';
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { MatIcon } from '@angular/material/icon';
-import { FilterService } from '@common-ui/filtering';
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { IComponentLogEntry, IComponentValue } from '@red/domain';
import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component';
+import { FilePreviewStateService } from '../../services/file-preview-state.service';
@Component({
selector: 'redaction-editable-structured-component-value [entry] [canEdit]',
@@ -43,8 +43,8 @@ export class EditableStructuredComponentValueComponent implements OnInit {
selected = false;
constructor(
- private readonly _filtersService: FilterService,
private readonly _iqserDialog: IqserDialog,
+ private readonly _state: FilePreviewStateService,
) {}
get disabled() {
@@ -91,7 +91,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
}
this.deselectLast.emit();
this.selected = true;
- this.#setWorkloadFilters();
+ this._state.componentReferenceIds = this.#getUniqueReferencesIds(this.entry.componentValues);
}
}
@@ -106,7 +106,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
$event?.stopImmediatePropagation();
this.selected = false;
this.editing = false;
- this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
+ this._state.componentReferenceIds = null;
}
removeValue(index: number) {
@@ -150,41 +150,14 @@ export class EditableStructuredComponentValueComponent implements OnInit {
return value.replace(/\n/g, '
');
}
- #setWorkloadFilters() {
- this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
- const uniqueLabels = this.#getUniqueReferencesLabels(this.entry.componentValues);
- let setFilterCount = 0;
- for (const label of uniqueLabels) {
- const setFilter = this.#setFilter(label);
- if (setFilter) {
- setFilterCount++;
- }
- }
- if (!setFilterCount) {
- this.#setFilter('no-annotations-filter');
- }
- }
-
- #setFilter(label: string) {
- const filterGroup = this._filtersService.getGroup('primaryFilters');
- for (const filter of filterGroup.filters) {
- const nestedFilter = filter.children.find(f => f.label.toLowerCase() === label);
- if (nestedFilter) {
- this._filtersService.filterCheckboxClicked({ nestedFilter, filterGroup, primaryFiltersSlug: 'primaryFilters' });
- return true;
- }
- }
- }
-
- #getUniqueReferencesLabels(values: IComponentValue[]) {
- const labels: Set = new Set();
+ #getUniqueReferencesIds(values: IComponentValue[]) {
+ const ids: Set = new Set();
for (const value of values) {
for (const reference of value.entityReferences) {
- const label = reference.type?.replace(/_/g, ' ')?.toLowerCase();
- labels.add(label);
+ ids.add(reference.id);
}
}
- return labels;
+ return Array.from(ids);
}
#updateTextAreaHeight() {
diff --git a/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.html b/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.html
index 9e6fac31b..ce6756679 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.html
+++ b/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.html
@@ -186,7 +186,7 @@
{{ 'file-preview.tabs.annotations.no-annotations' | translate }}
diff --git a/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.ts b/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.ts
index 4cb63a58d..0f0c47c83 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.ts
+++ b/apps/red-ui/src/app/modules/file-preview/components/file-workload/file-workload.component.ts
@@ -20,7 +20,7 @@ import { AutoUnsubscribe, Debounce, IqserEventTarget } from '@iqser/common-ui/li
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { ListItem } from '@models/file/list-item';
import { TranslateModule } from '@ngx-translate/core';
-import { WorkflowFileStatuses } from '@red/domain';
+import { ComponentLogEntry, WorkflowFileStatuses } from '@red/domain';
import { workloadTranslations } from '@translations/workload-translations';
import { UserPreferenceService } from '@users/user-preference.service';
import { getLocalStorageDataByFileId } from '@utils/local-storage';
@@ -176,11 +176,14 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
this.fileDataService.all$,
primary$,
secondary$,
+ this.state.componentReferenceIds$,
this.listingService.selected$,
this._pageRotationService.rotations$,
]).pipe(
delay(0),
- map(([annotations, primary, secondary]) => this.#filterAnnotations(annotations, primary, secondary)),
+ map(([annotations, primary, secondary, componentReferenceIds]) =>
+ this.#filterAnnotations(annotations, primary, secondary, componentReferenceIds),
+ ),
map(annotations => this.#mapListItemsFromAnnotationWrapperArray(annotations)),
tap(annotations => this.#scrollToFirstAnnotationPage(annotations)),
);
@@ -399,6 +402,7 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
annotations: AnnotationWrapper[],
primary: INestedFilter[],
secondary: INestedFilter[] = [],
+ componentReferenceIds: string[],
): Map {
const onlyPageWithAnnotations = this.viewModeService.onlyPagesWithAnnotations();
if (!primary || primary.length === 0) {
@@ -410,8 +414,13 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
annotations = annotations.filter(a => !a.isRemoved);
}
- if (this.isDocumine && !this.#isIqserDevMode) {
- annotations = annotations.filter(a => !a.isOCR);
+ if (this.isDocumine) {
+ if (!this.#isIqserDevMode) {
+ annotations = annotations.filter(a => !a.isOCR);
+ }
+ if (componentReferenceIds) {
+ annotations = annotations.filter(a => componentReferenceIds.includes(a.id));
+ }
}
this.displayedAnnotations = this._annotationProcessingService.filterAndGroupAnnotations(annotations, primary, secondary);
@@ -424,7 +433,7 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
this.displayedPages = [];
}
this.displayedAnnotations.clear();
- } else if (enabledFilters.length || onlyPageWithAnnotations) {
+ } else if (enabledFilters.length || onlyPageWithAnnotations || componentReferenceIds) {
this.displayedPages = pagesThatDisplayAnnotations;
} else {
this.displayedPages = this.#allPages;
diff --git a/apps/red-ui/src/app/modules/file-preview/components/structured-component-management/structured-component-management.component.ts b/apps/red-ui/src/app/modules/file-preview/components/structured-component-management/structured-component-management.component.ts
index 4cc3bb5bf..0ec8d38ea 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/structured-component-management/structured-component-management.component.ts
+++ b/apps/red-ui/src/app/modules/file-preview/components/structured-component-management/structured-component-management.component.ts
@@ -3,7 +3,6 @@ import { List } from '@common-ui/utils';
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { ComponentLogEntry, Dictionary, File, IComponentLogEntry, WorkflowFileStatuses } from '@red/domain';
import { ComponentLogService } from '@services/files/component-log.service';
-import { UserPreferenceService } from '@users/user-preference.service';
import { combineLatest, firstValueFrom, Observable } from 'rxjs';
import { EditableStructuredComponentValueComponent } from '../editable-structured-component-value/editable-structured-component-value.component';
import { FilterService, PopupFilterComponent } from '@common-ui/filtering';
@@ -23,7 +22,6 @@ import { TranslateModule } from '@ngx-translate/core';
export class StructuredComponentManagementComponent implements OnInit {
protected readonly componentLogData = signal(undefined);
protected readonly componentLogData$ = toObservable(this.componentLogData);
- protected readonly openScmDialogByDefault = signal(this.userPreferences.getOpenScmDialogByDefault());
protected readonly iconButtonTypes = IconButtonTypes;
protected displayedComponents$: Observable;
@Input() file: File;
@@ -35,7 +33,6 @@ export class StructuredComponentManagementComponent implements OnInit {
private readonly _loadingService: LoadingService,
private readonly _componentLogFilterService: ComponentLogFilterService,
private readonly _filterService: FilterService,
- readonly userPreferences: UserPreferenceService,
) {}
get canEdit() {
@@ -54,12 +51,6 @@ export class StructuredComponentManagementComponent implements OnInit {
}
}
- async toggleOpenScmDialogByDefault() {
- await this.userPreferences.toggleOpenScmDialogByDefault();
- await this.userPreferences.reload();
- this.openScmDialogByDefault.set(this.userPreferences.getOpenScmDialogByDefault());
- }
-
async revertOverride(originalKey: string) {
this._loadingService.start();
await firstValueFrom(
diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts
index 6f584dd5d..50b8f579e 100644
--- a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts
+++ b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts
@@ -14,7 +14,7 @@ import { FilesMapService } from '@services/files/files-map.service';
import { FilesService } from '@services/files/files.service';
import { PermissionsService } from '@services/permissions.service';
import { NGXLogger } from 'ngx-logger';
-import { firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs';
+import { BehaviorSubject, firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs';
import { filter, map, startWith, tap, withLatestFrom } from 'rxjs/operators';
import { ViewModeService } from './view-mode.service';
@@ -41,6 +41,8 @@ export class FilePreviewStateService {
readonly isWritable: Signal;
readonly dossierDictionary: Signal;
readonly blob$: Observable;
+ readonly componentReferenceIds$: Observable;
+ readonly #componentReferenceIds$ = new BehaviorSubject(null);
readonly dossierId = getParam(DOSSIER_ID);
readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
readonly fileId = getParam(FILE_ID);
@@ -62,6 +64,7 @@ export class FilePreviewStateService {
this.dossier = toSignal(dossiersServiceResolver().getEntityChanged$(this.dossierId));
this.file$ = inject(FilesMapService).watch$(this.dossierId, this.fileId);
this.file = toSignal(this.file$);
+ this.componentReferenceIds$ = this.#componentReferenceIds$.asObservable();
this.excludedPages = signal(this.file().excludedPages);
this.isWritable = computed(() => {
const isWritable = this._permissionsService.canPerformAnnotationActions(this.file(), this.dossier());
@@ -91,6 +94,10 @@ export class FilePreviewStateService {
);
}
+ set componentReferenceIds(ids: string[]) {
+ this.#componentReferenceIds$.next(ids);
+ }
+
get dictionaries(): Dictionary[] {
const dictionaries = this._dictionariesMapService.get(this.dossierTemplateId);
if (this.dossierDictionary()) {
@@ -126,6 +133,10 @@ export class FilePreviewStateService {
);
}
+ get componentReferenceIds() {
+ return this.#componentReferenceIds$.getValue();
+ }
+
reloadBlob(): void {
this.#reloadBlob$.next(true);
}
diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json
index 5f6c0ce6e..2ccc6f6d1 100644
--- a/apps/red-ui/src/assets/config/config.json
+++ b/apps/red-ui/src/assets/config/config.json
@@ -1,9 +1,9 @@
{
"ADMIN_CONTACT_NAME": null,
"ADMIN_CONTACT_URL": null,
- "API_URL": "https://dan2.iqser.cloud",
+ "API_URL": "https://frontend2.iqser.cloud",
"APP_NAME": "RedactManager",
- "IS_DOCUMINE": false,
+ "IS_DOCUMINE": true,
"RULE_EDITOR_DEV_ONLY": false,
"AUTO_READ_TIME": 3,
"BACKEND_APP_VERSION": "4.4.40",
@@ -13,13 +13,13 @@
"MAX_RETRIES_ON_SERVER_ERROR": 3,
"OAUTH_CLIENT_ID": "redaction",
"OAUTH_IDP_HINT": null,
- "OAUTH_URL": "https://dan2.iqser.cloud/auth",
+ "OAUTH_URL": "https://frontend2.iqser.cloud/auth",
"RECENT_PERIOD_IN_HOURS": 24,
"SELECTION_MODE": "structural",
"MANUAL_BASE_URL": "https://docs.redactmanager.com/preview",
"ANNOTATIONS_THRESHOLD": 1000,
- "THEME": "redact",
- "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/redact/",
+ "THEME": "scm",
+ "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/scm/",
"AVAILABLE_NOTIFICATIONS_DAYS": 30,
"AVAILABLE_OLD_NOTIFICATIONS_MINUTES": 60,
"NOTIFICATIONS_THRESHOLD": 1000,