From d26578e3e53e4ef5180b55e04956481e95cad40b Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Mon, 16 May 2022 10:00:30 +0300 Subject: [PATCH 01/14] RED-3991: make drawing annotations faster --- .../annotations-list/annotations-list.component.ts | 1 - .../components/file-workload/file-workload.component.html | 3 +-- .../components/file-workload/file-workload.component.ts | 2 +- .../modules/file-preview/file-preview-screen.component.ts | 3 +-- .../modules/file-preview/services/multi-select.service.ts | 5 +++-- .../app/modules/file-preview/services/pdf-viewer.service.ts | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotations-list/annotations-list.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotations-list/annotations-list.component.ts index b620bfca7..e67ddac59 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotations-list/annotations-list.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotations-list/annotations-list.component.ts @@ -28,7 +28,6 @@ import { PdfViewer } from '../../services/pdf-viewer.service'; export class AnnotationsListComponent extends HasScrollbarDirective implements OnChanges { @Input() annotations: AnnotationWrapper[]; @Input() annotationActionsTemplate: TemplateRef; - @Input() activeViewerPage: number; @Output() readonly pagesPanelActive = new EventEmitter(); 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 2ba09b6b5..c9f517c59 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 @@ -48,7 +48,7 @@
@@ -213,7 +213,6 @@ 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 be00a494a..9c6909607 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 @@ -134,7 +134,7 @@ export class FileWorkloadComponent { return this.multiSelectService.inactive$.pipe( tap(value => { if (value) { - this.pdf.selectAnnotations(); + this.pdf.deselectAllAnnotations(); } }), shareDistinctLast(), diff --git a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts index 0ea7210c4..a0e3efe9a 100644 --- a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts @@ -31,7 +31,7 @@ import { download, handleFilterDelta } from '../../utils'; import { FileWorkloadComponent } from './components/file-workload/file-workload.component'; import { FilesService } from '@services/entity-services/files.service'; import { FileManagementService } from '@services/entity-services/file-management.service'; -import { catchError, debounceTime, map, startWith, switchMap, tap } from 'rxjs/operators'; +import { catchError, map, startWith, switchMap, tap } from 'rxjs/operators'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { ExcludedPagesService } from './services/excluded-pages.service'; import { ViewModeService } from './services/view-mode.service'; @@ -362,7 +362,6 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni ); let start; return combineLatest([currentPageAnnotations$, documentLoaded$]).pipe( - debounceTime(300), tap(() => (start = new Date().getTime())), map(([annotations]) => annotations), startWith([] as AnnotationWrapper[]), diff --git a/apps/red-ui/src/app/modules/file-preview/services/multi-select.service.ts b/apps/red-ui/src/app/modules/file-preview/services/multi-select.service.ts index f918f5b59..0cc9f0dfd 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/multi-select.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/multi-select.service.ts @@ -13,12 +13,13 @@ export class MultiSelectService { readonly enabled$: Observable; readonly active$: Observable; readonly inactive$: Observable; + readonly #active$ = new BehaviorSubject(false); readonly #enabled$ = new BehaviorSubject(true); - constructor(private readonly _viewModeService: ViewModeService, private readonly _state: FilePreviewStateService) { + constructor(viewModeService: ViewModeService, state: FilePreviewStateService) { [this.active$, this.inactive$] = boolFactory(this.#active$.asObservable()); - this.enabled$ = combineLatest([this._viewModeService.viewMode$, _state.isWritable$]).pipe( + this.enabled$ = combineLatest([viewModeService.viewMode$, state.isWritable$]).pipe( map(([viewMode, isWritable]) => isWritable && ENABLED_MULTISELECT.includes(viewMode)), tap(enabled => this.#enabled$.next(enabled)), ); diff --git a/apps/red-ui/src/app/modules/file-preview/services/pdf-viewer.service.ts b/apps/red-ui/src/app/modules/file-preview/services/pdf-viewer.service.ts index 2f841c6e4..c9e6d7470 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/pdf-viewer.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/pdf-viewer.service.ts @@ -227,7 +227,7 @@ export class PdfViewer { this.navigateToPage(pageNumber); // wait for page to be loaded and to draw annotations - setTimeout(() => this.#jumpAndSelectAnnotations(filteredAnnotationsIds), 500); + setTimeout(() => this.#jumpAndSelectAnnotations(filteredAnnotationsIds), 300); } #jumpAndSelectAnnotations(annotationIds: readonly string[]) { From dc6bca8c2dde58ba1523d0f5d76096b341eeb9a2 Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 09:03:02 +0200 Subject: [PATCH 02/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3261 -> 3260 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 22bd79c97..94cd6f333 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.479.0", + "version": "3.480.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index d1cb6dde198a9f5aee3456f8a2c4325d8eb62d7e..c0d44e83630d40f408b8ce409087d6192b048171 100644 GIT binary patch delta 3022 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 QE+4!67wR{}1OQL~07Y`wNB{r; delta 3023 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 R+qr%0_Fs{XE9U@E007>4*M|TA From 40a8b7d849ba40542b9e0379f9d5c5a154652945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 16 May 2022 21:00:48 +0300 Subject: [PATCH 03/14] RED-4008: Paligo - Delete background and border for featured content --- paligo-styles/homepage.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/paligo-styles/homepage.scss b/paligo-styles/homepage.scss index cfbe08a30..3d7614e88 100644 --- a/paligo-styles/homepage.scss +++ b/paligo-styles/homepage.scss @@ -31,6 +31,10 @@ .publication-contents { @include mixin.card; + + border: none; + background-color: transparent; + width: 250px; margin: 0 15px !important; From ffad6771140a27340c1dc819f08f9bdd03f57f5a Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 20:03:11 +0200 Subject: [PATCH 04/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3260 -> 3266 bytes paligo-theme/paligo-styles/redacto-theme.css | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 94cd6f333..fcf59a3ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.480.0", + "version": "3.481.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index c0d44e83630d40f408b8ce409087d6192b048171..b20aaa8356c557a6911546151b38f9c13c463055 100644 GIT binary patch delta 3241 zcmV;a3|8~J8NwNVABzY80000000ZqC+j8T!b)Wqes59-XQ&HwslC_iVHq)ei>2#W; z?Mq)k5)=_rBtwF0dpn-#Z}h1z`HZ~npY%(50D=@if)c&nB%P_Svm%Mh!MWjF0C;&_ z;*9PJi=|{wu3!8Z#fGvDZ2oix&#t_1eAl-F#}2&p3mYDPw)+AFKMFR3($oxB2>ldO z{V$fKE`Rw^vxkh-A4?maE`QHmug>!SDauj#S0u&}lWohWu0L!JF5s0vC4bMg-E}Yj zwd;cXSAhrX-~PCyn#=#W{NF?=u4=;2Zk9;62SAKKoNi@?U?A^Lk4e&K7sOl)bSRo^8Lf7ryun z#P3S{uEp;LejU-r5q%ud#}R!T(Z}I^eihTY%<#i!^&KuRuU=g&Ies{^Qi5Yrp?_Q; z^v-Dgd36{P}^J-)Z@Xv|W8W!oySEy4{e_;*>z(+fxHg{A|}W{zOT%r9{q(|iX2T;R8}o&_ajc{{k5 zKMp}u4I><{s>Mj?=>a?!r!y%pR>ATvaYb@}_R2_q)KoREDhrx3QWwc$yKbY{HC2n2TV7i~(OIw(e$N1`P0CBizE&x$K`DxKutY8cm|6a(J14 z5X>3~37`?g3p~kiNHS@N4pz;Ts?W$hvv@cGsuz(~AxvN<0SwGyt1+X|OPc3WLpswZ zB=jvfcA7kN{Zt$bKvaIn%35E094l#>jrNbY#3wh306SZ$VKrq1%`!YplovUfwJJO9 z2?p-KMos|8{-Sm6n0KDfh}1vyWRzupWHEavShGmfup(;54n_40G!T9kBG_ohpM_6r zubzjMV)Mo}R;;R+L`8*Ls}8C_DsGIPg87706!Yh9W(GFiN?MzlQ#aXot@exTN$QYM z4U*q`mD%IB39V{oMJbh@Rx?BP(+C4_88$&1#dY)P(>1g+#(Jc&GDI4#|MaPU3~G0n z@Z+dm>LV~!`TXSpJXK?LnFw^|@B>(>FplOasVE!quCE7Yb^R&&g60{atjTxi)9Z^R zK(>Gcl39+5S?^^o|DL$(^<_8uZ$)*RWX0WJtUEQl969fUUp z!m)395TBF0Ved$_C;9syxXh4$RaQkpvjH%F5+8f50>e>S(I{nfXF@5MgpznYl&_m8 zO`7~x#3B0l)if4vKmLo5!Jc*-DJ9wO^Zt^?aS zDB_n=;`RF&dQiX-#%E|aGT z5Z&3W@4IL+IY-;KR`P?1aP_Gnsp=y=w?%X`Ye#4bHZ|jRRk6N&Z;_kuYL7F4b4In% zpvikZMv(LL81;-Y(bIE=4?>%clfxOHB7-0ZT!(S)lY#ayvmMWW@-gBnQ+TS+Qs=ZR z3DX$HV}dranjS5c$qFmTfupL~hqcl7D_WQo1rxz-4Q!HMYW^uy;t_BH}6$RQMfD&sm%o>qY4qB~h7Xo#zy+E!fetc6ecZ(oE z0gtFQ;wTcvatOMuZy`IbCx9-H<2Y(32=8#1kr=e^#=F^ITW!n>)_1TNe^`96a%**y z;3QQ0h76+aoh1U=t*VE52R_zLoJ1q<4p%vEh{M>{5V%W1VZJRA4-HlZrh-!p54ApP zwPe)4CSXJ`rp%c!uL>37Og=z&a~udP_?c4YN{m2o#1Bv*gd5WJ!GQD~ zKACuF$pJqNHv)Ohx3xM59S<{-sG;f9pe8#uyi4n53_lLY?-N;8L}1R{j^ZIh8szO7 zE_P4I#Nc5jcvPj08ZZrd@+9NPkmv08PJ>msm4k1e$|?82MuaOyBke>;J?$H&NEhNUgq_gdRvS1kbiH`7VWCWGE24J@0pDvaVr$7YwmXbShM@H?~UbuK1 z^`ZOSI63b+L*B=CC`an#*+w1hst1gbK-y)v&_4No`;0>b(>0crVOPSrQ4V*-j!05e zfLK$Oq>6A&hS<&CNm0%?4Ld6uh5aGhfKElDkLm9d?l!2KAUrXD1gcnVE+<(KM819N5pO>w z((MPAOzMsHUi5{3Flm2{n?ECwZgl>lvcs;_kSi73N{L#lHu@wJE=jdtrEXl@-sUaE zZnoh9(WG7sm*QgwqkRC8@xx%oL(JBN48{>#;K56I+FB$Qdnn1(IEw7|YQ;SpbF&d?n60piN#AcJQP{wrF35$LpH+QcnGU{>v?oIzFa5 zCTjbvizG(@3fFi7c^57QV`ko} z7@+g)s}n4|{O zF$E-J-s$Y`cOAZKNZsF>H0DEnkJpIBBUdPn|7_t^kfHyGgI(q-ug3O9Gokl(h2zCxLwMM(c?CLx1qZKUH`f3vURqyCQuOVxU1(WIu%H&4uWDDnvzfp6vxknl}pZ zo|Ym=NQmP|@tE@wL(CqmYn+|zP69}ZsF^zR|GEDx>0Hj`T+ZcO&gERr~42?<7Gt08jt`HTOPW literal 3260 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 Date: Mon, 16 May 2022 22:01:57 +0300 Subject: [PATCH 05/14] RED-4022: Use display name for dossier_redaction dictionary --- .../edit-dossier-dictionary.component.ts | 8 +++----- .../services/annotation-processing.service.ts | 5 ++++- .../annotation-card.component.ts | 14 +++++++++++--- .../services/file-preview-state.service.ts | 15 ++++++++++++--- .../entity-services/dictionary.service.ts | 19 +++++++++++++++---- apps/red-ui/src/assets/config/config.json | 4 ++-- 6 files changed, 47 insertions(+), 18 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index b1c2e7a8c..8831630f9 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit, ViewChild } from '@angular/core'; -import { Dossier, IDictionary } from '@red/domain'; +import { Dictionary, Dossier, IDictionary } from '@red/domain'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; @@ -21,7 +21,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa form: FormGroup; canEdit = false; canEditDisplayName = false; - dossierDictionary: IDictionary; + dossierDictionary: Dictionary; readonly circleButtonTypes = CircleButtonTypes; @ViewChild(DictionaryManagerComponent, { static: false }) private readonly _dictionaryManager: DictionaryManagerComponent; @@ -130,8 +130,6 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private async _updateDossierDictionary() { const { dossierId, dossierTemplateId } = this.dossier; - this.dossierDictionary = await firstValueFrom( - this._dictionaryService.getForType(dossierTemplateId, 'dossier_redaction', dossierId), - ); + this.dossierDictionary = await firstValueFrom(this._dictionaryService.getDossierDictionary(dossierTemplateId, dossierId)); } } diff --git a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts index 5bda73779..e3603fea0 100644 --- a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts @@ -74,7 +74,10 @@ export class AnnotationProcessingService { if (!parentFilter) { parentFilter = this._createParentFilter(a.superType, filterMap, filters); } - const dictionary = this._dictionariesMapService.getDictionary(a.type, this._state.dossierTemplateId); + const dictionary = + a.type === 'dossier_redaction' + ? this._state.dossierDictionary + : this._dictionariesMapService.getDictionary(a.type, this._state.dossierTemplateId); const childFilter: IFilter = { id: a.filterKey, label: dictionary.label, diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts index 2f7ce75e0..b29166602 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts @@ -1,11 +1,13 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { MultiSelectService } from '../../services/multi-select.service'; +import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { Dictionary, DOSSIER_ID } from '@red/domain'; import { ActivatedRoute } from '@angular/router'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { BehaviorSubject } from 'rxjs'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; @Component({ selector: 'redaction-annotation-card', @@ -17,6 +19,7 @@ export class AnnotationCardComponent implements OnChanges { @Input() annotation: AnnotationWrapper; @Input() isSelected = false; readonly dictionary$ = new BehaviorSubject(undefined); + readonly #dossierId: string; readonly #dossierTemplateId: string; constructor( @@ -24,15 +27,20 @@ export class AnnotationCardComponent implements OnChanges { dossiersService: DossiersService, readonly multiSelectService: MultiSelectService, private readonly _dictionariesMapService: DictionariesMapService, + private readonly _dictionaryService: DictionaryService, + private readonly _state: FilePreviewStateService, ) { - const dossierId: string = route.snapshot.paramMap.get(DOSSIER_ID); - this.#dossierTemplateId = dossiersService.find(dossierId).dossierTemplateId; + this.#dossierId = route.snapshot.paramMap.get(DOSSIER_ID); + this.#dossierTemplateId = dossiersService.find(this.#dossierId).dossierTemplateId; } ngOnChanges(changes: SimpleChanges): void { if (changes.annotation) { if (this.annotation.type !== 'manual' && !this.annotation.isHighlight) { - const dictionary = this._dictionariesMapService.getDictionary(this.annotation.type, this.#dossierTemplateId); + const dictionary = + this.annotation.type === 'dossier_redaction' + ? this._state.dossierDictionary + : this._dictionariesMapService.getDictionary(this.annotation.type, this.#dossierTemplateId); this.dictionary$.next(dictionary); } } 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 ba8aec14d..4e09fa65a 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 @@ -1,6 +1,6 @@ import { Injectable, Injector } from '@angular/core'; import { combineLatest, firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs'; -import { Dossier, DOSSIER_ID, File, FILE_ID } from '@red/domain'; +import { Dictionary, Dossier, DOSSIER_ID, File, FILE_ID } from '@red/domain'; import { ActivatedRoute, Router } from '@angular/router'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { PermissionsService } from '@services/permissions.service'; @@ -11,6 +11,7 @@ import { dossiersServiceResolver } from '@services/entity-services/dossiers.serv import { wipeFilesCache } from '@red/cache'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; @Injectable() export class FilePreviewStateService { @@ -24,10 +25,9 @@ export class FilePreviewStateService { readonly dossierId: string; readonly dossierTemplateId: string; readonly fileId: string; - dossier: Dossier; file: File; - + #dossierDictionary: Dictionary; readonly #reloadBlob$ = new Subject(); constructor( @@ -39,6 +39,7 @@ export class FilePreviewStateService { private readonly _filesService: FilesService, private readonly _dossiersService: DossiersService, private readonly _fileManagementService: FileManagementService, + private readonly _dictionaryService: DictionaryService, ) { const dossiersService = dossiersServiceResolver(_injector, router); @@ -55,6 +56,14 @@ export class FilePreviewStateService { this.blob$ = this.#blob$; this.dossierFileChange$ = this.#dossierFilesChange$(); + + this._dictionaryService + .getDossierDictionary(this.dossierTemplateId, this.dossierId) + .subscribe(dictionary => (this.#dossierDictionary = dictionary)); + } + + get dossierDictionary(): Dictionary { + return this.#dossierDictionary; } get blob(): Promise { diff --git a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts index 54a0f3296..1f57387e7 100644 --- a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts @@ -1,6 +1,6 @@ import { Injectable, Injector } from '@angular/core'; import { firstValueFrom, forkJoin, Observable, of, throwError } from 'rxjs'; -import { EntitiesService, List, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; +import { EntitiesService, List, log, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; import { Dictionary, DictionaryEntryType, DictionaryEntryTypes, IColors, IDictionary, IUpdateDictionary } from '@red/domain'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -174,7 +174,7 @@ export class DictionaryService extends EntitiesService async getDictionariesOptions(dossierTemplateId: string, dossierId: string): Promise { const possibleDictionaries: Dictionary[] = []; - const dossierDictionary = await firstValueFrom(this.getForType(dossierTemplateId, 'dossier_redaction', dossierId)); + const dossierDictionary: Dictionary = await firstValueFrom(this.getDossierDictionary(dossierTemplateId, dossierId)); for (const dictionary of this._dictionariesMapService.get(dossierTemplateId)) { if (!dictionary.virtual && dictionary.addToDictionaryAction) { @@ -183,8 +183,7 @@ export class DictionaryService extends EntitiesService } if (dossierDictionary.addToDictionaryAction) { - // TODO fix this in the backend - possibleDictionaries.push(new Dictionary({ ...dossierDictionary, type: 'dossier_redaction' })); + possibleDictionaries.push(dossierDictionary); } possibleDictionaries.sort((a, b) => a.label.localeCompare(b.label)); @@ -192,6 +191,18 @@ export class DictionaryService extends EntitiesService return possibleDictionaries; } + getDossierDictionary(dossierTemplateId: string, dossierId: string): Observable { + return this.getForType(dossierTemplateId, 'dossier_redaction', dossierId).pipe( + map( + dictionary => + new Dictionary({ + ...dictionary, + type: 'dossier_redaction', + }), + ), + ); + } + loadDictionaryData(dossierTemplatesIds: string[]): Observable { const observables: Observable[] = []; for (const dossierTemplateId of dossierTemplatesIds) { diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 640de2ce2..a718d12f3 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,7 +1,7 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dev-05.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://dev-08.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -17,7 +17,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-05.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview" From 361dc6b022ff4e3717518cb14b0a16745182e6bc Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 21:04:26 +0200 Subject: [PATCH 06/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3266 -> 3266 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fcf59a3ef..e444a0695 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.481.0", + "version": "3.482.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index b20aaa8356c557a6911546151b38f9c13c463055..d162edb2ad8662feaa6c1180eadee64af6d5b3d9 100644 GIT binary patch delta 104 zcmV-u0GI#58NwNmcvNS-TDdQ52j1)#DELvZ8I-1GxI*ZsnCgGAEOq(IkD5JXr2bgi z@O1fmp6#FI|5KEs@~=pYBPQFHQC)x799+OFe@gzIYrAVHf7gcpApcbWRmic-?h6Q# KNzt$XPyhgaPd1?d delta 104 zcmV-u0GI#58NwNmcvQy@y!8tk9=7`e1wRTlgVNLtR|x$SQ~fWNr7nN@QL~4P)E`S5 zo-TjSU9Zma|0&8*`Bx;y5tD7psIEV34ldx8KP7+9wcT|u|F!Fa{8xbo>))}=?h6R- KBtbU-Pyhe|?J From 2b0b8b07863623dab13bb5ea3418bb97b7cfbf5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 16 May 2022 22:07:03 +0300 Subject: [PATCH 07/14] RED-4021: Hints can also be case (in)sensitive --- .../add-edit-entity/add-edit-entity.component.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts b/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts index 1a8194c0d..90ce98b15 100644 --- a/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts +++ b/apps/red-ui/src/app/modules/admin/shared/components/add-edit-entity/add-edit-entity.component.ts @@ -10,7 +10,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DictionaryService } from '@services/entity-services/dictionary.service'; import { BaseFormComponent, LoadingService, Toaster } from '@iqser/common-ui'; -const REDACTION_FIELDS = ['defaultReason', 'caseSensitive', 'addToDictionaryAction']; +const REDACTION_FIELDS = ['defaultReason', 'addToDictionaryAction']; @Component({ selector: 'redaction-add-edit-entity [entity] [dossierTemplateId]', @@ -38,10 +38,6 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit super(); } - get #caseSensitiveControl() { - return { value: this.entity ? !this.entity.caseInsensitive : false, disabled: this.#isSystemManaged }; - } - get #isSystemManaged(): boolean { return !!this.entity?.systemManaged; } @@ -91,12 +87,12 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit recommendationHexColor: [this.entity?.recommendationHexColor, [Validators.required, Validators.minLength(7)]], hint: [{ value: !!this.entity?.hint, disabled: this.#isSystemManaged }], hasDictionary: [{ value: !!this.entity?.hasDictionary, disabled: this.#isSystemManaged }], + caseSensitive: [{ value: this.entity ? !this.entity.caseInsensitive : false, disabled: this.#isSystemManaged }], }; if (!this.entity?.hint) { Object.assign(controlsConfig, { defaultReason: [{ value: null, disabled: true }], - caseSensitive: [this.#caseSensitiveControl], }); if (this.entity?.hasDictionary) { @@ -116,7 +112,6 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit REDACTION_FIELDS.forEach(field => form.removeControl(field)); } else { form.addControl('defaultReason', new FormControl({ value: null, disabled: true })); - form.addControl('caseSensitive', new FormControl(this.#caseSensitiveControl)); if (form.get('hasDictionary').value) { form.addControl('addToDictionaryAction', new FormControl(this.#addToDictionaryActionControl)); @@ -167,7 +162,6 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit private _formToObject(): IDictionary { // Fields that aren't set for hints, need additional check - const caseInsensitive = this.form.get('caseSensitive') ? !this.form.get('caseSensitive').value : null; const addToDictionaryAction = !!this.form.get('addToDictionaryAction')?.value; const hasDictionary = !!this.form.get('hasDictionary')?.value; @@ -180,7 +174,7 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit hint: this.form.get('hint').value, rank: this.form.get('rank').value, dossierTemplateId: this.dossierTemplateId, - caseInsensitive, + caseInsensitive: !this.form.get('caseSensitive').value, addToDictionaryAction, hasDictionary, }; From 33d8d00717deda06c77795dc7542831d58cd4883 Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 21:09:24 +0200 Subject: [PATCH 08/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3266 -> 3267 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e444a0695..cf1a41201 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.482.0", + "version": "3.483.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index d162edb2ad8662feaa6c1180eadee64af6d5b3d9..7a5856de743624adc943a2779340606e46e88fdc 100644 GIT binary patch delta 104 zcmV-u0GI#58N(TncvRQ+eCLJj*#6pofr1|en?Y%6hAV`AimCn=%TkxW{HWPOM(U5H z4NsT9=dSIu{C|paRQ?r-al~ZXGOFtjn}Z8@ Date: Mon, 16 May 2022 22:14:50 +0300 Subject: [PATCH 09/14] RED-3800: Fixed dossier template guards --- .../src/app/guards/dashboard-guard.service.ts | 4 +-- .../guards/dossier-template-exists.guard.ts | 25 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/red-ui/src/app/guards/dashboard-guard.service.ts b/apps/red-ui/src/app/guards/dashboard-guard.service.ts index a9eec07ae..56c22ad95 100644 --- a/apps/red-ui/src/app/guards/dashboard-guard.service.ts +++ b/apps/red-ui/src/app/guards/dashboard-guard.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; +import { CanActivate } from '@angular/router'; import { firstValueFrom } from 'rxjs'; import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service'; @@ -7,7 +7,7 @@ import { DashboardStatsService } from '@services/dossier-templates/dashboard-sta export class DashboardGuard implements CanActivate { constructor(private readonly _dashboardStatsService: DashboardStatsService) {} - async canActivate(route: ActivatedRouteSnapshot): Promise { + async canActivate(): Promise { await firstValueFrom(this._dashboardStatsService.loadAll()); return true; } diff --git a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts index 4099bc313..16213455f 100644 --- a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts +++ b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts @@ -2,19 +2,32 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; import { DOSSIER_TEMPLATE_ID } from '@red/domain'; import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service'; +import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; @Injectable({ providedIn: 'root' }) export class DossierTemplateExistsGuard implements CanActivate { - constructor(private readonly _dashboardStatsService: DashboardStatsService, private readonly _router: Router) {} + constructor( + private readonly _dashboardStatsService: DashboardStatsService, + private readonly _dossierTemplatesService: DossierTemplatesService, + private readonly _router: Router, + ) {} async canActivate(route: ActivatedRouteSnapshot): Promise { const dossierTemplateId: string = route.paramMap.get(DOSSIER_TEMPLATE_ID); const dossiersListView = !route.pathFromRoot.find(r => r.routeConfig?.path === 'admin'); - const dossierTemplateStats = this._dashboardStatsService.find(dossierTemplateId); - if (!dossierTemplateStats || (dossiersListView && dossierTemplateStats.isEmpty)) { - const routerPath = dossiersListView ? [''] : ['main', 'admin', 'dossier-templates']; - await this._router.navigate(routerPath); - return false; + + if (dossiersListView) { + const dossierTemplateStats = this._dashboardStatsService.find(dossierTemplateId); + if (!dossierTemplateStats || (dossiersListView && dossierTemplateStats.isEmpty)) { + await this._router.navigate(['']); + return false; + } + } else { + const dossierTemplate = this._dossierTemplatesService.find(dossierTemplateId); + if (!dossierTemplate) { + await this._router.navigate(['main', 'admin', 'dossier-templates']); + return false; + } } return true; From b2d013fc609e712b596e12d6aad32c4f128e1e80 Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 21:17:21 +0200 Subject: [PATCH 10/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3267 -> 3267 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf1a41201..bfab9fb0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.483.0", + "version": "3.484.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 7a5856de743624adc943a2779340606e46e88fdc..0cf11146ca192129b6d88463c37627fbf5ed8e50 100644 GIT binary patch delta 3147 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 delta 3147 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 Date: Mon, 16 May 2022 23:05:10 +0300 Subject: [PATCH 11/14] RED-4006: Use time to restore from API --- .../src/app/modules/auth/auth.module.ts | 9 +++---- .../red-ui/src/app/services/config.service.ts | 15 ++++++----- .../services/entity-services/trash.service.ts | 4 +-- .../app/utils/configuration.initializer.ts | 1 + apps/red-ui/src/assets/config/config.json | 1 - docker/red-ui/docker-entrypoint.sh | 2 -- libs/red-domain/src/lib/shared/app-config.ts | 26 +++++++++++++++++++ libs/red-domain/src/lib/shared/index.ts | 1 + 8 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 libs/red-domain/src/lib/shared/app-config.ts diff --git a/apps/red-ui/src/app/modules/auth/auth.module.ts b/apps/red-ui/src/app/modules/auth/auth.module.ts index a71370167..11bab1020 100644 --- a/apps/red-ui/src/app/modules/auth/auth.module.ts +++ b/apps/red-ui/src/app/modules/auth/auth.module.ts @@ -5,7 +5,6 @@ import { HttpClientModule } from '@angular/common/http'; import { KeycloakAngularModule, KeycloakOptions, KeycloakService } from 'keycloak-angular'; import { ConfigService } from '@services/config.service'; import { BASE_HREF } from '../../tokens'; -import { firstValueFrom } from 'rxjs'; function getKeycloakOptions(configService: ConfigService, baseUrl: string) { let url: string = configService.values.OAUTH_URL; @@ -37,11 +36,9 @@ function configureAutomaticRedirectToLoginScreen(keyCloakService: KeycloakServic export function keycloakInitializer(keycloakService: KeycloakService, configService: ConfigService, baseUrl: string): () => Promise { return () => - firstValueFrom(configService.loadAppConfig()).then(() => - keycloakService - .init(getKeycloakOptions(configService, baseUrl)) - .then(() => configureAutomaticRedirectToLoginScreen(keycloakService)), - ); + keycloakService + .init(getKeycloakOptions(configService, baseUrl)) + .then(() => configureAutomaticRedirectToLoginScreen(keycloakService)); } @NgModule({ diff --git a/apps/red-ui/src/app/services/config.service.ts b/apps/red-ui/src/app/services/config.service.ts index 8784d3206..98c9d80ff 100644 --- a/apps/red-ui/src/app/services/config.service.ts +++ b/apps/red-ui/src/app/services/config.service.ts @@ -2,10 +2,11 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Title } from '@angular/platform-browser'; import packageInfo from '../../../../../package.json'; -import config from '../../assets/config/config.json'; +import envConfig from '../../assets/config/config.json'; import { CacheApiService, wipeCaches } from '@red/cache'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; +import { AppConfig } from '@red/domain'; const version = packageInfo.version; @@ -19,19 +20,21 @@ export class ConfigService { private readonly _titleService: Title, ) { this._checkFrontendVersion(); + + console.log('[REDACTION] Started with config: ', this._values); } - private _values = { ...config, FRONTEND_APP_VERSION: version } as const; + private _values: AppConfig = { ...envConfig, FRONTEND_APP_VERSION: version } as const; get values() { return this._values; } loadAppConfig(): Observable { - return this._httpClient.get('/assets/config/config.json').pipe( - tap(envConfig => { - console.log('[REDACTION] Started with config: ', envConfig); - this._values = envConfig; + return this._httpClient.get('/app-config').pipe( + tap(appConfig => { + console.log('[REDACTION] Loaded app config: ', appConfig); + this._values = { ...this._values, ...appConfig }; }), ); } diff --git a/apps/red-ui/src/app/services/entity-services/trash.service.ts b/apps/red-ui/src/app/services/entity-services/trash.service.ts index b38805812..6aafce32d 100644 --- a/apps/red-ui/src/app/services/entity-services/trash.service.ts +++ b/apps/red-ui/src/app/services/entity-services/trash.service.ts @@ -64,7 +64,7 @@ export class TrashService extends EntitiesService { dossier => new TrashDossier( dossier, - this._configService.values.DELETE_RETENTION_HOURS as number, + this._configService.values.softDeleteCleanupTime, this._permissionsService.canRestoreDossier(dossier), this._permissionsService.canHardDeleteDossier(dossier), ), @@ -82,7 +82,7 @@ export class TrashService extends EntitiesService { return new TrashFile( file, dossier.dossierTemplateId, - this._configService.values.DELETE_RETENTION_HOURS as number, + this._configService.values.softDeleteCleanupTime, this._permissionsService.canRestoreFile(file, dossier), this._permissionsService.canHardDeleteFile(file, dossier), ); diff --git a/apps/red-ui/src/app/utils/configuration.initializer.ts b/apps/red-ui/src/app/utils/configuration.initializer.ts index 849145c01..c73f33ce9 100644 --- a/apps/red-ui/src/app/utils/configuration.initializer.ts +++ b/apps/red-ui/src/app/utils/configuration.initializer.ts @@ -39,6 +39,7 @@ export function configurationInitializer( switchMap(user => (!user.hasAnyREDRoles ? throwError('Not user has no red roles') : of({}))), mergeMap(() => generalSettingsService.getGeneralConfigurations()), tap(configuration => configService.updateDisplayName(configuration.displayName)), + switchMap(() => configService.loadAppConfig()), switchMap(() => userPreferenceService.reload()), catchError(e => { console.log('[Redaction] Initialization error:', e); diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index a718d12f3..322276d2f 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -5,7 +5,6 @@ "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", - "DELETE_RETENTION_HOURS": 96, "EULA_URL": "EULA_URL", "FRONTEND_APP_VERSION": "1.1", "LICENSE_CUSTOMER": "Development License", diff --git a/docker/red-ui/docker-entrypoint.sh b/docker/red-ui/docker-entrypoint.sh index 72129ca84..90063fae3 100755 --- a/docker/red-ui/docker-entrypoint.sh +++ b/docker/red-ui/docker-entrypoint.sh @@ -6,7 +6,6 @@ API_URL="${API_URL:-/redaction-gateway-v1}" APP_NAME="${APP_NAME:-}" AUTO_READ_TIME="${AUTO_READ_TIME:-1.5}" BACKEND_APP_VERSION="${BACKEND_APP_VERSION:-4.7.0}" -DELETE_RETENTION_HOURS="${DELETE_RETENTION_HOURS:-96}" EULA_URL="${EULA_URL:-}" FRONTEND_APP_VERSION="${FRONTEND_APP_VERSION:-}" @@ -34,7 +33,6 @@ echo '{ "APP_NAME":"'"$APP_NAME"'", "AUTO_READ_TIME":'"$AUTO_READ_TIME"', "BACKEND_APP_VERSION":"'"$BACKEND_APP_VERSION"'", - "DELETE_RETENTION_HOURS":'"$DELETE_RETENTION_HOURS"', "EULA_URL":"'"$EULA_URL:"'", "FRONTEND_APP_VERSION":"'"$FRONTEND_APP_VERSION:"'", "LICENSE_EMAIL":"'"$LICENSE_EMAIL"'", diff --git a/libs/red-domain/src/lib/shared/app-config.ts b/libs/red-domain/src/lib/shared/app-config.ts new file mode 100644 index 000000000..3c13e3db7 --- /dev/null +++ b/libs/red-domain/src/lib/shared/app-config.ts @@ -0,0 +1,26 @@ +export interface AppConfig { + ADMIN_CONTACT_NAME: string; + ADMIN_CONTACT_URL: string; + API_URL: string; + APP_NAME: string; + AUTO_READ_TIME: number; + BACKEND_APP_VERSION: string; + EULA_URL: string; + FRONTEND_APP_VERSION: string; + LICENSE_CUSTOMER: string; + LICENSE_EMAIL: string; + LICENSE_END: string; + LICENSE_PAGE_COUNT: number; + LICENSE_START: string; + MAX_FILE_SIZE_MB: number; + MAX_RETRIES_ON_SERVER_ERROR: number; + OAUTH_CLIENT_ID: string; + OAUTH_IDP_HINT: null; + OAUTH_URL: string; + RECENT_PERIOD_IN_HOURS: number; + SELECTION_MODE: string; + MANUAL_BASE_URL: string; + softDeleteCleanupTime?: number; + downloadCleanupDownloadFilesHours?: number; + downloadCleanupNotDownloadFilesHours?: number; +} diff --git a/libs/red-domain/src/lib/shared/index.ts b/libs/red-domain/src/lib/shared/index.ts index b5bafb4d3..670578d71 100644 --- a/libs/red-domain/src/lib/shared/index.ts +++ b/libs/red-domain/src/lib/shared/index.ts @@ -11,3 +11,4 @@ export * from './pdf.types'; export * from './logger-config'; export * from './admin-side-nav-types'; export * from './charts'; +export * from './app-config'; From 8644b48cb7b2b11810b8f1b1583fdc42ababa78e Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 22:07:26 +0200 Subject: [PATCH 12/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3267 -> 3266 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bfab9fb0e..3d5400972 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.484.0", + "version": "3.485.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 0cf11146ca192129b6d88463c37627fbf5ed8e50..d7e19b56def74736cf8dcc7a9044e2faf8af95b9 100644 GIT binary patch delta 3177 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 delta 3178 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 QmuHs$0ti$^MF3C$00ChiO8@`> From 9cd56c1cedca1bdce8c33487d198cbd774ed093c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 16 May 2022 23:22:36 +0300 Subject: [PATCH 13/14] RED-4025: My dossiers quickfilter help mode key --- .../src/app/modules/archive/services/config.service.ts | 2 +- .../src/app/modules/dossiers-listing/config.service.ts | 2 +- apps/red-ui/src/assets/help-mode/links.json | 6 ------ libs/common-ui | 2 +- 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/apps/red-ui/src/app/modules/archive/services/config.service.ts b/apps/red-ui/src/app/modules/archive/services/config.service.ts index 29ebf051e..17ef28130 100644 --- a/apps/red-ui/src/app/modules/archive/services/config.service.ts +++ b/apps/red-ui/src/app/modules/archive/services/config.service.ts @@ -107,7 +107,7 @@ export class ConfigService { label: myDossiersLabel, checker: this._myDossiersChecker, disabled: entities.filter(this._myDossiersChecker).length === 0, - helpModeKey: 'dossiers_quickfilter_my_dossiers', + helpModeKey: 'filter_dossier_list', }, ].map(filter => new NestedFilter(filter)); } diff --git a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts index ee7c06423..df6c1dcb1 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts @@ -203,7 +203,7 @@ export class ConfigService { label: myDossiersLabel, checker: this._myDossiersChecker, disabled: entities.filter(this._myDossiersChecker).length === 0, - helpModeKey: 'dossiers_quickfilter_my_dossiers', + helpModeKey: 'filter_dossier_list', }, { id: 'to-approve', diff --git a/apps/red-ui/src/assets/help-mode/links.json b/apps/red-ui/src/assets/help-mode/links.json index 0f6d5a053..88b38f24c 100644 --- a/apps/red-ui/src/assets/help-mode/links.json +++ b/apps/red-ui/src/assets/help-mode/links.json @@ -83,12 +83,6 @@ "it": "", "fr": "" }, - "dossiers_quickfilter_my_dossiers": { - "en": "/en/index-en.html?contextId=dossiers_quickfilter_my_dossiers", - "de": "", - "it": "", - "fr": "" - }, "edit_dossier_in_dossier": { "en": "/en/index-en.html?contextId=edit_dossier_in_dossier", "de": "", diff --git a/libs/common-ui b/libs/common-ui index 58f7b5d8b..196f5424a 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 58f7b5d8b9c88ef5c1f6ff7780e3417511523ee1 +Subproject commit 196f5424abf2172aad4df453eabb729e2903707f From 6dd41209e8b3660e743eb05cc610d212ba809467 Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 16 May 2022 22:25:09 +0200 Subject: [PATCH 14/14] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3266 -> 3266 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3d5400972..8c55b9aaf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.485.0", + "version": "3.486.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index d7e19b56def74736cf8dcc7a9044e2faf8af95b9..13200c6c5c380dcb4c200782c1b641c84f6af3b5 100644 GIT binary patch delta 3158 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