diff --git a/angular.json b/angular.json index ee50cef8c..0e78f4204 100644 --- a/angular.json +++ b/angular.json @@ -42,6 +42,29 @@ } } }, + "red-domain": { + "projectType": "library", + "root": "libs/red-domain", + "sourceRoot": "libs/red-domain/src", + "prefix": "red", + "architect": { + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/libs/red-domain"], + "options": { + "jestConfig": "libs/red-domain/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": ["libs/red-domain/src/**/*.ts", "libs/red-domain/src/**/*.html"] + }, + "outputs": ["{options.outputFile}"] + } + } + }, "red-cache": { "projectType": "library", "root": "libs/red-cache", 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 931eb9f4d..11a22c6e9 100644 --- a/apps/red-ui/src/app/components/notifications/notifications.component.ts +++ b/apps/red-ui/src/app/components/notifications/notifications.component.ts @@ -5,7 +5,7 @@ import { AppStateService } from '@state/app-state.service'; import { UserService } from '@services/user.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { NotificationsService } from '@services/notifications.service'; -import { Notification } from '@components/notifications/notification'; +import { Notification } from '@red/domain'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { BehaviorSubject, Observable } from 'rxjs'; diff --git a/apps/red-ui/src/app/models/dossier-attributes.model.ts b/apps/red-ui/src/app/models/dossier-attributes.model.ts deleted file mode 100644 index cf99a25cc..000000000 --- a/apps/red-ui/src/app/models/dossier-attributes.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { IDossierAttributeConfig } from '@redaction/red-ui-http'; - -export type DossierAttributeWithValue = IDossierAttributeConfig & { value: any }; diff --git a/apps/red-ui/src/app/models/file/annotation.permissions.ts b/apps/red-ui/src/app/models/file/annotation.permissions.ts index e8bdc1fd0..62b5645c5 100644 --- a/apps/red-ui/src/app/models/file/annotation.permissions.ts +++ b/apps/red-ui/src/app/models/file/annotation.permissions.ts @@ -1,6 +1,6 @@ import { AnnotationWrapper } from './annotation.wrapper'; import { isArray } from 'rxjs/internal-compatibility'; -import { User } from '@models/user'; +import { User } from '@red/domain'; export class AnnotationPermissions { canUndo = true; diff --git a/apps/red-ui/src/app/models/file/dossier-template.ts b/apps/red-ui/src/app/models/file/dossier-template.ts index ae5364686..eebf11b80 100644 --- a/apps/red-ui/src/app/models/file/dossier-template.ts +++ b/apps/red-ui/src/app/models/file/dossier-template.ts @@ -1,5 +1,6 @@ -import { DownloadFileType, IDossierTemplate } from '@redaction/red-ui-http'; +import { IDossierTemplate } from '@redaction/red-ui-http'; import { IListable, List } from '@iqser/common-ui'; +import { DownloadFileType } from '@red/domain'; export class DossierTemplate implements IDossierTemplate, IListable { readonly createdBy?: string; diff --git a/apps/red-ui/src/app/models/file/file-data.model.ts b/apps/red-ui/src/app/models/file/file-data.model.ts index 9056d7d37..5e257c0e6 100644 --- a/apps/red-ui/src/app/models/file/file-data.model.ts +++ b/apps/red-ui/src/app/models/file/file-data.model.ts @@ -1,10 +1,10 @@ -import { RedactionLog, RedactionLogEntry, ViewedPages } from '@redaction/red-ui-http'; +import { RedactionLog, RedactionLogEntry } from '@redaction/red-ui-http'; import { File } from './file'; import { AnnotationWrapper } from './annotation.wrapper'; import { RedactionLogEntryWrapper } from './redaction-log-entry.wrapper'; import { ViewMode } from './view-mode'; import * as moment from 'moment'; -import { User } from '@models/user'; +import { IViewedPage, User } from '@red/domain'; import { Dictionary } from '@models/dictionary'; export class AnnotationData { @@ -17,7 +17,7 @@ export class FileDataModel { hasChangeLog: boolean; - constructor(public file: File, public fileData: Blob, public redactionLog: RedactionLog, public viewedPages?: ViewedPages) {} + constructor(public file: File, public fileData: Blob, public redactionLog: RedactionLog, public viewedPages?: IViewedPage[]) {} getAnnotations( dictionaryData: { [p: string]: Dictionary }, @@ -112,7 +112,7 @@ export class FileDataModel { redactionLogEntry.changes.length >= 1 ? redactionLogEntry.changes[redactionLogEntry.changes.length - 1] : undefined; const page = redactionLogEntry.positions?.[0].page; - const viewedPage = this.viewedPages.pages.filter(p => p.page === page).pop(); + const viewedPage = this.viewedPages.filter(p => p.page === page).pop(); // page has been seen -> let's see if it's a change if (viewedPage) { diff --git a/apps/red-ui/src/app/models/notification-types.ts b/apps/red-ui/src/app/models/notification-types.ts deleted file mode 100644 index b1c7823ac..000000000 --- a/apps/red-ui/src/app/models/notification-types.ts +++ /dev/null @@ -1,16 +0,0 @@ -export enum NotificationTypeEnum { - 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', -} - -export type NotificationType = NotificationTypeEnum; diff --git a/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen.component.ts b/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen.component.ts index e0d9a4012..f43f3db3b 100644 --- a/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen.component.ts +++ b/apps/red-ui/src/app/modules/account/screens/user-profile/user-profile-screen.component.ts @@ -1,13 +1,14 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { languagesTranslations } from '../../translations/languages-translations'; -import { ProfileModel, UserService } from '../../../../services/user.service'; +import { UserService } from '../../../../services/user.service'; import { PermissionsService } from '../../../../services/permissions.service'; import { ConfigService } from '../../../../services/config.service'; import { LanguageService } from '../../../../i18n/language.service'; import { DomSanitizer } from '@angular/platform-browser'; import { TranslateService } from '@ngx-translate/core'; import { LoadingService } from '@iqser/common-ui'; +import { IProfile } from '@red/domain'; @Component({ selector: 'redaction-user-profile-screen', @@ -19,7 +20,7 @@ export class UserProfileScreenComponent implements OnInit { changePasswordUrl: any; translations = languagesTranslations; - private _profileModel: ProfileModel; + private _profileModel: IProfile; constructor( readonly permissionsService: PermissionsService, @@ -77,7 +78,7 @@ export class UserProfileScreenComponent implements OnInit { } if (this.profileChanged) { - const value = this.formGroup.value as ProfileModel; + const value = this.formGroup.value as IProfile; delete value.language; await this._userService diff --git a/apps/red-ui/src/app/modules/admin/components/users-stats/users-stats.component.html b/apps/red-ui/src/app/modules/admin/components/users-stats/users-stats.component.html index 0788af428..9267a01e9 100644 --- a/apps/red-ui/src/app/modules/admin/components/users-stats/users-stats.component.html +++ b/apps/red-ui/src/app/modules/admin/components/users-stats/users-stats.component.html @@ -25,6 +25,7 @@ [strokeWidth]="15" [subtitle]="'user-stats.chart.users' | translate" direction="row" + filterKey="roleFilters" totalType="sum" > diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts index 258c0050e..11b57cbf6 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts @@ -1,12 +1,13 @@ import { Component, Inject, OnDestroy } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { DossierAttributeConfigTypes, FileAttributeConfigTypes, IDossierAttributeConfig } from '@redaction/red-ui-http'; +import { FileAttributeConfigTypes } from '@redaction/red-ui-http'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { AutoUnsubscribe, LoadingService, Toaster } from '@iqser/common-ui'; import { HttpErrorResponse } from '@angular/common/http'; import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { DossierAttributeConfigTypes, IDossierAttributeConfig } from '@red/domain'; @Component({ templateUrl: './add-edit-dossier-attribute-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts index eceb1b75a..3e894c234 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts @@ -4,12 +4,13 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import * as moment from 'moment'; import { Moment } from 'moment'; -import { DownloadFileType, IDossierTemplate } from '@redaction/red-ui-http'; +import { IDossierTemplate } from '@redaction/red-ui-http'; import { applyIntervalConstraints } from '@utils/date-inputs-utils'; import { downloadTypesTranslations } from '../../../../translations/download-types-translations'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { CONFLICT_ERROR_CODE, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { DownloadFileType } from '@red/domain'; @Component({ templateUrl: './add-edit-dossier-template-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts index 5b28e9688..30b9e7c21 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts @@ -1,6 +1,6 @@ import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { User } from '@models/user'; +import { User } from '@red/domain'; @Component({ selector: 'redaction-add-edit-user-dialog', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts index 0740d4ad1..d877418ce 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts @@ -2,7 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { FormBuilder, Validators } from '@angular/forms'; import { UserService } from '@services/user.service'; import { LoadingService } from '@iqser/common-ui'; -import { User } from '@models/user'; +import { User } from '@red/domain'; @Component({ selector: 'redaction-reset-password', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts index f73127f46..515a3f642 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts @@ -4,7 +4,7 @@ import { AdminDialogService } from '../../../services/admin-dialog.service'; import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { rolesTranslations } from '../../../../../translations/roles-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { User } from '@models/user'; +import { User } from '@red/domain'; import { UserService } from '@services/user.service'; @Component({ @@ -85,7 +85,7 @@ export class UserDetailsComponent implements OnInit { ...prev, [role]: [ { - value: this.user && this.user.roles.indexOf(role) !== -1, + value: this.user && this.user.hasRole(role), disabled: this.shouldBeDisabled(role), }, ], diff --git a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts index 2377207de..e16388f3b 100644 --- a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts @@ -1,13 +1,12 @@ import { Component, forwardRef, Injector, OnDestroy, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { AuditResponse, AuditSearchRequest, IAudit } from '@redaction/red-ui-http'; import { Moment } from 'moment'; import { applyIntervalConstraints } from '@utils/date-inputs-utils'; import { DefaultListingServices, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; import { auditCategoriesTranslations } from '../../translations/audit-categories-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; -import { Audit } from '@models/audit.model'; +import { Audit, IAudit, IAuditResponse, IAuditSearchRequest } from '@red/domain'; import { AuditService } from '../../services/audit.service'; const PAGE_SIZE = 50; @@ -26,7 +25,7 @@ export class AuditScreenComponent extends ListingComponent implements OnD filterForm: FormGroup; categories: string[] = []; userIds: Set; - logs: AuditResponse; + logs: IAuditResponse; readonly tableColumnConfigs: TableColumnConfig[] = [ { label: _('audit-screen.table-col-names.message') }, { label: _('audit-screen.table-col-names.date') }, @@ -94,7 +93,7 @@ export class AuditScreenComponent extends ListingComponent implements OnD if (to) { to = to.clone().add(1, 'd'); } - const logsRequestBody: AuditSearchRequest = { + const logsRequestBody: IAuditSearchRequest = { pageSize: PAGE_SIZE, page: page, category: category === this.ALL_CATEGORIES ? undefined : category, diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts index 1d94c1588..c9d02247d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts @@ -8,7 +8,6 @@ import { LoadingService, TableColumnConfig, } from '@iqser/common-ui'; -import { IDossierAttributeConfig } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; @@ -16,7 +15,7 @@ import { DossierAttributesService } from '@shared/services/controller-wrappers/d import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; -import { DossierAttributeConfig } from '@state/model/dossier-attribute-config'; +import { DossierAttributeConfig, IDossierAttributeConfig } from '@red/domain'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; @Component({ diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts index 1d129b295..f205f483d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts @@ -1,5 +1,4 @@ import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit } from '@angular/core'; -import { IDossier } from '@redaction/red-ui-http'; import { CircleButtonTypes, ConfirmationDialogInput, @@ -20,6 +19,7 @@ import { Observable } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { getLeftDateTime } from '@utils/functions'; import { RouterHistoryService } from '@services/router-history.service'; +import { IDossier } from '@red/domain'; interface DossierListItem extends IDossier, IListable { readonly canRestore: boolean; diff --git a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts index f77aba954..5ec748141 100644 --- a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts @@ -11,13 +11,15 @@ import { IconButtonTypes, ListingComponent, LoadingService, + NestedFilter, TableColumnConfig, } from '@iqser/common-ui'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { rolesTranslations } from '../../../../translations/roles-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { User } from '@models/user'; +import { User, UserTypes } from '@red/domain'; +import { userTypeChecker, userTypeFilters } from '../../../../utils'; @Component({ templateUrl: './user-listing-screen.component.html', @@ -110,38 +112,30 @@ export class UserListingScreenComponent extends ListingComponent implement private _computeStats() { this.chartData = this._translateChartService.translateRoles( - [ - { - value: this.allEntities.filter(user => !user.isActive).length, - color: 'INACTIVE', - label: 'INACTIVE', - }, - { - value: this.allEntities.filter(user => user.roles.length === 1 && user.roles[0] === 'RED_USER').length, - color: 'REGULAR', - label: 'REGULAR', - }, - { - value: this.allEntities.filter(user => user.isManager && !user.isAdmin).length, - color: 'MANAGER', - label: 'RED_MANAGER', - }, - { - value: this.allEntities.filter(user => user.isManager && user.isAdmin).length, - color: 'MANAGER_ADMIN', - label: 'MANAGER_ADMIN', - }, - { - value: this.allEntities.filter(user => user.isUserAdmin && !user.isAdmin).length, - color: 'USER_ADMIN', - label: 'RED_USER_ADMIN', - }, - { - value: this.allEntities.filter(user => user.isAdmin && !user.isManager).length, - color: 'ADMIN', - label: 'RED_ADMIN', - }, - ].filter(type => type.value > 0), + UserTypes.map(type => ({ + value: this.allEntities.filter(userTypeFilters[type]).length, + color: type.replace('RED_', ''), + label: type, + key: type, + })).filter(type => type.value > 0), ); + + this._computeAllFilters(); + } + + private _computeAllFilters() { + const roleFilters = this.chartData.map( + config => + new NestedFilter({ + id: config.key, + label: config.label, + }), + ); + + this.filterService.addFilterGroup({ + slug: 'roleFilters', + filters: roleFilters, + checker: userTypeChecker, + }); } } diff --git a/apps/red-ui/src/app/modules/admin/services/audit.service.ts b/apps/red-ui/src/app/modules/admin/services/audit.service.ts index 44f7b1d07..2ef8569b4 100644 --- a/apps/red-ui/src/app/modules/admin/services/audit.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/audit.service.ts @@ -1,7 +1,8 @@ import { Injectable, Injector } from '@angular/core'; import { GenericService, RequiredParam, Validate } from '@iqser/common-ui'; -import { AuditResponse, AuditSearchRequest, CategoryModel, IAudit } from '@redaction/red-ui-http'; +import { CategoryModel } from '@redaction/red-ui-http'; import { Observable } from 'rxjs'; +import { IAudit, IAuditResponse, IAuditSearchRequest } from '@red/domain'; @Injectable() export class AuditService extends GenericService { @@ -14,7 +15,7 @@ export class AuditService extends GenericService { } @Validate() - searchAuditLog(@RequiredParam() body: AuditSearchRequest): Observable { + searchAuditLog(@RequiredParam() body: IAuditSearchRequest): Observable { return this._post(body, `${this._defaultModelPath}/search`); } } diff --git a/apps/red-ui/src/app/modules/admin/translations/dossier-attribute-types-translations.ts b/apps/red-ui/src/app/modules/admin/translations/dossier-attribute-types-translations.ts index 451b9b0ed..f37ed8473 100644 --- a/apps/red-ui/src/app/modules/admin/translations/dossier-attribute-types-translations.ts +++ b/apps/red-ui/src/app/modules/admin/translations/dossier-attribute-types-translations.ts @@ -1,5 +1,5 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossierAttributeConfigType } from '@redaction/red-ui-http'; +import { DossierAttributeConfigType } from '@red/domain'; export const dossierAttributeTypesTranslations: { [key in DossierAttributeConfigType]: string } = { TEXT: _('dossier-attribute-types.text'), diff --git a/apps/red-ui/src/app/modules/dossier/components/file-workload/components/annotation-source/annotation-source.component.ts b/apps/red-ui/src/app/modules/dossier/components/file-workload/components/annotation-source/annotation-source.component.ts index d59bedd06..434b1dd03 100644 --- a/apps/red-ui/src/app/modules/dossier/components/file-workload/components/annotation-source/annotation-source.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/file-workload/components/annotation-source/annotation-source.component.ts @@ -41,7 +41,7 @@ export class AnnotationSourceComponent { this.engines = [ { icon: 'red:dictionary', - description: this._translateService.instant('annotation-engines.dictionary'), + description: this._translateService.instant('annotation-engines.dictionary', { isHint: this.annotation.hint }), show: this._isBasedOn(Engines.DICTIONARY), }, { diff --git a/apps/red-ui/src/app/modules/dossier/components/page-exclusion/page-exclusion.component.ts b/apps/red-ui/src/app/modules/dossier/components/page-exclusion/page-exclusion.component.ts index 5d28b3116..b9705a59b 100644 --- a/apps/red-ui/src/app/modules/dossier/components/page-exclusion/page-exclusion.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/page-exclusion/page-exclusion.component.ts @@ -1,10 +1,10 @@ import { Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; -import { PageRange } from '@redaction/red-ui-http'; import { InputWithActionComponent, LoadingService, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { File } from '@models/file/file'; import { ReanalysisService } from '@services/reanalysis.service'; +import { IPageRange } from '@red/domain'; @Component({ selector: 'redaction-page-exclusion', @@ -15,7 +15,7 @@ export class PageExclusionComponent implements OnChanges { @Input() file: File; @Output() readonly actionPerformed = new EventEmitter(); - excludedPagesRanges: PageRange[] = []; + excludedPagesRanges: IPageRange[] = []; @ViewChild(InputWithActionComponent) private readonly _inputComponent: InputWithActionComponent; constructor( @@ -27,12 +27,12 @@ export class PageExclusionComponent implements OnChanges { ngOnChanges(): void { const excludedPages = (this.file?.excludedPages || []).sort((p1, p2) => p1 - p2); - this.excludedPagesRanges = excludedPages.reduce((ranges: PageRange[], page) => { + this.excludedPagesRanges = excludedPages.reduce((ranges: IPageRange[], page) => { if (!ranges.length) { return [{ startPage: page, endPage: page }]; } - if (page === ranges[ranges.length - 1].endPage + 1) { + if (page === Number(ranges[ranges.length - 1].endPage) + 1) { ranges[ranges.length - 1].endPage = page; } else { ranges.push({ startPage: page, endPage: page }); @@ -73,7 +73,7 @@ export class PageExclusionComponent implements OnChanges { } } - async includePagesRange(range: PageRange): Promise { + async includePagesRange(range: IPageRange): Promise { this._loadingService.start(); await this._reanalysisService .includePages( diff --git a/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts b/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts index 6f97eeabb..2c9d39c7d 100644 --- a/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts @@ -1,11 +1,11 @@ import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core'; -import { ViewedPages } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { PermissionsService } from '@services/permissions.service'; import { ConfigService } from '@services/config.service'; import { Subscription } from 'rxjs'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { ViewedPagesService } from '../../shared/services/viewed-pages.service'; +import { IViewedPage } from '@red/domain'; @Component({ selector: 'redaction-page-indicator', @@ -15,7 +15,7 @@ import { ViewedPagesService } from '../../shared/services/viewed-pages.service'; export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { @Input() active: boolean; @Input() number: number; - @Input() viewedPages: ViewedPages; + @Input() viewedPages: IViewedPage[]; @Input() activeSelection = false; @Output() readonly pageSelected = new EventEmitter(); @@ -33,7 +33,7 @@ export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { ) {} get activePage() { - return this.viewedPages?.pages?.find(p => p.page === this.number); + return this.viewedPages?.find(p => p.page === this.number); } get read() { @@ -112,7 +112,7 @@ export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { if (this.activePage) { this.activePage.hasChanges = false; } else { - this.viewedPages?.pages?.push({ page: this.number, fileId: this._appStateService.activeFileId }); + this.viewedPages?.push({ page: this.number, fileId: this._appStateService.activeFileId }); } }); } @@ -121,8 +121,8 @@ export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { this._viewedPagesService .removePage(this._dossiersService.activeDossierId, this._appStateService.activeFileId, this.number) .subscribe(() => { - this.viewedPages?.pages?.splice( - this.viewedPages?.pages?.findIndex(p => p.page === this.number), + this.viewedPages?.splice( + this.viewedPages?.findIndex(p => p.page === this.number), 1, ); }); 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/components/team-members-manager/team-members-manager.component.ts index e3e35a338..3c39fec39 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/components/team-members-manager/team-members-manager.component.ts @@ -1,10 +1,9 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { DossierRequest, IDossier } from '@redaction/red-ui-http'; import { UserService } from '@services/user.service'; import { Toaster } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { Dossier } from '@state/model/dossier'; import { DossiersService } from '@services/entity-services/dossiers.service'; +import { Dossier, IDossier, IDossierRequest } from '@red/domain'; @Component({ selector: 'redaction-team-members-manager', @@ -56,7 +55,7 @@ export class TeamMembersManagerComponent implements OnInit { memberIds: this.selectedMembersList, approverIds: this.selectedApproversList, ownerId: this.selectedOwnerId, - } as DossierRequest; + } as IDossierRequest; const result = await this._dossiersService.createOrUpdate(dossier).toPromise(); if (result) { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index e2d1ff8f1..457be2835 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; -import { DossierRequest, DownloadFileType, IDossierTemplate, ReportTemplate } from '@redaction/red-ui-http'; +import { IDossierTemplate, ReportTemplate } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import * as moment from 'moment'; import { downloadTypesTranslations } from '../../../../translations/download-types-translations'; @@ -8,6 +8,7 @@ import { IconButtonTypes } from '@iqser/common-ui'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { ReportTemplateService } from '@services/report-template.service'; +import { DownloadFileType, IDossierRequest } from '@red/domain'; @Component({ templateUrl: './add-dossier-dialog.component.html', @@ -112,7 +113,7 @@ export class AddDossierDialogComponent { }); } - private _formToObject(): DossierRequest { + private _formToObject(): IDossierRequest { return { dossierName: this.dossierForm.get('dossierName').value, description: this.dossierForm.get('description').value, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index 46a5823e3..e7fc346fa 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -5,7 +5,7 @@ import { UserService } from '@services/user.service'; import { Toaster } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { File } from '@models/file/file'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FilesService } from '@services/entity-services/files.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts index 3d325dc0a..8ae79ce2f 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormGroup } from '@angular/forms'; import { IFile, IFileAttributeConfig } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; 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 23b63358f..e46cb671f 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,11 +1,10 @@ import { Component, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { Dossier } from '../../../../../state/model/dossier'; +import { Dossier, DossierAttributeWithValue } from '@red/domain'; import { PermissionsService } from '@services/permissions.service'; import { CircleButtonTypes, IconButtonTypes, LoadingService } from '@iqser/common-ui'; import { FormBuilder, FormGroup } from '@angular/forms'; import * as moment from 'moment'; -import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; @Component({ 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 f220b38a9..20bb06d56 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,6 +1,6 @@ import { Component, EventEmitter, forwardRef, Injector, Input, OnInit, Output } from '@angular/core'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { CircleButtonTypes, ConfirmationDialogInput, 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 b543c4916..1eb2182aa 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, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; 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 341aed718..c9ef6f225 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 { DownloadFileType, ReportTemplate } from '@redaction/red-ui-http'; +import { ReportTemplate } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, DownloadFileType } from '@red/domain'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { downloadTypesTranslations } from '../../../../../translations/download-types-translations'; import { DossiersService } from '@services/entity-services/dossiers.service'; 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 f039a1e35..daef546a9 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 @@ -1,6 +1,6 @@ import { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component'; import { EditDossierSectionInterface } from './edit-dossier-section.interface'; 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 562ef918d..e16e5ddcb 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 { DossierRequest, IDossierTemplate } from '@redaction/red-ui-http'; +import { IDossierTemplate } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import * as moment from 'moment'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, IDossierRequest } from '@red/domain'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { PermissionsService } from '@services/permissions.service'; @@ -101,7 +101,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti watermarkEnabled: this.dossierForm.get('watermarkEnabled').value, dueDate: this.hasDueDate ? this.dossierForm.get('dueDate').value : undefined, dossierTemplateId: this.dossierForm.get('dossierTemplateId').value, - } as DossierRequest; + } as IDossierRequest; await this._dossiersService.createOrUpdate(dossier).toPromise(); this.updateDossier.emit(); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts index 9f9f1929f..cf0521c84 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { TeamMembersManagerComponent } from '../../../components/team-members-manager/team-members-manager.component'; import { UserService } from '@services/user.service'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts index 6e79c4ba3..b1f683275 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts @@ -8,7 +8,7 @@ import { DossiersDialogService } from '../../../../services/dossiers-dialog.serv import { CircleButtonTypes, ConfirmationDialogInput, ListingService, LoadingService } from '@iqser/common-ui'; import { TranslateService } from '@ngx-translate/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { LongPressEvent } from '@shared/directives/long-press.directive'; import { UserPreferenceService } from '@services/user-preference.service'; import { FileManagementService } from '../../../../shared/services/file-management.service'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts index b6e747537..a382b7057 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { AppStateService } from '@state/app-state.service'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, DossierAttributeWithValue } from '@red/domain'; import { DossiersDialogService } from '../../../../services/dossiers-dialog.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts index 7c60c4f5c..b5f343a8b 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts @@ -5,11 +5,9 @@ import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/si import { TranslateChartService } from '@services/translate-chart.service'; import { UserService } from '@services/user.service'; import { FilterService, Toaster } from '@iqser/common-ui'; -import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { fileStatusTranslations } from '../../../../translations/file-status-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossierRequest } from '@redaction/red-ui-http'; -import { User } from '@models/user'; +import { DossierAttributeWithValue, IDossierRequest, User } from '@red/domain'; import { DossiersService } from '@services/entity-services/dossiers.service'; @Component({ @@ -72,7 +70,7 @@ export class DossierDetailsComponent implements OnInit { async assignOwner(user: User | string) { this.owner = typeof user === 'string' ? this._userService.find(user) : user; const activeDossier = this.dossiersService.activeDossier; - const dossierRequest: DossierRequest = { ...activeDossier, dossierId: activeDossier.dossierId, ownerId: this.owner.id }; + const dossierRequest: IDossierRequest = { ...activeDossier, dossierId: activeDossier.dossierId, ownerId: this.owner.id }; await this.dossiersService.createOrUpdate(dossierRequest).toPromise(); const ownerName = this._userService.getNameForId(this.owner.id); 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 925e93bc4..d8ea730a8 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 @@ -42,11 +42,10 @@ import { WorkflowConfig, } from '@iqser/common-ui'; import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; -import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { PermissionsService } from '@services/permissions.service'; import { RouterHistoryService } from '@services/router-history.service'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, DossierAttributeWithValue } from '@red/domain'; import { Router } from '@angular/router'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { ConfigService as AppConfigService } from '@services/config.service'; @@ -55,7 +54,7 @@ import { DossiersService } from '@services/entity-services/dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { LongPressEvent } from '@shared/directives/long-press.directive'; import { UserPreferenceService } from '@services/user-preference.service'; -import { saveAsCSV } from '../../../../../utils/csv-utils'; +import { saveAsCSV } from '@utils/csv-utils'; @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 62003983c..1236afa26 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 @@ -4,10 +4,10 @@ import { StatusSorter } from '@utils/sorters/status-sorter'; import { CircleButtonTypes, StatusBarConfig } from '@iqser/common-ui'; import { UserService } from '@services/user.service'; import { AppStateService } from '@state/app-state.service'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { DossiersDialogService } from '../../../../services/dossiers-dialog.service'; -import { LongPressEvent } from '../../../../../shared/directives/long-press.directive'; -import { UserPreferenceService } from '../../../../../../services/user-preference.service'; +import { LongPressEvent } from '@shared/directives/long-press.directive'; +import { UserPreferenceService } from '@services/user-preference.service'; @Component({ selector: 'redaction-dossiers-listing-actions', diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts index 755418f20..8454d65aa 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; @Component({ 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 321ca04a7..62ffd1013 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,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { Required } from '@iqser/common-ui'; @Component({ diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts index 9d7014889..8498de620 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts @@ -1,11 +1,10 @@ import { Injectable, TemplateRef } from '@angular/core'; import { ButtonConfig, IFilterGroup, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, User } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { TranslateService } from '@ngx-translate/core'; import { UserPreferenceService } from '@services/user-preference.service'; import { UserService } from '@services/user.service'; -import { User } from '@models/user'; import { fileStatusTranslations } from '../../translations/file-status-translations'; import { annotationFilterChecker, 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 24a17f1c4..2f7fe09be 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 @@ -9,9 +9,8 @@ import { TemplateRef, ViewChild, } from '@angular/core'; -import { DossierStatuses } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; -import { Dossier } from '@state/model/dossier'; +import { Dossier, DossierStatuses } from '@red/domain'; import { UserService } from '@services/user.service'; import { PermissionsService } from '@services/permissions.service'; import { TranslateChartService } from '@services/translate-chart.service'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index 4d4939935..0b63fa98c 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -41,10 +41,9 @@ import { fileStatusTranslations } from '../../translations/file-status-translati import { handleFilterDelta } from '@utils/filter-utils'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FileActionsComponent } from '../../shared/components/file-actions/file-actions.component'; -import { User } from '@models/user'; +import { Dossier, User } from '@red/domain'; import { FilesService } from '@services/entity-services/files.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; -import { Dossier } from '@state/model/dossier'; import { FileManagementService } from '../../shared/services/file-management.service'; import Annotation = Core.Annotations.Annotation; diff --git a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts index 60695ee80..6607f2927 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts @@ -10,7 +10,6 @@ import { SearchPositions, TableColumnConfig, } from '@iqser/common-ui'; -import { MatchedDocument, SearchResult } from '@redaction/red-ui-http'; import { BehaviorSubject, Observable } from 'rxjs'; import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; @@ -20,6 +19,7 @@ import { TranslateService } from '@ngx-translate/core'; import { RouterHistoryService } from '@services/router-history.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { PlatformSearchService } from '../../shared/services/platform-search.service'; +import { IMatchedDocument, ISearchResponse } from '@red/domain'; interface ListItem extends IListable { readonly dossierId: string; @@ -109,7 +109,7 @@ export class SearchScreenComponent extends ListingComponent implements this._router.navigate([], { queryParams }).then(); } - private _search(searchInput: SearchInput): Observable { + private _search(searchInput: SearchInput): Observable { return this._platformSearchService.search({ dossierIds: [...searchInput.dossierIds], queryString: searchInput.query ?? '', @@ -127,15 +127,15 @@ export class SearchScreenComponent extends ListingComponent implements this.search$.next({ query, dossierIds: dossierId ? [dossierId] : [] }); } - private _toMatchedDocuments({ matchedDocuments }: SearchResult): MatchedDocument[] { + private _toMatchedDocuments({ matchedDocuments }: ISearchResponse): IMatchedDocument[] { return matchedDocuments.filter(doc => doc.score > 0 && doc.matchedTerms.length > 0); } - private _toListItems(matchedDocuments: MatchedDocument[]): ListItem[] { + private _toListItems(matchedDocuments: IMatchedDocument[]): ListItem[] { return matchedDocuments.map(document => this._toListItem(document)).filter(value => value); } - private _toListItem({ dossierId, fileId, unmatchedTerms, highlights }: MatchedDocument): ListItem { + private _toListItem({ dossierId, fileId, unmatchedTerms, highlights }: IMatchedDocument): ListItem { const file = this._dossiersService.find(dossierId, fileId); if (!file) { return undefined; diff --git a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts index 7578d2573..4d1357db0 100644 --- a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts @@ -33,7 +33,7 @@ export class PdfViewerDataService { loadActiveFileData(): Observable { const file$ = this.downloadOriginalFile(this._appStateService.activeFile); const reactionLog$ = this.loadActiveFileRedactionLog().pipe(catchError(() => of({}))); - const viewedPages$ = this.getViewedPagesForActiveFile().pipe(catchError(() => of({}))); + const viewedPages$ = this.getViewedPagesForActiveFile(); return forkJoin([file$, reactionLog$, viewedPages$]).pipe( map(data => new FileDataModel(this._appStateService.activeFile, ...data)), @@ -44,9 +44,9 @@ export class PdfViewerDataService { if (this._permissionsService.canMarkPagesAsViewed()) { return this._viewedPagesService .getViewedPages(this._dossiersService.activeDossierId, this._appStateService.activeFileId) - .pipe(catchError(() => of({ pages: [] }))); + .pipe(catchError(() => of([]))); } - return of({ pages: [] }); + return of([]); } downloadOriginalFile(file: File): Observable { diff --git a/apps/red-ui/src/app/modules/dossier/shared/components/needs-work-badge/needs-work-badge.component.ts b/apps/red-ui/src/app/modules/dossier/shared/components/needs-work-badge/needs-work-badge.component.ts index db924a084..63717551b 100644 --- a/apps/red-ui/src/app/modules/dossier/shared/components/needs-work-badge/needs-work-badge.component.ts +++ b/apps/red-ui/src/app/modules/dossier/shared/components/needs-work-badge/needs-work-badge.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; import { File } from '@models/file/file'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; @Component({ selector: 'redaction-needs-work-badge', diff --git a/apps/red-ui/src/app/modules/dossier/shared/services/platform-search.service.ts b/apps/red-ui/src/app/modules/dossier/shared/services/platform-search.service.ts index ff8f8a55c..1eb744b27 100644 --- a/apps/red-ui/src/app/modules/dossier/shared/services/platform-search.service.ts +++ b/apps/red-ui/src/app/modules/dossier/shared/services/platform-search.service.ts @@ -1,14 +1,14 @@ import { Injectable, Injector } from '@angular/core'; import { GenericService } from '@iqser/common-ui'; -import { SearchRequest, SearchResult } from '@redaction/red-ui-http'; +import { ISearchRequest, ISearchResponse } from '@red/domain'; @Injectable() -export class PlatformSearchService extends GenericService { +export class PlatformSearchService extends GenericService { constructor(protected readonly _injector: Injector) { super(_injector, 'search'); } - search(body: SearchRequest) { + search(body: ISearchRequest) { return this._post(body); } } diff --git a/apps/red-ui/src/app/modules/dossier/shared/services/viewed-pages.service.ts b/apps/red-ui/src/app/modules/dossier/shared/services/viewed-pages.service.ts index 43a2e31fa..a4b84576a 100644 --- a/apps/red-ui/src/app/modules/dossier/shared/services/viewed-pages.service.ts +++ b/apps/red-ui/src/app/modules/dossier/shared/services/viewed-pages.service.ts @@ -1,6 +1,7 @@ import { Injectable, Injector } from '@angular/core'; import { GenericService, RequiredParam, Validate } from '@iqser/common-ui'; -import { ViewedPages, ViewedPagesRequest } from '@redaction/red-ui-http'; +import { map } from 'rxjs/operators'; +import { IViewedPage, IViewedPagesRequest } from '@red/domain'; @Injectable({ providedIn: 'root', @@ -11,7 +12,7 @@ export class ViewedPagesService extends GenericService { } @Validate() - addPage(@RequiredParam() body: ViewedPagesRequest, @RequiredParam() dossierId: string, @RequiredParam() fileId: string) { + addPage(@RequiredParam() body: IViewedPagesRequest, @RequiredParam() dossierId: string, @RequiredParam() fileId: string) { return this._post(body, `${this._defaultModelPath}/${dossierId}/${fileId}`); } @@ -22,6 +23,6 @@ export class ViewedPagesService extends GenericService { @Validate() getViewedPages(@RequiredParam() dossierId: string, @RequiredParam() fileId: string) { - return this._getOne([dossierId, fileId]); + return this._getOne<{ pages?: IViewedPage[] }>([dossierId, fileId]).pipe(map(res => res.pages)); } } diff --git a/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts b/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts index f1b76ef91..51f24a764 100644 --- a/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { UserService } from '@services/user.service'; -import { User } from '@models/user'; +import { User } from '@red/domain'; import { List } from '@iqser/common-ui'; @Component({ diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts index 708e10603..3ec14a67b 100644 --- a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; -import { Dossier } from '../../../../../state/model/dossier'; +import { Dossier } from '@red/domain'; import { File } from '@models/file/file'; import { FileDownloadService } from '@upload-download/services/file-download.service'; import { AutoUnsubscribe, CircleButtonType, CircleButtonTypes, List, Toaster } from '@iqser/common-ui'; diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index 081de28a0..c9232ec90 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -2,7 +2,7 @@ import { Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@a import { Debounce, IconButtonTypes, List } from '@iqser/common-ui'; import { Observable, of } from 'rxjs'; import { catchError, map, take, tap } from 'rxjs/operators'; -import { Dossier } from '@state/model/dossier'; +import { Dossier } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DictionaryService } from '@shared/services/dictionary.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; diff --git a/apps/red-ui/src/app/modules/shared/components/initials-avatar/initials-avatar.component.ts b/apps/red-ui/src/app/modules/shared/components/initials-avatar/initials-avatar.component.ts index ac759b710..20f99feb5 100644 --- a/apps/red-ui/src/app/modules/shared/components/initials-avatar/initials-avatar.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/initials-avatar/initials-avatar.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; import { UserService } from '@services/user.service'; import { AutoUnsubscribe } from '@iqser/common-ui'; -import { User } from '@models/user'; +import { User } from '@red/domain'; import { TranslateService } from '@ngx-translate/core'; import { NamePipeOptions } from '@shared/pipes/name.pipe'; diff --git a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.html b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.html index dbe733b5e..fb0477d48 100644 --- a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.html +++ b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.html @@ -28,7 +28,7 @@ (click)="val.key && selectValue(val.key)" *ngFor="let val of config" [class.active]="filterChecked$(val.key) | async" - [class.filter-disabled]="!val.key || (statusFilters$ | async)?.length === 0" + [class.filter-disabled]="!val.key || !filtersEnabled" > /src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/libs/red-domain', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], + transform: { '^.+\\.(ts|js|html)$': 'jest-preset-angular' }, +}; diff --git a/libs/red-domain/src/index.ts b/libs/red-domain/src/index.ts new file mode 100644 index 000000000..8b393ebc1 --- /dev/null +++ b/libs/red-domain/src/index.ts @@ -0,0 +1,8 @@ +export * from './lib/dossiers'; +export * from './lib/search'; +export * from './lib/shared/types'; +export * from './lib/dossier-attributes'; +export * from './lib/users'; +export * from './lib/pages'; +export * from './lib/audit'; +export * from './lib/notifications'; diff --git a/libs/red-domain/src/lib/audit/audit-search.request.ts b/libs/red-domain/src/lib/audit/audit-search.request.ts new file mode 100644 index 000000000..88f3c5a25 --- /dev/null +++ b/libs/red-domain/src/lib/audit/audit-search.request.ts @@ -0,0 +1,10 @@ +export interface IAuditSearchRequest { + readonly category?: string; + readonly from?: string; + readonly objectId?: string; + readonly page?: number; + readonly pageSize?: number; + readonly requestingUserId?: string; + readonly to?: string; + readonly userId?: string; +} diff --git a/libs/red-domain/src/lib/audit/audit.interface.ts b/libs/red-domain/src/lib/audit/audit.interface.ts new file mode 100644 index 000000000..12d90b2f2 --- /dev/null +++ b/libs/red-domain/src/lib/audit/audit.interface.ts @@ -0,0 +1,9 @@ +export interface IAudit { + readonly category: string; + readonly details?: unknown; + readonly message: string; + readonly objectId?: string; + readonly recordDate: string; + readonly recordId: string; + readonly userId: string; +} diff --git a/apps/red-ui/src/app/models/audit.model.ts b/libs/red-domain/src/lib/audit/audit.model.ts similarity index 74% rename from apps/red-ui/src/app/models/audit.model.ts rename to libs/red-domain/src/lib/audit/audit.model.ts index 76ca7d7ad..5879c9b03 100644 --- a/apps/red-ui/src/app/models/audit.model.ts +++ b/libs/red-domain/src/lib/audit/audit.model.ts @@ -1,14 +1,14 @@ -import { IAudit } from '@redaction/red-ui-http'; import { IListable } from '@iqser/common-ui'; +import { IAudit } from './audit.interface'; export class Audit implements IAudit, IListable { - readonly recordId?: number; - readonly category?: string; + readonly recordId: string; + readonly category: string; readonly details?: unknown; - readonly message?: string; + readonly message: string; readonly objectId?: string; readonly recordDate: string; - readonly userId?: string; + readonly userId: string; constructor(audit: IAudit) { this.category = audit.category; @@ -21,7 +21,7 @@ export class Audit implements IAudit, IListable { } get id(): string { - return this.recordDate; + return this.recordId; } get searchKey(): string { diff --git a/libs/red-domain/src/lib/audit/audit.response.ts b/libs/red-domain/src/lib/audit/audit.response.ts new file mode 100644 index 000000000..88248547f --- /dev/null +++ b/libs/red-domain/src/lib/audit/audit.response.ts @@ -0,0 +1,9 @@ +import { IAudit } from './audit.interface'; +import { List } from '@iqser/common-ui'; + +export interface IAuditResponse { + data: List; + page?: number; + pageSize?: number; + totalHits?: number; +} diff --git a/libs/red-domain/src/lib/audit/index.ts b/libs/red-domain/src/lib/audit/index.ts new file mode 100644 index 000000000..b37fe2ee6 --- /dev/null +++ b/libs/red-domain/src/lib/audit/index.ts @@ -0,0 +1,4 @@ +export * from './audit.model'; +export * from './audit.interface'; +export * from './audit.response'; +export * from './audit-search.request'; diff --git a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.interface.ts b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.interface.ts new file mode 100644 index 000000000..43687f835 --- /dev/null +++ b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.interface.ts @@ -0,0 +1,10 @@ +import { DossierAttributeConfigType } from './types'; + +export interface IDossierAttributeConfig { + readonly id: string; + readonly editable: boolean; + readonly label: string; + readonly placeholder: string; + readonly dossierTemplateId?: string; + readonly type: DossierAttributeConfigType; +} diff --git a/apps/red-ui/src/app/state/model/dossier-attribute-config.ts b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts similarity index 67% rename from apps/red-ui/src/app/state/model/dossier-attribute-config.ts rename to libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts index 087c3081b..e27c3b88c 100644 --- a/apps/red-ui/src/app/state/model/dossier-attribute-config.ts +++ b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts @@ -1,17 +1,18 @@ -import { DossierAttributeConfigType, IDossierAttributeConfig } from '@redaction/red-ui-http'; import { IListable } from '@iqser/common-ui'; +import { IDossierAttributeConfig } from './dossier-attribute-config.interface'; +import { DossierAttributeConfigType } from './types'; export class DossierAttributeConfig implements IDossierAttributeConfig, IListable { readonly id: string; readonly editable: boolean; readonly label: string; - readonly placeholder?: string; - readonly type?: DossierAttributeConfigType; - readonly dossierTemplateId: string; + readonly placeholder: string; + readonly type: DossierAttributeConfigType; + readonly dossierTemplateId?: string; constructor(dossierAttributeConfig: IDossierAttributeConfig) { this.id = dossierAttributeConfig.id; - this.editable = !!dossierAttributeConfig.editable; + this.editable = dossierAttributeConfig.editable; this.label = dossierAttributeConfig.label; this.placeholder = dossierAttributeConfig.placeholder; this.type = dossierAttributeConfig.type; diff --git a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute.interface.ts b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute.interface.ts new file mode 100644 index 000000000..ac569e3ff --- /dev/null +++ b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute.interface.ts @@ -0,0 +1,5 @@ +export interface IDossierAttribute { + dossierAttributeConfigId?: string; + dossierId?: string; + value?: string; +} diff --git a/libs/red-domain/src/lib/dossier-attributes/index.ts b/libs/red-domain/src/lib/dossier-attributes/index.ts new file mode 100644 index 000000000..d4927a3c0 --- /dev/null +++ b/libs/red-domain/src/lib/dossier-attributes/index.ts @@ -0,0 +1,4 @@ +export * from './types'; +export * from './dossier-attribute-config.interface'; +export * from './dossier-attribute-config.model'; +export * from './dossier-attribute.interface'; diff --git a/libs/red-domain/src/lib/dossier-attributes/types.ts b/libs/red-domain/src/lib/dossier-attributes/types.ts new file mode 100644 index 000000000..6edc61c07 --- /dev/null +++ b/libs/red-domain/src/lib/dossier-attributes/types.ts @@ -0,0 +1,12 @@ +import { IDossierAttributeConfig } from './dossier-attribute-config.interface'; + +export const DossierAttributeConfigTypes = { + DATE: 'DATE', + IMAGE: 'IMAGE', + NUMBER: 'NUMBER', + TEXT: 'TEXT', +} as const; + +export type DossierAttributeConfigType = keyof typeof DossierAttributeConfigTypes; + +export type DossierAttributeWithValue = IDossierAttributeConfig & { value: string }; diff --git a/libs/red-domain/src/lib/dossiers/dossier.interface.ts b/libs/red-domain/src/lib/dossiers/dossier.interface.ts new file mode 100644 index 000000000..36092cd41 --- /dev/null +++ b/libs/red-domain/src/lib/dossiers/dossier.interface.ts @@ -0,0 +1,22 @@ +import { DossierStatus } from './types'; +import { DownloadFileType } from '../shared/types'; +import { List } from '@iqser/common-ui'; + +export interface IDossier { + readonly approverIds: List; + readonly date: string; + readonly description?: string; + readonly dossierId: string; + readonly dossierName: string; + readonly dossierTemplateId: string; + readonly downloadFileTypes?: List; + readonly dueDate?: string; + readonly hardDeletedTime?: string; + readonly memberIds: List; + readonly ownerId: string; + readonly reportTemplateIds: List; + readonly softDeletedTime?: string; + readonly startDate?: string; + readonly status: DossierStatus; + readonly watermarkEnabled: boolean; +} diff --git a/apps/red-ui/src/app/state/model/dossier.ts b/libs/red-domain/src/lib/dossiers/dossier.model.ts similarity index 86% rename from apps/red-ui/src/app/state/model/dossier.ts rename to libs/red-domain/src/lib/dossiers/dossier.model.ts index 82e45aa2a..a730affb7 100644 --- a/apps/red-ui/src/app/state/model/dossier.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.model.ts @@ -1,23 +1,26 @@ import { File } from '@models/file/file'; -import { DossierStatus, DownloadFileType, IDictionary, IDossier } from '@redaction/red-ui-http'; +import { IDictionary } from '@redaction/red-ui-http'; import { IListable, List } from '@iqser/common-ui'; +import { IDossier } from './dossier.interface'; +import { DossierStatus } from './types'; +import { DownloadFileType } from '../shared/types'; export class Dossier implements IDossier, IListable { readonly dossierId: string; readonly dossierTemplateId: string; readonly ownerId: string; - readonly memberIds?: List; - readonly approverIds?: List; - readonly reportTemplateIds?: List; + readonly memberIds: List; + readonly approverIds: List; + readonly reportTemplateIds: List; readonly dossierName: string; - readonly date?: string; + readonly date: string; readonly dueDate?: string; readonly description?: string; readonly downloadFileTypes?: List; readonly hardDeletedTime?: string; - readonly reportTypes?: List; readonly softDeletedTime?: string; - readonly status?: DossierStatus; + readonly startDate?: string; + readonly status: DossierStatus; readonly watermarkEnabled: boolean; readonly hasReviewers: boolean; @@ -45,10 +48,10 @@ export class Dossier implements IDossier, IListable { this.memberIds = dossier.memberIds; this.ownerId = dossier.ownerId; this.reportTemplateIds = dossier.reportTemplateIds; - this.reportTypes = dossier.reportTypes; this.softDeletedTime = dossier.softDeletedTime; + this.startDate = dossier.startDate; this.status = dossier.status; - this.watermarkEnabled = !!dossier.watermarkEnabled; + this.watermarkEnabled = dossier.watermarkEnabled; this.hasReviewers = !!this.memberIds && this.memberIds.length > 1; let hintsOnly = false; diff --git a/libs/red-ui-http/src/lib/model/dossierRequest.ts b/libs/red-domain/src/lib/dossiers/dossier.request.ts similarity index 76% rename from libs/red-ui-http/src/lib/model/dossierRequest.ts rename to libs/red-domain/src/lib/dossiers/dossier.request.ts index 4af90f1a9..3c62c1a45 100644 --- a/libs/red-ui-http/src/lib/model/dossierRequest.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.request.ts @@ -1,22 +1,10 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -import { List } from '../red-types'; -import { DownloadFileType } from './dossier'; +import { List } from '@iqser/common-ui'; +import { DownloadFileType } from '../shared/types'; /** * Object containing information about a dossier. */ -export interface DossierRequest { +export interface IDossierRequest { /** * The id(s) of approvers associated to this dossier. */ diff --git a/libs/red-domain/src/lib/dossiers/index.ts b/libs/red-domain/src/lib/dossiers/index.ts new file mode 100644 index 000000000..315c41b16 --- /dev/null +++ b/libs/red-domain/src/lib/dossiers/index.ts @@ -0,0 +1,4 @@ +export * from './dossier.interface'; +export * from './dossier.model'; +export * from './types'; +export { IDossierRequest } from './dossier.request'; diff --git a/libs/red-domain/src/lib/dossiers/types.ts b/libs/red-domain/src/lib/dossiers/types.ts new file mode 100644 index 000000000..34a2be57c --- /dev/null +++ b/libs/red-domain/src/lib/dossiers/types.ts @@ -0,0 +1,6 @@ +export const DossierStatuses = { + ACTIVE: 'ACTIVE', + DELETED: 'DELETED', +} as const; + +export type DossierStatus = keyof typeof DossierStatuses; diff --git a/libs/red-domain/src/lib/notifications/index.ts b/libs/red-domain/src/lib/notifications/index.ts new file mode 100644 index 000000000..5738aa93a --- /dev/null +++ b/libs/red-domain/src/lib/notifications/index.ts @@ -0,0 +1,3 @@ +export * from './notification.interface'; +export * from './notification.model'; +export * from './types'; diff --git a/libs/red-domain/src/lib/notifications/notification-target.interface.ts b/libs/red-domain/src/lib/notifications/notification-target.interface.ts new file mode 100644 index 000000000..262d32f9f --- /dev/null +++ b/libs/red-domain/src/lib/notifications/notification-target.interface.ts @@ -0,0 +1,6 @@ +export interface INotificationTarget { + fileId: string; + dossierId: string; + + [key: string]: unknown; +} diff --git a/libs/red-domain/src/lib/notifications/notification.interface.ts b/libs/red-domain/src/lib/notifications/notification.interface.ts new file mode 100644 index 000000000..e65021bdf --- /dev/null +++ b/libs/red-domain/src/lib/notifications/notification.interface.ts @@ -0,0 +1,14 @@ +import { INotificationTarget } from './notification-target.interface'; + +export interface INotification { + creationDate: string; + id: string; + issuerId?: string; + notificationDetails?: string; + notificationType: string; + readDate?: string; + seenDate?: string; + softDeleted?: string; + target: INotificationTarget; + userId: string; +} diff --git a/apps/red-ui/src/app/components/notifications/notification.ts b/libs/red-domain/src/lib/notifications/notification.model.ts similarity index 78% rename from apps/red-ui/src/app/components/notifications/notification.ts rename to libs/red-domain/src/lib/notifications/notification.model.ts index dcd879a1d..5423f4563 100644 --- a/apps/red-ui/src/app/components/notifications/notification.ts +++ b/libs/red-domain/src/lib/notifications/notification.model.ts @@ -1,16 +1,17 @@ -import { INotification } from '@redaction/red-ui-http'; import { IListable } from '@iqser/common-ui'; +import { INotification } from './notification.interface'; +import { INotificationTarget } from './notification-target.interface'; export class Notification implements INotification, IListable { - readonly creationDate?: string; + readonly creationDate: string; readonly issuerId?: string; readonly notificationDetails?: string; - readonly notificationType?: string; + readonly notificationType: string; readonly readDate?: string; readonly seenDate?: string; readonly softDeleted?: string; - readonly target?: any; - readonly userId?: string; + readonly target: INotificationTarget; + readonly userId: string; readonly id: string; constructor(notification: INotification, readonly message: string, readonly time: string) { diff --git a/libs/red-domain/src/lib/notifications/types.ts b/libs/red-domain/src/lib/notifications/types.ts new file mode 100644 index 000000000..e9788ca3d --- /dev/null +++ b/libs/red-domain/src/lib/notifications/types.ts @@ -0,0 +1,16 @@ +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', +} as const; + +export type NotificationType = keyof typeof NotificationTypes; diff --git a/libs/red-domain/src/lib/pages/index.ts b/libs/red-domain/src/lib/pages/index.ts new file mode 100644 index 000000000..29609ff97 --- /dev/null +++ b/libs/red-domain/src/lib/pages/index.ts @@ -0,0 +1,4 @@ +export * from './page-range'; +export * from './viewed-page'; +export * from './viewed-pages.request'; +export * from './page-exclusion.request'; diff --git a/libs/red-ui-http/src/lib/model/dossierAttributes.ts b/libs/red-domain/src/lib/pages/page-exclusion.request.ts similarity index 64% rename from libs/red-ui-http/src/lib/model/dossierAttributes.ts rename to libs/red-domain/src/lib/pages/page-exclusion.request.ts index cea45607b..9f3247f8e 100644 --- a/libs/red-ui-http/src/lib/model/dossierAttributes.ts +++ b/libs/red-domain/src/lib/pages/page-exclusion.request.ts @@ -9,8 +9,9 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { DossierAttribute } from './dossierAttribute'; +import { IPageRange } from './page-range'; +import { List } from '@iqser/common-ui'; -export interface DossierAttributes { - dossierAttributeList?: Array; +export interface IPageExclusionRequest { + pageRanges: List; } diff --git a/libs/red-ui-http/src/lib/model/pageRange.ts b/libs/red-domain/src/lib/pages/page-range.ts similarity index 91% rename from libs/red-ui-http/src/lib/model/pageRange.ts rename to libs/red-domain/src/lib/pages/page-range.ts index df40cfa4b..034c0c861 100644 --- a/libs/red-ui-http/src/lib/model/pageRange.ts +++ b/libs/red-domain/src/lib/pages/page-range.ts @@ -10,7 +10,7 @@ * Do not edit the class manually. */ -export interface PageRange { - endPage?: number; +export interface IPageRange { startPage?: number; + endPage?: number; } diff --git a/libs/red-ui-http/src/lib/model/viewedPage.ts b/libs/red-domain/src/lib/pages/viewed-page.ts similarity index 92% rename from libs/red-ui-http/src/lib/model/viewedPage.ts rename to libs/red-domain/src/lib/pages/viewed-page.ts index 308debf35..40a7ea86e 100644 --- a/libs/red-ui-http/src/lib/model/viewedPage.ts +++ b/libs/red-domain/src/lib/pages/viewed-page.ts @@ -10,7 +10,7 @@ * Do not edit the class manually. */ -export interface ViewedPage { +export interface IViewedPage { fileId?: string; page?: number; userId?: string; diff --git a/libs/red-ui-http/src/lib/model/viewedPagesRequest.ts b/libs/red-domain/src/lib/pages/viewed-pages.request.ts similarity index 88% rename from libs/red-ui-http/src/lib/model/viewedPagesRequest.ts rename to libs/red-domain/src/lib/pages/viewed-pages.request.ts index 8004aec93..2f62d560d 100644 --- a/libs/red-ui-http/src/lib/model/viewedPagesRequest.ts +++ b/libs/red-domain/src/lib/pages/viewed-pages.request.ts @@ -10,6 +10,6 @@ * Do not edit the class manually. */ -export interface ViewedPagesRequest { +export interface IViewedPagesRequest { page?: number; } diff --git a/libs/red-domain/src/lib/search/index.ts b/libs/red-domain/src/lib/search/index.ts new file mode 100644 index 000000000..78ecaf160 --- /dev/null +++ b/libs/red-domain/src/lib/search/index.ts @@ -0,0 +1,4 @@ +export * from './matched-document'; +export * from './matched-section'; +export * from './search.request'; +export * from './search.response'; diff --git a/libs/red-ui-http/src/lib/model/matchedDocument.ts b/libs/red-domain/src/lib/search/matched-document.ts similarity index 61% rename from libs/red-ui-http/src/lib/model/matchedDocument.ts rename to libs/red-domain/src/lib/search/matched-document.ts index 28d35624e..20180f32c 100644 --- a/libs/red-ui-http/src/lib/model/matchedDocument.ts +++ b/libs/red-domain/src/lib/search/matched-document.ts @@ -9,16 +9,17 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { MatchedSection } from './matchedSection'; +import { IMatchedSection } from './matched-section'; +import { List } from '@iqser/common-ui'; -export interface MatchedDocument { +export interface IMatchedDocument { containsAllMatchedSections?: boolean; dossierId?: string; dossierTemplateId?: string; fileId?: string; - highlights?: { [key: string]: Array }; - matchedSections?: Array; - matchedTerms?: Array; + highlights?: { [key: string]: List }; + matchedSections?: List; + matchedTerms?: List; score?: number; - unmatchedTerms?: Array; + unmatchedTerms?: List; } diff --git a/libs/red-ui-http/src/lib/model/matchedSection.ts b/libs/red-domain/src/lib/search/matched-section.ts similarity index 72% rename from libs/red-ui-http/src/lib/model/matchedSection.ts rename to libs/red-domain/src/lib/search/matched-section.ts index 0a6caaca3..ba969568c 100644 --- a/libs/red-ui-http/src/lib/model/matchedSection.ts +++ b/libs/red-domain/src/lib/search/matched-section.ts @@ -9,10 +9,11 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ +import { List } from '@iqser/common-ui'; -export interface MatchedSection { +export interface IMatchedSection { headline?: string; - matchedTerms?: Array; - pages?: Array; + matchedTerms?: List; + pages?: List; sectionNumber?: number; } diff --git a/libs/red-ui-http/src/lib/model/searchRequest.ts b/libs/red-domain/src/lib/search/search.request.ts similarity index 75% rename from libs/red-ui-http/src/lib/model/searchRequest.ts rename to libs/red-domain/src/lib/search/search.request.ts index bb5a86150..9c8c77a0b 100644 --- a/libs/red-ui-http/src/lib/model/searchRequest.ts +++ b/libs/red-domain/src/lib/search/search.request.ts @@ -9,10 +9,11 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ +import { List } from '@iqser/common-ui'; -export interface SearchRequest { - dossierIds?: Array; - dossierTemplateIds?: Array; +export interface ISearchRequest { + dossierIds?: List; + dossierTemplateIds?: List; fileId?: string; page?: number; pageSize?: number; diff --git a/libs/red-ui-http/src/lib/model/searchResult.ts b/libs/red-domain/src/lib/search/search.response.ts similarity index 64% rename from libs/red-ui-http/src/lib/model/searchResult.ts rename to libs/red-domain/src/lib/search/search.response.ts index 8a63fc012..8796d1bd5 100644 --- a/libs/red-ui-http/src/lib/model/searchResult.ts +++ b/libs/red-domain/src/lib/search/search.response.ts @@ -9,10 +9,11 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { MatchedDocument } from './matchedDocument'; +import { IMatchedDocument } from './matched-document'; +import { List } from '@iqser/common-ui'; -export interface SearchResult { - matchedDocuments?: Array; +export interface ISearchResponse { + matchedDocuments?: List; maxScore?: number; total?: number; } diff --git a/libs/red-domain/src/lib/shared/types.ts b/libs/red-domain/src/lib/shared/types.ts new file mode 100644 index 000000000..10374a89c --- /dev/null +++ b/libs/red-domain/src/lib/shared/types.ts @@ -0,0 +1,8 @@ +export const DownloadFileTypes = { + ANNOTATED: 'ANNOTATED', + FLATTEN: 'FLATTEN', + ORIGINAL: 'ORIGINAL', + PREVIEW: 'PREVIEW', + REDACTED: 'REDACTED', +} as const; +export type DownloadFileType = keyof typeof DownloadFileTypes; diff --git a/libs/red-domain/src/lib/users/index.ts b/libs/red-domain/src/lib/users/index.ts new file mode 100644 index 000000000..528be9585 --- /dev/null +++ b/libs/red-domain/src/lib/users/index.ts @@ -0,0 +1,6 @@ +export * from './user.model'; +export * from './user.interface'; +export * from './my-profile-update.request'; +export * from './profile-update.request'; +export * from './profile.interface'; +export * from './types'; diff --git a/libs/red-domain/src/lib/users/my-profile-update.request.ts b/libs/red-domain/src/lib/users/my-profile-update.request.ts new file mode 100644 index 000000000..e29d1d09f --- /dev/null +++ b/libs/red-domain/src/lib/users/my-profile-update.request.ts @@ -0,0 +1,14 @@ +export interface IMyProfileUpdateRequest { + /** + * Email of user. + */ + email?: string; + /** + * First name of user. + */ + firstName?: string; + /** + * Last name of user. + */ + lastName?: string; +} diff --git a/libs/red-ui-http/src/lib/model/updateMyProfileRequest.ts b/libs/red-domain/src/lib/users/profile-update.request.ts similarity index 58% rename from libs/red-ui-http/src/lib/model/updateMyProfileRequest.ts rename to libs/red-domain/src/lib/users/profile-update.request.ts index 9a5c499c4..70eac284e 100644 --- a/libs/red-ui-http/src/lib/model/updateMyProfileRequest.ts +++ b/libs/red-domain/src/lib/users/profile-update.request.ts @@ -9,18 +9,12 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ +import { IMyProfileUpdateRequest } from './my-profile-update.request'; +import { List } from '@iqser/common-ui'; -export interface UpdateMyProfileRequest { +export interface IProfileUpdateRequest extends IMyProfileUpdateRequest { /** - * Email of user. + * Roles. */ - email?: string; - /** - * First name of user. - */ - firstName?: string; - /** - * Last name of user. - */ - lastName?: string; + roles?: List; } diff --git a/libs/red-domain/src/lib/users/profile.interface.ts b/libs/red-domain/src/lib/users/profile.interface.ts new file mode 100644 index 000000000..d45a837bd --- /dev/null +++ b/libs/red-domain/src/lib/users/profile.interface.ts @@ -0,0 +1,7 @@ +export interface IProfile { + username?: string; + email: string; + firstName: string; + lastName: string; + language: string; +} diff --git a/libs/red-domain/src/lib/users/types.ts b/libs/red-domain/src/lib/users/types.ts new file mode 100644 index 000000000..fdea744f7 --- /dev/null +++ b/libs/red-domain/src/lib/users/types.ts @@ -0,0 +1,2 @@ +export const UserTypes = ['INACTIVE', 'REGULAR', 'RED_MANAGER', 'MANAGER_ADMIN', 'RED_USER_ADMIN', 'RED_ADMIN'] as const; +export type UserType = typeof UserTypes[number]; diff --git a/libs/red-domain/src/lib/users/user.interface.ts b/libs/red-domain/src/lib/users/user.interface.ts new file mode 100644 index 000000000..310383a93 --- /dev/null +++ b/libs/red-domain/src/lib/users/user.interface.ts @@ -0,0 +1,15 @@ +/** + * Object containing information of user and roles. + */ +import { IProfileUpdateRequest } from './profile-update.request'; + +export interface IUser extends IProfileUpdateRequest { + /** + * Id of user. + */ + readonly userId?: string; + /** + * Username for login. + */ + readonly username?: string; +} diff --git a/apps/red-ui/src/app/models/user.ts b/libs/red-domain/src/lib/users/user.model.ts similarity index 59% rename from apps/red-ui/src/app/models/user.ts rename to libs/red-domain/src/lib/users/user.model.ts index 70b6f180b..743cfe8ec 100644 --- a/apps/red-ui/src/app/models/user.ts +++ b/libs/red-domain/src/lib/users/user.model.ts @@ -1,20 +1,20 @@ -import { IUser } from '@redaction/red-ui-http'; import { IListable, List } from '@iqser/common-ui'; import { KeycloakProfile } from 'keycloak-js'; +import { IUser } from './user.interface'; export class User implements IUser, IListable { - readonly email: string; - readonly username: string; + readonly email?: string; + readonly username?: string; readonly firstName?: string; readonly lastName?: string; - readonly name: string; + readonly name?: string; readonly searchKey: string; readonly isActive = this.roles.length > 0; - readonly isManager = this.roles.indexOf('RED_MANAGER') >= 0; - readonly isUserAdmin = this.roles.indexOf('RED_USER_ADMIN') >= 0; - readonly isUser = this.roles.indexOf('RED_USER') >= 0; - readonly isAdmin = this.roles.indexOf('RED_ADMIN') >= 0; + readonly isManager = this.hasRole('RED_MANAGER'); + readonly isUserAdmin = this.hasRole('RED_USER_ADMIN'); + readonly isUser = this.hasRole('RED_USER'); + readonly isAdmin = this.hasRole('RED_ADMIN'); readonly hasAnyREDRoles = this.isUser || this.isManager || this.isAdmin || this.isUserAdmin; constructor(user: KeycloakProfile | IUser, readonly roles: List, readonly id: string) { @@ -23,6 +23,10 @@ export class User implements IUser, IListable { this.firstName = user.firstName; this.lastName = user.lastName; this.name = this.firstName && this.lastName ? `${this.firstName} ${this.lastName}` : this.username; - this.searchKey = this.name + this.username + this.email; + this.searchKey = `${this.name || '-'}${this.username || '-'}${this.email || ''}`; + } + + hasRole(role: string): boolean { + return this.roles.indexOf(role) >= 0; } } diff --git a/libs/red-domain/src/test-setup.ts b/libs/red-domain/src/test-setup.ts new file mode 100644 index 000000000..fb9e8ea78 --- /dev/null +++ b/libs/red-domain/src/test-setup.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import 'jest-preset-angular/setup-jest'; diff --git a/libs/red-domain/tsconfig.json b/libs/red-domain/tsconfig.json new file mode 100644 index 000000000..d7a0c7629 --- /dev/null +++ b/libs/red-domain/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/red-domain/tsconfig.lib.json b/libs/red-domain/tsconfig.lib.json new file mode 100644 index 000000000..7136ec9d4 --- /dev/null +++ b/libs/red-domain/tsconfig.lib.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "strict": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/libs/red-domain/tsconfig.spec.json b/libs/red-domain/tsconfig.spec.json new file mode 100644 index 000000000..cfff29a54 --- /dev/null +++ b/libs/red-domain/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/libs/red-ui-http/src/lib/model/audit.ts b/libs/red-ui-http/src/lib/model/audit.ts deleted file mode 100644 index 2a94b2242..000000000 --- a/libs/red-ui-http/src/lib/model/audit.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface IAudit { - readonly category?: string; - readonly details?: unknown; - readonly message?: string; - readonly objectId?: string; - readonly recordDate: string; - readonly recordId?: number; - readonly userId?: string; -} diff --git a/libs/red-ui-http/src/lib/model/auditResponse.ts b/libs/red-ui-http/src/lib/model/auditResponse.ts deleted file mode 100644 index e47bd2dc9..000000000 --- a/libs/red-ui-http/src/lib/model/auditResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { IAudit } from './audit'; - -export interface AuditResponse { - data?: Array; - page?: number; - pageSize?: number; - totalHits?: number; -} diff --git a/libs/red-ui-http/src/lib/model/auditSearchRequest.ts b/libs/red-ui-http/src/lib/model/auditSearchRequest.ts deleted file mode 100644 index 1ed35a5d2..000000000 --- a/libs/red-ui-http/src/lib/model/auditSearchRequest.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface AuditSearchRequest { - category?: string; - from?: string; - objectId?: string; - page?: number; - pageSize?: number; - requestingUserId?: string; - to?: string; - userId?: string; -} diff --git a/libs/red-ui-http/src/lib/model/dossier.ts b/libs/red-ui-http/src/lib/model/dossier.ts deleted file mode 100644 index 74fdafcb4..000000000 --- a/libs/red-ui-http/src/lib/model/dossier.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { List } from '../red-types'; - -export interface IDossier { - readonly dossierId: string; - readonly dossierName: string; - readonly dossierTemplateId: string; - readonly approverIds?: List; - readonly date?: string; - readonly description?: string; - readonly downloadFileTypes?: List; - readonly dueDate?: string; - readonly hardDeletedTime?: string; - readonly memberIds?: List; - readonly ownerId: string; - readonly reportTemplateIds?: List; - readonly reportTypes?: List; - readonly softDeletedTime?: string; - readonly status?: DossierStatus; - readonly watermarkEnabled?: boolean; -} - -export const DownloadFileTypes = { - ANNOTATED: 'ANNOTATED', - FLATTEN: 'FLATTEN', - ORIGINAL: 'ORIGINAL', - PREVIEW: 'PREVIEW', - REDACTED: 'REDACTED', -} as const; -export type DownloadFileType = keyof typeof DownloadFileTypes; - -export const DossierStatuses = { - ACTIVE: 'ACTIVE', - DELETED: 'DELETED', -} as const; -export type DossierStatus = keyof typeof DossierStatuses; diff --git a/libs/red-ui-http/src/lib/model/dossierAttribute.ts b/libs/red-ui-http/src/lib/model/dossierAttribute.ts deleted file mode 100644 index f77674536..000000000 --- a/libs/red-ui-http/src/lib/model/dossierAttribute.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface DossierAttribute { - dossierAttributeConfigId?: string; - dossierId?: string; - value?: string; -} diff --git a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts deleted file mode 100644 index d79c33800..000000000 --- a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface IDossierAttributeConfig { - readonly id: string; - readonly editable?: boolean; - readonly label: string; - readonly placeholder?: string; - readonly dossierTemplateId: string; - readonly type?: DossierAttributeConfigType; -} - -export const DossierAttributeConfigTypes = { - DATE: 'DATE', - IMAGE: 'IMAGE', - NUMBER: 'NUMBER', - TEXT: 'TEXT', -} as const; -export type DossierAttributeConfigType = keyof typeof DossierAttributeConfigTypes; diff --git a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts deleted file mode 100644 index b9cbe72b5..000000000 --- a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { IDossierAttributeConfig } from './dossierAttributeConfig'; -import { List } from '../red-types'; - -export interface DossierAttributesConfig { - dossierAttributeConfigs: List; -} diff --git a/libs/red-ui-http/src/lib/model/dossierTemplate.ts b/libs/red-ui-http/src/lib/model/dossierTemplate.ts index 911014429..0adf54ab0 100644 --- a/libs/red-ui-http/src/lib/model/dossierTemplate.ts +++ b/libs/red-ui-http/src/lib/model/dossierTemplate.ts @@ -9,8 +9,8 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { DownloadFileType } from './dossier'; import { List } from '../red-types'; +import { DownloadFileType } from '@red/domain'; export interface IDossierTemplate { /** diff --git a/libs/red-ui-http/src/lib/model/downloadStatus.ts b/libs/red-ui-http/src/lib/model/downloadStatus.ts index 583eaf860..9622665de 100644 --- a/libs/red-ui-http/src/lib/model/downloadStatus.ts +++ b/libs/red-ui-http/src/lib/model/downloadStatus.ts @@ -9,8 +9,8 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { DownloadFileType } from './dossier'; import { List } from '../red-types'; +import { DownloadFileType } from '@red/domain'; export interface IDownloadStatus { readonly creationDate?: string; diff --git a/libs/red-ui-http/src/lib/model/models.ts b/libs/red-ui-http/src/lib/model/models.ts index f7695f006..ac8c3dc45 100644 --- a/libs/red-ui-http/src/lib/model/models.ts +++ b/libs/red-ui-http/src/lib/model/models.ts @@ -1,8 +1,5 @@ export * from './addRedactionRequest'; export * from './approveRequest'; -export * from './audit'; -export * from './auditResponse'; -export * from './auditSearchRequest'; export * from './categoryModel'; export * from './cellRectangle'; export * from './change'; @@ -13,12 +10,6 @@ export * from './createUserRequest'; export * from './dictionary'; export * from './digitalSignature'; export * from './digitalSignatureViewModel'; -export * from './dossier'; -export * from './dossierAttributeConfig'; -export * from './dossierAttribute'; -export * from './dossierAttributesConfig'; -export * from './dossierAttributes'; -export * from './dossierRequest'; export * from './dossierTemplate'; export * from './downloadResponse'; export * from './downloadStatus'; @@ -39,12 +30,6 @@ export * from './licenseReport'; export * from './licenseReportRequest'; export * from './manualAddResponse'; export * from './manualRedactionEntry'; -export * from './matchedDocument'; -export * from './matchedSection'; -export * from './notification.model'; -export * from './notificationResponse'; -export * from './pageExclusionRequest'; -export * from './pageRange'; export * from './placeholdersResponse'; export * from './point'; export * from './prepareDownloadRequest'; @@ -58,16 +43,7 @@ export * from './reportTemplate'; export * from './resetPasswordRequest'; export * from './rules'; export * from './smtp-configuration'; -export * from './searchRequest'; -export * from './searchResult'; export * from './sectionGrid'; export * from './sectionRectangle'; -export * from './updateMyProfileRequest'; -export * from './updateProfileRequest'; export * from './updateDictionary'; -export * from './user'; -export * from './viewedPage'; -export * from './viewedPages'; -export * from './viewedPagesRequest'; export * from './watermarkModel'; -export * from './user'; diff --git a/libs/red-ui-http/src/lib/model/notification.model.ts b/libs/red-ui-http/src/lib/model/notification.model.ts deleted file mode 100644 index a4712ce1b..000000000 --- a/libs/red-ui-http/src/lib/model/notification.model.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface INotification { - creationDate?: string; - id?: string; - issuerId?: string; - notificationDetails?: string; - notificationType?: string; - readDate?: string; - seenDate?: string; - softDeleted?: string; - target?: any; - userId?: string; -} diff --git a/libs/red-ui-http/src/lib/model/notificationResponse.ts b/libs/red-ui-http/src/lib/model/notificationResponse.ts deleted file mode 100644 index 161b9213e..000000000 --- a/libs/red-ui-http/src/lib/model/notificationResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { INotification } from './notification.model'; - -export interface NotificationResponse { - notifications?: Array; -} diff --git a/libs/red-ui-http/src/lib/model/pageExclusionRequest.ts b/libs/red-ui-http/src/lib/model/pageExclusionRequest.ts deleted file mode 100644 index d88a12a3a..000000000 --- a/libs/red-ui-http/src/lib/model/pageExclusionRequest.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { PageRange } from './pageRange'; - -export interface PageExclusionRequest { - pageRanges?: Array; -} diff --git a/libs/red-ui-http/src/lib/model/updateProfileRequest.ts b/libs/red-ui-http/src/lib/model/updateProfileRequest.ts deleted file mode 100644 index 284ec1bbd..000000000 --- a/libs/red-ui-http/src/lib/model/updateProfileRequest.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -export interface UpdateProfileRequest { - /** - * Email of user. - */ - email?: string; - /** - * First name of user. - */ - firstName?: string; - /** - * Last name of user. - */ - lastName?: string; - /** - * Roles. - */ - roles?: Array; -} diff --git a/libs/red-ui-http/src/lib/model/user.ts b/libs/red-ui-http/src/lib/model/user.ts deleted file mode 100644 index c51160c70..000000000 --- a/libs/red-ui-http/src/lib/model/user.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - -/** - * Object containing information of user and roles. - */ -export interface IUser { - /** - * Email of user. - */ - readonly email: string; - /** - * First name of user. - */ - readonly firstName?: string; - /** - * Last name of user. - */ - readonly lastName?: string; - /** - * The list of RED_* roles. - */ - readonly roles?: readonly string[]; - /** - * Id of user. - */ - readonly userId?: string; - /** - * Username for login. - */ - readonly username?: string; -} diff --git a/libs/red-ui-http/src/lib/model/viewedPages.ts b/libs/red-ui-http/src/lib/model/viewedPages.ts deleted file mode 100644 index 5860bf5a1..000000000 --- a/libs/red-ui-http/src/lib/model/viewedPages.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * API Documentation for Redaction Gateway - * Description for redaction - * - * OpenAPI spec version: 1.0 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ -import { ViewedPage } from './viewedPage'; - -export interface ViewedPages { - pages?: Array; -} diff --git a/package.json b/package.json index f4b338877..7235db4ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "2.308.0", + "version": "2.316.0", "private": true, "license": "MIT", "scripts": { @@ -9,7 +9,7 @@ "build-paligo-styles": "mkdir -p dist/paligo-styles && sass --load-path=. paligo-styles/style.scss > dist/paligo-styles/redacto-theme.css && cp -r libs/common-ui/src/assets/font dist/paligo-styles/fonts", "i18n:extract": "ngx-translate-extract --input ./apps/red-ui/src ./libs/common-ui/src --output apps/red-ui/src/assets/i18n/en.json --clean --sort --format namespaced-json && prettier apps/red-ui/src/assets/i18n/*.json --write", "postinstall": "ngcc --properties es2015 browser module main", - "lint": "ng lint --project=red-ui-http --fix && ng lint --project=red-ui --fix && ng lint --project=common-ui --fix", + "lint": "ng lint --project=red-domain --fix && ng lint --project=red-ui-http --fix && ng lint --project=red-ui --fix && ng lint --project=common-ui --fix", "nx": "nx", "start": "nx serve", "test": "nx test", @@ -19,7 +19,7 @@ }, "husky": { "hooks": { - "pre-commit": "pretty-quick --staged && ng lint --project=red-ui-http && ng lint --project=red-ui --fix && ng lint --project=common-ui --fix" + "pre-commit": "pretty-quick --staged && ng lint --project=red-ui-http && ng lint --project=red-domain --fix && ng lint --project=red-ui --fix && ng lint --project=common-ui --fix" } }, "dependencies": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index b2370bda3..6163dbc0c 100644 Binary files a/paligo-theme.tar.gz and b/paligo-theme.tar.gz differ diff --git a/tsconfig.base.json b/tsconfig.base.json index d30dac2bd..1c98f9731 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -29,7 +29,8 @@ "@shared/*": ["apps/red-ui/src/app/modules/shared/*"], "@state/*": ["apps/red-ui/src/app/state/*"], "@upload-download/*": ["apps/red-ui/src/app/modules/upload-download/*"], - "@utils/*": ["apps/red-ui/src/app/utils/*"] + "@utils/*": ["apps/red-ui/src/app/utils/*"], + "@red/domain": ["libs/red-domain/src/index.ts"] } }, "exclude": ["node_modules", "tmp"],