diff --git a/apps/red-ui/src/app/components/notifications/notifications.component.ts b/apps/red-ui/src/app/components/notifications/notifications.component.ts index 5d807fcbd..963e9d5da 100644 --- a/apps/red-ui/src/app/components/notifications/notifications.component.ts +++ b/apps/red-ui/src/app/components/notifications/notifications.component.ts @@ -7,7 +7,8 @@ import { NotificationsService } from '@services/notifications.service'; import { Notification } from '@red/domain'; import { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators'; import { BehaviorSubject, Observable, timer } from 'rxjs'; -import { AutoUnsubscribe, CHANGED_CHECK_INTERVAL, List, shareLast } from '@iqser/common-ui'; +import { AutoUnsubscribe, List, shareLast } from '@iqser/common-ui'; +import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; const INCLUDE_SEEN = false; diff --git a/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.html b/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.html index 8c76795dc..db13ee0bd 100644 --- a/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.html +++ b/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.html @@ -18,8 +18,9 @@
-
-
+ + +
-
+ + diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 276e1b59d..74ee574cc 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -175,6 +175,7 @@ const routes: Routes = [ canActivate: [CompositeRouteGuard], data: { routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_MANAGER'], }, }, ]; diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.html b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.html index 7b53e6abd..d85baac5a 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.html @@ -15,9 +15,10 @@ /> -
- - +
+ {{ 'general-config-screen.general.form.forgot-password' | translate }} +
diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.html index 58e0678e1..af303ea03 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.html @@ -21,10 +21,10 @@
-
+
-
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.scss b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.scss index ba039443f..98e4dc474 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.scss +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-screen.component.scss @@ -10,20 +10,6 @@ overflow: auto; } -.w-100 { - min-width: 100px; - width: 100px; -} - -.inline-input-group { - background-color: rgba(variables.$grey-6, 0.8); - width: 100%; - height: 38px; - border-radius: 4px; - padding: 1px 11px; - margin-top: 20px; -} - .dialog { width: 100%; min-height: unset; diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts index c1903040d..18b30ea9a 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts @@ -1,5 +1,5 @@ -import { Component, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core'; -import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; +import { Component, ElementRef, Input, OnInit, QueryList, ViewChildren } from '@angular/core'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { Dossier, DossierAttributeConfigType, DossierAttributeConfigTypes, DossierAttributeWithValue } from '@red/domain'; import { PermissionsService } from '@services/permissions.service'; import { CircleButtonTypes, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; @@ -19,7 +19,6 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa readonly dossierAttributeConfigTypes = DossierAttributeConfigTypes; @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); customAttributes: DossierAttributeWithValue[] = []; imageAttributes: DossierAttributeWithValue[] = []; attributes: DossierAttributeWithValue[] = []; @@ -64,7 +63,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa this._loadingService.stop(); } - async save() { + async save(): EditDossierSaveResult { const dossierAttributeList = this.attributes.map(attr => ({ dossierAttributeConfigId: attr.id, value: this.currentAttrValue(attr), @@ -72,9 +71,10 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa try { await this._dossierAttributesService.setAttributes(this.dossier, dossierAttributeList).toPromise(); await this._loadAttributes(); - this.updateDossier.emit(); - } catch (e) { + return { success: true }; + } catch (error) { this._toaster.error(_('edit-dossier-dialog.attributes.error.generic')); + return { success: false }; } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts index 6a9336c7e..7a8035ada 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts @@ -1,5 +1,5 @@ -import { Component, EventEmitter, forwardRef, Injector, Input, OnInit, Output } from '@angular/core'; -import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; +import { Component, forwardRef, Injector, Input, OnInit } from '@angular/core'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { Dossier, IFile } from '@red/domain'; import { CircleButtonTypes, @@ -16,7 +16,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import * as moment from 'moment'; import { ConfigService } from '@services/config.service'; import { getLeftDateTime } from '@utils/functions'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { FilesService } from '@services/entity-services/files.service'; @@ -38,7 +38,6 @@ interface FileListItem extends IFile, IListable { }) export class EditDossierDeletedDocumentsComponent extends ListingComponent implements EditDossierSectionInterface, OnInit { @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); readonly changed = false; readonly canRestoreSelected$ = this._canRestoreSelected$; disabled: boolean; @@ -101,7 +100,9 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent f.fileId); await this._fileManagementService.hardDelete(this.dossier.id, fileIds).toPromise(); this._removeFromList(fileIds); - this.updateDossier.emit(); } private _removeFromList(ids: string[]): void { 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 bf9246d99..ba2dc7296 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,11 +1,12 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { Dossier, IDictionary } from '@red/domain'; -import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; import { DictionaryService } from '@shared/services/dictionary.service'; -import { CircleButtonTypes, LoadingService } from '@iqser/common-ui'; +import { CircleButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { DossiersService } from '@services/entity-services/dossiers.service'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @Component({ selector: 'redaction-edit-dossier-dictionary', @@ -14,7 +15,6 @@ import { DossiersService } from '@services/entity-services/dossiers.service'; }) export class EditDossierDictionaryComponent implements EditDossierSectionInterface, OnInit { @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); canEdit = false; readonly circleButtonTypes = CircleButtonTypes; dossierDictionary: IDictionary; @@ -26,6 +26,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private readonly _dictionaryService: DictionaryService, private readonly _permissionsService: PermissionsService, private readonly _loadingService: LoadingService, + private readonly _toaster: Toaster, ) {} get changed() { @@ -44,27 +45,38 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa } async updateDisplayName(label: string) { - const dictionary: IDictionary = { ...this.dossierDictionary, label }; - await this._dictionaryService - .updateDictionary(dictionary, this.dossier.dossierTemplateId, 'dossier_redaction', this.dossier.id) - .toPromise(); - await this._updateDossierDictionary(); - this.updateDossier.emit(); + try { + this._loadingService.start(); + // TODO: Setting the type manually shouldn't be necessary, but for now it fails with status code 500... + const dictionary: IDictionary = { ...this.dossierDictionary, type: 'dossier_redaction', label }; + await this._dictionaryService + .updateDictionary(dictionary, this.dossier.dossierTemplateId, 'dossier_redaction', this.dossier.id) + .toPromise(); + await this._updateDossierDictionary(); + this._toaster.success(_('edit-dossier-dialog.dictionary.display-name.success')); + } catch (error) { + this._toaster.error(_('edit-dossier-dialog.dictionary.display-name.error')); + } + this._loadingService.stop(); } - async save() { - await this._dictionaryService - .saveEntries( - this._dictionaryManager.editor.currentEntries, - this._dictionaryManager.initialEntries, - this.dossier.dossierTemplateId, - 'dossier_redaction', - this.dossier.id, - false, - ) - .toPromise(); - await this._updateDossierDictionary(); - this.updateDossier.emit(); + async save(): EditDossierSaveResult { + try { + await this._dictionaryService + .saveEntries( + this._dictionaryManager.editor.currentEntries, + this._dictionaryManager.initialEntries, + this.dossier.dossierTemplateId, + 'dossier_redaction', + this.dossier.id, + false, + ) + .toPromise(); + await this._updateDossierDictionary(); + return { success: true }; + } catch (error) { + return { success: false }; + } } revert() { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index 7e5e49fdb..402e8a3c8 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -1,7 +1,7 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; import { Dossier, DownloadFileType, IReportTemplate } from '@red/domain'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { downloadTypesTranslations } from '../../../../../translations/download-types-translations'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { ReportTemplateService } from '@services/report-template.service'; @@ -20,7 +20,6 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS availableReportTypes: IReportTemplate[] = []; @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); constructor( private readonly _dossiersService: DossiersService, @@ -70,6 +69,27 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS this.dossierForm = this._getForm(); } + async save(): EditDossierSaveResult { + const dossier = { + ...this.dossier, + downloadFileTypes: this.dossierForm.get('downloadFileTypes').value, + reportTemplateIds: this.dossierForm.get('reportTemplateIds').value, + }; + try { + await this._dossiersService.createOrUpdate(dossier).toPromise(); + return { success: true }; + } catch (error) { + return { success: false }; + } + } + + revert() { + this.dossierForm.reset({ + downloadFileTypes: this.dossier.downloadFileTypes, + reportTemplateIds: this.dossier.reportTemplateIds, + }); + } + private _getForm(): FormGroup { return this._formBuilder.group( { @@ -84,21 +104,4 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS }, ); } - - async save() { - const dossier = { - ...this.dossier, - downloadFileTypes: this.dossierForm.get('downloadFileTypes').value, - reportTemplateIds: this.dossierForm.get('reportTemplateIds').value, - }; - await this._dossiersService.createOrUpdate(dossier).toPromise(); - this.updateDossier.emit(); - } - - revert() { - this.dossierForm.reset({ - downloadFileTypes: this.dossier.downloadFileTypes, - reportTemplateIds: this.dossier.reportTemplateIds, - }); - } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html index 7e5df0c58..010261882 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html @@ -21,37 +21,28 @@
- + diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 5494a637d..4c7a6b9a7 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -11,9 +11,9 @@ import { EditDossierAttributesComponent } from './attributes/edit-dossier-attrib import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { EditDossierDeletedDocumentsComponent } from './deleted-documents/edit-dossier-deleted-documents.component'; import { DossiersService } from '@services/entity-services/dossiers.service'; -import { TeamMembersManagerComponent } from '../../components/team-members-manager/team-members-manager.component'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; +import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments'; @@ -30,7 +30,7 @@ export class EditDossierDialogComponent { @ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent; @ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent; @ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent; - @ViewChild(TeamMembersManagerComponent) membersComponent: TeamMembersManagerComponent; + @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; @ViewChild(EditDossierDeletedDocumentsComponent) deletedDocumentsComponent: EditDossierDeletedDocumentsComponent; private _dossierName: string; @@ -44,7 +44,6 @@ export class EditDossierDialogComponent { @Inject(MAT_DIALOG_DATA) private readonly _data: { dossierId: string; - afterSave: Function; section?: Section; }, ) { @@ -112,23 +111,20 @@ export class EditDossierDialogComponent { return !['deletedDocuments'].includes(this.activeNav); } - updatedDossier() { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossierName } }); - this.afterSave(); - } - afterSave() { - if (this._data?.afterSave) { - this._data.afterSave(); - } + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossierName } }); } async save(closeAfterSave: boolean = false) { this._loadingService.start(); - await this.activeComponent.save(); + const result = await this.activeComponent.save(); this._loadingService.stop(); - if (closeAfterSave) { + if (result.success) { + this.afterSave(); + } + + if (result.success && closeAfterSave) { this._dialogRef.close(); } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts index ffe1b7354..84d05ca47 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts @@ -1,6 +1,8 @@ +export type EditDossierSaveResult = Promise<{ success: boolean }>; + export interface EditDossierSectionInterface { changed: boolean; disabled: boolean; - save: Function; + save: (...args: any) => EditDossierSaveResult; revert: Function; } diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html similarity index 100% rename from apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html rename to apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.scss b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss similarity index 91% rename from apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.scss rename to apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss index 59b089f07..fad35d935 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.scss +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss @@ -1,5 +1,5 @@ -@use 'common-mixins'; -@use 'variables'; +@use 'libs/common-ui/src/assets/styles/common-mixins'; +@use 'apps/red-ui/src/assets/styles/variables'; .search-container { margin-top: 16px; diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts similarity index 86% rename from apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts rename to apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index 21bb9c8df..0d9f1a7cc 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -1,24 +1,23 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core'; import { UserService } from '@services/user.service'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { DossiersService } from '@services/entity-services/dossiers.service'; -import { Dossier, IDossier, IDossierRequest } from '@red/domain'; +import { Dossier, IDossierRequest } from '@red/domain'; import { AutoUnsubscribe } from '@iqser/common-ui'; -import { EditDossierSectionInterface } from '../../dialogs/edit-dossier-dialog/edit-dossier-section.interface'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { BehaviorSubject } from 'rxjs'; @Component({ - selector: 'redaction-team-members-manager', - templateUrl: './team-members-manager.component.html', - styleUrls: ['./team-members-manager.component.scss'], + selector: 'redaction-edit-dossier-team', + templateUrl: './edit-dossier-team.component.html', + styleUrls: ['./edit-dossier-team.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class TeamMembersManagerComponent extends AutoUnsubscribe implements EditDossierSectionInterface, OnInit, OnDestroy { +export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDossierSectionInterface, OnInit, OnDestroy { form: FormGroup; searchQuery = ''; @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); membersSelectOptions: string[] = []; @@ -69,7 +68,7 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit return userId === this.selectedOwnerId; } - async save() { + async save(): EditDossierSaveResult { const dossier = { ...this.dossier, memberIds: this.selectedMembersList, @@ -77,9 +76,11 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit ownerId: this.selectedOwnerId, } as IDossierRequest; - const result = await this._dossiersService.createOrUpdate(dossier).toPromise(); - if (result) { - this.updateDossier.emit(); + try { + await this._dossiersService.createOrUpdate(dossier).toPromise(); + return { success: true }; + } catch (error) { + return { success: false }; } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index cb62879f8..48ca6a9b3 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -1,8 +1,8 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import * as moment from 'moment'; import { Dossier, IDossierRequest, IDossierTemplate } from '@red/domain'; -import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { PermissionsService } from '@services/permissions.service'; import { Router } from '@angular/router'; @@ -22,13 +22,12 @@ import { DossierStatsService } from '@services/entity-services/dossier-stats.ser export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSectionInterface { readonly iconButtonTypes = IconButtonTypes; + @Input() dossier: Dossier; + dossierForm: FormGroup; hasDueDate: boolean; dossierTemplates: IDossierTemplate[]; - @Input() dossier: Dossier; - @Output() readonly updateDossier = new EventEmitter(); - constructor( readonly permissionsService: PermissionsService, private readonly _dossierTemplatesService: DossierTemplatesService, @@ -83,7 +82,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti }); } - async save() { + async save(): EditDossierSaveResult { const dossier = { ...this.dossier, dossierName: this.dossierForm.get('dossierName').value, @@ -95,8 +94,10 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti } as IDossierRequest; try { await this._dossiersService.createOrUpdate(dossier).toPromise(); - this.updateDossier.emit(); - } catch (e) {} + return { success: true }; + } catch (error) { + return { success: false }; + } } deleteDossier() { diff --git a/apps/red-ui/src/app/modules/dossier/dossiers.module.ts b/apps/red-ui/src/app/modules/dossier/dossiers.module.ts index 9def60668..02a08fd5c 100644 --- a/apps/red-ui/src/app/modules/dossier/dossiers.module.ts +++ b/apps/red-ui/src/app/modules/dossier/dossiers.module.ts @@ -19,7 +19,6 @@ import { EditDossierDialogComponent } from './dialogs/edit-dossier-dialog/edit-d import { EditDossierGeneralInfoComponent } from './dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component'; import { EditDossierDownloadPackageComponent } from './dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component'; import { EditDossierDictionaryComponent } from './dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component'; -import { TeamMembersManagerComponent } from './components/team-members-manager/team-members-manager.component'; import { ChangeLegalBasisDialogComponent } from './dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component'; import { RecategorizeImageDialogComponent } from './dialogs/recategorize-image-dialog/recategorize-image-dialog.component'; import { EditDossierAttributesComponent } from './dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component'; @@ -31,6 +30,7 @@ import { ResizeAnnotationDialogComponent } from './dialogs/resize-annotation-dia import { BreadcrumbsService } from '@services/breadcrumbs.service'; import { of } from 'rxjs'; import { TranslateService } from '@ngx-translate/core'; +import { EditDossierTeamComponent } from './dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component'; const screens = [SearchScreenComponent]; @@ -52,7 +52,7 @@ const components = [ EditDossierDownloadPackageComponent, EditDossierDictionaryComponent, EditDossierAttributesComponent, - TeamMembersManagerComponent, + EditDossierTeamComponent, EditDossierDeletedDocumentsComponent, ...screens, diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.scss b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.scss index 2c5d7243a..590bd275b 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.scss +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.scss @@ -41,7 +41,3 @@ } } } - -.mt-12 { - margin-top: 12px; -} diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/view-mode-selection/view-mode-selection.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/view-mode-selection/view-mode-selection.component.html index 9df37d5f9..f88ad8274 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/view-mode-selection/view-mode-selection.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/view-mode-selection/view-mode-selection.component.html @@ -5,7 +5,7 @@ (action)="setListingMode(listingModes.table)" [attr.aria-expanded]="mode === listingModes.table" [tooltip]="'view-mode.list' | translate" - [type]="circleButtonTypes.dossierView" + [greySelected]="true" icon="iqser:list" > @@ -13,7 +13,7 @@ (action)="setListingMode(listingModes.workflow)" [attr.aria-expanded]="mode === listingModes.workflow" [tooltip]="'view-mode.workflow' | translate" - [type]="circleButtonTypes.dossierView" + [greySelected]="true" icon="iqser:lanes" >
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts index c3e4f8505..147dba9b7 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts @@ -20,7 +20,6 @@ import { Observable, timer } from 'rxjs'; import { filter, switchMap, tap } from 'rxjs/operators'; import { convertFiles, Files, handleFileDrop } from '@utils/index'; import { - CHANGED_CHECK_INTERVAL, CircleButtonTypes, DefaultListingServices, ListingComponent, @@ -46,6 +45,7 @@ import { LongPressEvent } from '@shared/directives/long-press.directive'; import { UserPreferenceService } from '@services/user-preference.service'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { FilesService } from '@services/entity-services/files.service'; +import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; @Component({ templateUrl: './dossier-overview-screen.component.html', diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts index 6b347473f..fd02bf16f 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; import { CircleButtonTypes, List, StatusBarConfig } from '@iqser/common-ui'; import { UserService } from '@services/user.service'; @@ -28,8 +28,6 @@ export class DossiersListingActionsComponent implements OnChanges { @Input() dossier: Dossier; @Input() stats: DossierStats; - @Output() readonly actionPerformed = new EventEmitter(); - constructor( private readonly _reanalysisService: ReanalysisService, private readonly _userService: UserService, @@ -57,10 +55,7 @@ export class DossiersListingActionsComponent implements OnChanges { } openEditDossierDialog($event: MouseEvent, dossierId: string): void { - this._dialogService.openDialog('editDossier', $event, { - dossierId, - afterSave: () => this.actionPerformed.emit(), - }); + this._dialogService.openDialog('editDossier', $event, { dossierId }); } async reanalyseDossier($event: MouseEvent, id: string): Promise { diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html index 41571ae8d..fcff19968 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html @@ -12,10 +12,6 @@
- +
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts index dac916669..d1e991d3c 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts @@ -1,10 +1,8 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; import { Dossier, DossierStats } from '@red/domain'; import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; -import { BehaviorSubject, merge, Observable, timer } from 'rxjs'; -import { filter, switchMap } from 'rxjs/operators'; -import { CHANGED_CHECK_INTERVAL } from '@iqser/common-ui'; -import { FilesService } from '@services/entity-services/files.service'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; @Component({ selector: 'redaction-table-item [dossier]', @@ -14,29 +12,17 @@ import { FilesService } from '@services/entity-services/files.service'; }) export class TableItemComponent implements OnChanges { @Input() dossier!: Dossier; - @Output() readonly calculateData = new EventEmitter(); readonly stats$: Observable; private readonly _ngOnChanges$ = new BehaviorSubject(undefined); - constructor(readonly dossierStatsService: DossierStatsService, readonly filesService: FilesService) { - const hasChanges$ = this._hasChanges$; - this.stats$ = merge(this._ngOnChanges$, hasChanges$).pipe( - filter(() => !!this.dossier), - switchMap(() => this.dossierStatsService.watch$(this.dossier.dossierId)), - ); - } - - private get _hasChanges$() { - return timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL).pipe( - filter(() => !!this.dossier), - switchMap(() => this.filesService.hasChanges$(this.dossier.dossierId)), - filter(changed => changed), - switchMap(() => this.dossierStatsService.getFor([this.dossier.dossierId])), - ); + constructor(readonly dossierStatsService: DossierStatsService) { + this.stats$ = this._ngOnChanges$.pipe(switchMap(dossierId => this.dossierStatsService.watch$(dossierId))); } ngOnChanges() { - this._ngOnChanges$.next(this.dossier.dossierId); + if (this.dossier) { + this._ngOnChanges$.next(this.dossier.dossierId); + } } } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.html index da289757f..16f8d9509 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.html @@ -29,5 +29,5 @@ - + diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts index 8f2d96158..c7ba3f10b 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -6,21 +6,14 @@ import { TranslateChartService } from '@services/translate-chart.service'; import { timer } from 'rxjs'; import { Router } from '@angular/router'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; -import { - CHANGED_CHECK_INTERVAL, - DefaultListingServicesTmp, - EntitiesService, - ListingComponent, - OnAttach, - OnDetach, - TableComponent, -} from '@iqser/common-ui'; +import { DefaultListingServicesTmp, EntitiesService, ListingComponent, OnAttach, OnDetach, TableComponent } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfigService } from '../config.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { switchMap, tap } from 'rxjs/operators'; +import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; @Component({ templateUrl: './dossiers-listing-screen.component.html', @@ -64,14 +57,11 @@ export class DossiersListingScreenComponent extends ListingComponent im } ngOnInit(): void { - this.computeAllFilters(); - this.addSubscription = timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL) - .pipe( - switchMap(() => this._dossiersService.loadAllIfChanged()), - tap(() => this.computeAllFilters()), - ) + .pipe(switchMap(() => this._dossiersService.loadAllIfChanged())) .subscribe(); + + this.addSubscription = this._dossiersService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); } ngOnAttach(): void { @@ -95,7 +85,7 @@ export class DossiersListingScreenComponent extends ListingComponent im }); } - computeAllFilters() { + private _computeAllFilters() { const filterGroups = this._configService.filterGroups(this.entitiesService.all, this._needsWorkFilterTemplate); this.filterService.addFilterGroups(filterGroups); } diff --git a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts index 6524e07d2..ec11bf6e7 100644 --- a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, OnInit } from '@angular/core'; -import { Color } from '@utils/types'; +import { Color } from '@red/domain'; import { FilterService, INestedFilter } from '@iqser/common-ui'; import { Observable, of } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/apps/red-ui/src/app/modules/shared/pipes/date.pipe.ts b/apps/red-ui/src/app/modules/shared/pipes/date.pipe.ts index d4017a2f1..b2a1364ee 100644 --- a/apps/red-ui/src/app/modules/shared/pipes/date.pipe.ts +++ b/apps/red-ui/src/app/modules/shared/pipes/date.pipe.ts @@ -90,13 +90,15 @@ export class DatePipe extends BaseDatePipe implements PipeTransform { return this._translateService.instant('yesterday'); } - const isShortMonthFormat = day < thisDay - 1 && (year === thisYear || month >= thisMonth - 3); + const isShortMonthFormat = + year === thisYear && + ((month === thisMonth && day !== thisDay && day !== thisDay - 1) || (month !== thisMonth && month >= thisMonth - 2)); if (isShortMonthFormat) { const translatedMonth = this._translateService.instant(MONTH_NAMES[month]); return `${day} ${translatedMonth}`; } - const isShortMonthYearFormat = year === thisYear - 1 && month < thisMonth - 3; + const isShortMonthYearFormat = (year === thisYear && month <= thisMonth - 3) || year === thisYear - 1; if (isShortMonthYearFormat) { const translatedMonth = this._translateService.instant(MONTH_NAMES[month]); return `${translatedMonth} ${year}`; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index f1ab0c5bb..d979b2ebf 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -30,9 +30,15 @@ export class PermissionsService { return file.assignee === this._userService.currentUser.id; } + // https://jira.iqser.com/browse/RED-2787 canDeleteFile(file: File): boolean { const dossier = this._getDossier(file); - return (this.isOwner(dossier) && !file.isApproved) || file.isNew; + return ( + file.isNew || + (file.isUnderReview && !file.assignee && this.isDossierMember(dossier)) || + (file.isUnderApproval && !file.assignee && this.isApprover(dossier)) || + (file.assignee && !file.isApproved && (this.isFileAssignee(file) || this.isOwner(dossier))) + ); } canAssignToSelf(file: File, dossier = this._getDossier(file)): boolean { diff --git a/apps/red-ui/src/app/translations/notifications-translations.ts b/apps/red-ui/src/app/translations/notifications-translations.ts index 04d9977ea..adf4ca5bb 100644 --- a/apps/red-ui/src/app/translations/notifications-translations.ts +++ b/apps/red-ui/src/app/translations/notifications-translations.ts @@ -5,7 +5,6 @@ export const notificationsTranslations: { [key in NotificationType]: string } = [NotificationTypes.ASSIGN_APPROVER]: _('notification.assign-approver'), [NotificationTypes.ASSIGN_REVIEWER]: _('notification.assign-reviewer'), [NotificationTypes.DOCUMENT_APPROVED]: _('notification.document-approved'), - [NotificationTypes.DOSSIER_OWNER_DELETED]: _('notification.dossier-owner-deleted'), [NotificationTypes.DOSSIER_OWNER_REMOVED]: _('notification.dossier-owner-removed'), [NotificationTypes.DOSSIER_OWNER_SET]: _('notification.dossier-owner-set'), [NotificationTypes.UNASSIGNED_FROM_FILE]: _('notification.unassigned-from-file'), diff --git a/apps/red-ui/src/app/utils/constants.ts b/apps/red-ui/src/app/utils/constants.ts new file mode 100644 index 000000000..454c91719 --- /dev/null +++ b/apps/red-ui/src/app/utils/constants.ts @@ -0,0 +1 @@ +export const CHANGED_CHECK_INTERVAL = 3000; diff --git a/apps/red-ui/src/app/utils/types.d.ts b/apps/red-ui/src/app/utils/types.d.ts deleted file mode 100644 index 9b37405ff..000000000 --- a/apps/red-ui/src/app/utils/types.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { DossierStatus, FileStatus } from '@red/domain'; - -export type Color = FileStatus | DossierStatus | string; diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index f81c13f51..ffe70bc4d 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -768,7 +768,7 @@ }, "dictionaries": "{length} {length, plural, one{dictionary} other{dictionaries}}", "error": { - "conflict": "Cannot delete this DossierTemplate! At least on Dossier uses this template!", + "conflict": "Cannot delete this DossierTemplate! At least one Dossier uses this template!", "generic": "Cannot delete this DossierTemplate!" }, "no-data": { @@ -1287,7 +1287,6 @@ "assign-reviewer": "You have been assigned as reviewer for {fileName} in the {dossierName}!", "document-approved": " {fileName} has been approved!", "dossier-deleted": "Dossier: {dossierName} has been deleted!", - "dossier-owner-deleted": "{dossierName} owner removed!", "dossier-owner-removed": "{dossierName} owner removed!", "dossier-owner-set": " {dossierName} owner changed to {user}!", "no-data": "You currently have no notifications", @@ -1311,7 +1310,7 @@ "own": "Dossiers you own", "reviewer": "Dossiers you are reviewer on" }, - "options-title": "Choose on which category you want to be notified", + "options-title": "Choose on which action you want to be notified", "options": { "document-is-sent-for-approval": "Document is sent for approval", "document-status-changes": "Document status changes", diff --git a/libs/red-domain/src/lib/notifications/types.ts b/libs/red-domain/src/lib/notifications/types.ts index e9788ca3d..fb1465a6f 100644 --- a/libs/red-domain/src/lib/notifications/types.ts +++ b/libs/red-domain/src/lib/notifications/types.ts @@ -1,16 +1,15 @@ export const NotificationTypes = { - ASSIGN_REVIEWER: 'ASSIGN_REVIEWER', - ASSIGN_APPROVER: 'ASSIGN_APPROVER', - UNASSIGNED_FROM_FILE: 'UNASSIGNED_FROM_FILE', - DOCUMENT_APPROVED: 'DOCUMENT_APPROVED', - DOSSIER_OWNER_SET: 'DOSSIER_OWNER_SET', - DOSSIER_OWNER_REMOVED: 'DOSSIER_OWNER_REMOVED', - USER_BECOMES_DOSSIER_MEMBER: 'USER_BECOMES_DOSSIER_MEMBER', - DOSSIER_DELETED: 'DOSSIER_DELETED', - USER_REMOVED_AS_DOSSIER_MEMBER: 'USER_REMOVED_AS_DOSSIER_MEMBER', - USER_PROMOTED_TO_APPROVER: 'USER_PROMOTED_TO_APPROVER', - USER_DEGRADED_TO_REVIEWER: 'USER_DEGRADED_TO_REVIEWER', - DOSSIER_OWNER_DELETED: 'DOSSIER_OWNER_DELETED', + ASSIGN_REVIEWER: 'ASSIGN_REVIEWER', // "You are assigned as review" + ASSIGN_APPROVER: 'ASSIGN_APPROVER', // "You are assigned as approver" + UNASSIGNED_FROM_FILE: 'UNASSIGNED_FROM_FILE', // "You are unassigned" + DOCUMENT_APPROVED: 'DOCUMENT_APPROVED', // "A document has been approved" + DOSSIER_OWNER_SET: 'DOSSIER_OWNER_SET', // "Dossier owner has changed" + DOSSIER_OWNER_REMOVED: 'DOSSIER_OWNER_REMOVED', // "Dossier owner has been removed" + USER_BECOMES_DOSSIER_MEMBER: 'USER_BECOMES_DOSSIER_MEMBER', // "You have been assigned to a dossier" + DOSSIER_DELETED: 'DOSSIER_DELETED', // "A dossier has been deleted" + USER_REMOVED_AS_DOSSIER_MEMBER: 'USER_REMOVED_AS_DOSSIER_MEMBER', // "You have been removed from a dossier" + USER_PROMOTED_TO_APPROVER: 'USER_PROMOTED_TO_APPROVER', // "You are promoted to approver" + USER_DEGRADED_TO_REVIEWER: 'USER_DEGRADED_TO_REVIEWER', // "You are denoted to reviewer" } as const; export type NotificationType = keyof typeof NotificationTypes; diff --git a/libs/red-domain/src/lib/shared/colors.ts b/libs/red-domain/src/lib/shared/colors.ts new file mode 100644 index 000000000..f80429122 --- /dev/null +++ b/libs/red-domain/src/lib/shared/colors.ts @@ -0,0 +1,4 @@ +import { DossierStatus } from '../dossiers'; +import { WorkflowFileStatus } from '../files'; + +export type Color = WorkflowFileStatus | DossierStatus | string; diff --git a/libs/red-domain/src/lib/shared/index.ts b/libs/red-domain/src/lib/shared/index.ts index 585848bd6..235e2d28c 100644 --- a/libs/red-domain/src/lib/shared/index.ts +++ b/libs/red-domain/src/lib/shared/index.ts @@ -3,5 +3,6 @@ export * from './types'; export * from './rules'; export * from './watermark'; export * from './default-color-type'; +export * from './colors'; export * from './view-mode'; export * from './expandable-file-actions'; diff --git a/package.json b/package.json index 553ae4d95..fd90ceca4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.86.0", + "version": "3.90.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 063b34e78..b9f8a6173 100644 Binary files a/paligo-theme.tar.gz and b/paligo-theme.tar.gz differ