diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index a29289c29..1c619cd87 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -49,7 +49,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [ ], }, { - path: 'rules', + path: 'entity-rules', component: BaseDossierTemplateScreenComponent, canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { @@ -59,7 +59,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [ redirectTo: 'info', }, }, - loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule), + loadChildren: () => import('./screens/rules/entity-rules.module').then(m => m.EntityRulesModule), }, { path: 'component-rules', diff --git a/apps/red-ui/src/app/modules/admin/admin.module.ts b/apps/red-ui/src/app/modules/admin/admin.module.ts index 495528870..fc8df4e81 100644 --- a/apps/red-ui/src/app/modules/admin/admin.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin.module.ts @@ -57,7 +57,6 @@ import { DossierTemplateActionsComponent } from './shared/components/dossier-tem import { IqserUsersModule } from '@iqser/common-ui/lib/users'; import { TenantPipe } from '@iqser/common-ui/lib/tenants'; import { SelectComponent } from '@shared/components/select/select.component'; -import { ComponentRulesService } from './services/component-rules.service'; const dialogs = [ AddEditCloneDossierTemplateDialogComponent, @@ -98,7 +97,7 @@ const components = [ @NgModule({ declarations: [...components], - providers: [AdminDialogService, AuditService, DigitalSignatureService, RulesService, ComponentRulesService, SmtpConfigService], + providers: [AdminDialogService, AuditService, DigitalSignatureService, RulesService, SmtpConfigService], imports: [ CommonModule, SharedModule, diff --git a/apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.html similarity index 100% rename from apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.html rename to apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.html diff --git a/apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.scss b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.scss similarity index 100% rename from apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.scss rename to apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.scss diff --git a/apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.ts similarity index 96% rename from apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.ts rename to apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.ts index c17ee1beb..cf7839551 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-rules/rules-screen/component-rules-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules-screen/component-rules-screen.component.ts @@ -8,7 +8,7 @@ import { DOSSIER_TEMPLATE_ID } from '@red/domain'; import { EditorThemeService } from '@services/editor-theme.service'; import { ComponentCanDeactivate } from '@guards/can-deactivate.guard'; import { Debounce, getParam } from '@iqser/common-ui/lib/utils'; -import { ComponentRulesService } from '../../../services/component-rules.service'; +import { RulesService } from '../../../services/rules.service'; import ICodeEditor = monaco.editor.ICodeEditor; import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration; import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions; @@ -46,7 +46,7 @@ export class ComponentRulesScreenComponent implements OnInit, ComponentCanDeacti constructor( readonly permissionsService: PermissionsService, - private readonly _componentRulesService: ComponentRulesService, + private readonly _rulesService: RulesService, private readonly _changeDetectorRef: ChangeDetectorRef, private readonly _toaster: Toaster, private readonly _loadingService: LoadingService, @@ -99,9 +99,10 @@ export class ComponentRulesScreenComponent implements OnInit, ComponentCanDeacti this._loadingService.start(); this._removeErrorMarkers(); await firstValueFrom( - this._componentRulesService.uploadRules({ + this._rulesService.uploadRules({ rules: this._codeEditor.getModel().getValue(), dossierTemplateId: this.#dossierTemplateId, + ruleFileType: 'COMPONENT', }), ).then( async () => { @@ -205,7 +206,7 @@ export class ComponentRulesScreenComponent implements OnInit, ComponentCanDeacti private async _initialize() { this._loadingService.start(); - await firstValueFrom(this._componentRulesService.download(this.#dossierTemplateId)).then( + await firstValueFrom(this._rulesService.download(this.#dossierTemplateId, 'COMPONENT')).then( rules => { this.currentLines = this.initialLines = rules.rules.split('\n'); this.revert(); diff --git a/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules.module.ts b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules.module.ts index 14c171ff2..d5abe3232 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules.module.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-rules/component-rules.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; -import { ComponentRulesScreenComponent } from './rules-screen/component-rules-screen.component'; +import { ComponentRulesScreenComponent } from './component-rules-screen/component-rules-screen.component'; import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor'; import { PendingChangesGuard } from '@guards/can-deactivate.guard'; import { TranslateModule } from '@ngx-translate/core'; diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.html similarity index 66% rename from apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html rename to apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.html index 88a74ec4e..d06c91ec7 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.html @@ -1,6 +1,6 @@
-
-
+
+
@@ -9,18 +9,18 @@
- +
-
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.scss similarity index 100% rename from apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss rename to apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.scss diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.ts similarity index 95% rename from apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts rename to apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.ts index 2635ec949..2798fed49 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules-screen/entity-rules-screen.component.ts @@ -20,11 +20,11 @@ interface SyntaxError { } @Component({ - templateUrl: './rules-screen.component.html', - styleUrls: ['./rules-screen.component.scss'], + templateUrl: './entity-rules-screen.component.html', + styleUrls: ['./entity-rules-screen.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { +export class EntityRulesScreenComponent implements OnInit, ComponentCanDeactivate { readonly iconButtonTypes = IconButtonTypes; readonly editorOptions: IStandaloneEditorConstructionOptions = { theme: 'vs', @@ -106,13 +106,13 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { ).then( async () => { await this._initialize(); - this._toaster.success(_('rules-screen.success.generic')); + this._toaster.success(_('entity-rules-screen.success.generic')); }, error => { const errors = error.error as SyntaxError[] | undefined; this._drawErrorMarkers(errors); this._loadingService.stop(); - this._toaster.error(_('rules-screen.error.generic')); + this._toaster.error(_('entity-rules-screen.error.generic')); }, ); } diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules.module.ts b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules.module.ts similarity index 71% rename from apps/red-ui/src/app/modules/admin/screens/rules/rules.module.ts rename to apps/red-ui/src/app/modules/admin/screens/rules/entity-rules.module.ts index e6b248714..901f1f727 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules.module.ts +++ b/apps/red-ui/src/app/modules/admin/screens/rules/entity-rules.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; -import { RulesScreenComponent } from './rules-screen/rules-screen.component'; +import { EntityRulesScreenComponent } from './entity-rules-screen/entity-rules-screen.component'; import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor'; import { PendingChangesGuard } from '@guards/can-deactivate.guard'; import { TranslateModule } from '@ngx-translate/core'; @@ -9,10 +9,10 @@ import { IconButtonComponent } from '@iqser/common-ui'; import { FormsModule } from '@angular/forms'; import { MatIconModule } from '@angular/material/icon'; -const routes = [{ path: '', component: RulesScreenComponent, canDeactivate: [PendingChangesGuard] }]; +const routes = [{ path: '', component: EntityRulesScreenComponent, canDeactivate: [PendingChangesGuard] }]; @NgModule({ - declarations: [RulesScreenComponent], + declarations: [EntityRulesScreenComponent], imports: [ RouterModule.forChild(routes), CommonModule, @@ -23,4 +23,4 @@ const routes = [{ path: '', component: RulesScreenComponent, canDeactivate: [Pen MatIconModule, ], }) -export class RulesModule {} +export class EntityRulesModule {} diff --git a/apps/red-ui/src/app/modules/admin/services/component-rules.service.ts b/apps/red-ui/src/app/modules/admin/services/component-rules.service.ts deleted file mode 100644 index 74b4ffa61..000000000 --- a/apps/red-ui/src/app/modules/admin/services/component-rules.service.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Injectable } from '@angular/core'; -import { GenericService } from '@iqser/common-ui'; -import { IComponentRules } from '@red/domain'; - -@Injectable() -export class ComponentRulesService extends GenericService { - protected readonly _defaultModelPath = 'rules'; - - download(dossierTemplateId: string) { - return this._getOne([dossierTemplateId]); - } - - uploadRules(body: IComponentRules) { - return this._post(body); - } -} diff --git a/apps/red-ui/src/app/modules/admin/services/rules.service.ts b/apps/red-ui/src/app/modules/admin/services/rules.service.ts index bb221a185..5e3cf34e3 100644 --- a/apps/red-ui/src/app/modules/admin/services/rules.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/rules.service.ts @@ -6,11 +6,11 @@ import { IRules } from '@red/domain'; export class RulesService extends GenericService { protected readonly _defaultModelPath = 'rules'; - download(dossierTemplateId: string) { - return this._getOne([dossierTemplateId]); + download(dossierTemplateId: string, ruleFileType: IRules['ruleFileType'] = 'ENTITY') { + return this._getOne([dossierTemplateId], this._defaultModelPath, [{ key: 'ruleFileType', value: ruleFileType }]); } uploadRules(body: IRules) { - return this._post(body); + return this._post({ ...body, ruleFileType: body.ruleFileType ?? 'ENTITY' }); } } diff --git a/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts index 71888466f..73bc932a9 100644 --- a/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts @@ -95,8 +95,8 @@ export class AdminSideNavComponent implements OnInit { show: true, }, { - screen: 'rules', - label: _('admin-side-nav.rule-editor'), + screen: 'entity-rules', + label: _('admin-side-nav.entity-rule-editor'), show: (this.isIqserDevMode || this.canAccessRulesInDocumine) && this._permissionsService.has(Roles.rules.read), }, { diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 12448eefa..1e62363f2 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -245,13 +245,13 @@ "dossier-templates": "Dossier-Vorlage", "entities": "Entities", "entity-info": "Info", + "entity-rule-editor": "Entity Rule Editor", "false-positive": "False Positive", "false-recommendations": "False Recommendations", "file-attributes": "File Attributes", "justifications": "Justifications", "license-information": "License Information", "reports": "Reports", - "rule-editor": "Rule Editor", "settings": "Einstellungen", "user-management": "User Management", "watermarks": "Watermarks" @@ -1293,6 +1293,19 @@ "heading": "Edit Entity" } }, + "entity-rules-screen": { + "error": { + "generic": "Something went wrong... Entity rules update failed!" + }, + "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", + "revert-changes": "Revert", + "save-changes": "Save Changes", + "success": { + "generic": "Entity rules updated!" + }, + "title": "Entity Rule Editor", + "warning-text": "Warning: experimental feature!" + }, "error": { "deleted-entity": { "dossier": { @@ -2239,19 +2252,6 @@ }, "title": "Structured Component Management" }, - "rules-screen": { - "error": { - "generic": "Es ist ein Fehler aufgetreten ... Die Regeln konnten nicht aktualisiert werden!" - }, - "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", - "revert-changes": "Anmeldedaten speichern", - "save-changes": "Änderungen speichern", - "success": { - "generic": "Die Regeln wurden aktualisiert!" - }, - "title": "Rule Editor", - "warning-text": "Warning: experimental feature!" - }, "search": { "active-dossiers": "ganze Plattform", "all-dossiers": "all documents", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 1a5d3bf82..3caa260f4 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -245,13 +245,13 @@ "dossier-templates": "Dossier Templates", "entities": "Entities", "entity-info": "Info", + "entity-rule-editor": "Entity Rule Editor", "false-positive": "False Positive", "false-recommendations": "False Recommendations", "file-attributes": "File Attributes", "justifications": "Justifications", "license-information": "License Information", "reports": "Reports", - "rule-editor": "Rule Editor", "settings": "Settings", "user-management": "User Management", "watermarks": "Watermarks" @@ -1284,6 +1284,19 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, + "entity-rules-screen": { + "error": { + "generic": "Something went wrong... Entity rules update failed!" + }, + "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", + "revert-changes": "Revert", + "save-changes": "Save Changes", + "success": { + "generic": "Entity rules updated!" + }, + "title": "Entity Rule Editor", + "warning-text": "Warning: experimental feature!" + }, "entity": { "info": { "actions": { @@ -2239,19 +2252,6 @@ }, "title": "Structured Component Management" }, - "rules-screen": { - "error": { - "generic": "Something went wrong... Rules update failed!" - }, - "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", - "revert-changes": "Revert", - "save-changes": "Save Changes", - "success": { - "generic": "Rules updated!" - }, - "title": "Rule Editor", - "warning-text": "Warning: experimental feature!" - }, "search-screen": { "cols": { "assignee": "Assignee", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 6bef9e9c2..f422a3d72 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -245,13 +245,13 @@ "dossier-templates": "Dossier-Vorlage", "entities": "", "entity-info": "", + "entity-rule-editor": "", "false-positive": "", "false-recommendations": "", "file-attributes": "", "justifications": "", "license-information": "", "reports": "", - "rule-editor": "", "settings": "Einstellungen", "user-management": "", "watermarks": "" @@ -1284,6 +1284,19 @@ "title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" } }, + "entity-rules-screen": { + "error": { + "generic": "" + }, + "errors-found": "", + "revert-changes": "", + "save-changes": "", + "success": { + "generic": "" + }, + "title": "", + "warning-text": "" + }, "entity": { "info": { "actions": { @@ -2239,19 +2252,6 @@ }, "title": "" }, - "rules-screen": { - "error": { - "generic": "Es ist ein Fehler aufgetreten ... Die Regeln konnten nicht aktualisiert werden!" - }, - "errors-found": "", - "revert-changes": "Anmeldedaten speichern", - "save-changes": "Änderungen speichern", - "success": { - "generic": "Die Regeln wurden aktualisiert!" - }, - "title": "", - "warning-text": "" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 54780a8cd..e0b4ab8df 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -245,13 +245,13 @@ "dossier-templates": "Dossier Templates", "entities": "Entities", "entity-info": "Info", + "entity-rule-editor": "Entity Rule Editor", "false-positive": "False Positive", "false-recommendations": "False Recommendations", "file-attributes": "File Attributes", "justifications": "Justifications", "license-information": "License Information", "reports": "Reports", - "rule-editor": "Rule Editor", "settings": "Settings", "user-management": "User Management", "watermarks": "Watermarks" @@ -1284,6 +1284,19 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, + "entity-rules-screen": { + "error": { + "generic": "Something went wrong... Entity rules update failed!" + }, + "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", + "revert-changes": "Revert", + "save-changes": "Save Changes", + "success": { + "generic": "Entity rules updated!" + }, + "title": "Entity Rule Editor", + "warning-text": "Warning: experimental feature!" + }, "entity": { "info": { "actions": { @@ -2239,19 +2252,6 @@ }, "title": "Component View" }, - "rules-screen": { - "error": { - "generic": "Something went wrong... Rules update failed!" - }, - "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", - "revert-changes": "Revert", - "save-changes": "Save Changes", - "success": { - "generic": "Rules updated!" - }, - "title": "Rule Editor", - "warning-text": "Warning: experimental feature!" - }, "search-screen": { "cols": { "assignee": "Assignee", diff --git a/libs/red-domain/src/lib/shared/rules.ts b/libs/red-domain/src/lib/shared/rules.ts index 64a4f9550..a94c435ec 100644 --- a/libs/red-domain/src/lib/shared/rules.ts +++ b/libs/red-domain/src/lib/shared/rules.ts @@ -3,9 +3,13 @@ */ export interface IRules { /** - * The DossierTemplate Id for these rules + * The DossierTemplate ID for these rules */ dossierTemplateId?: string; + /** + * The file type to be retrieved/saved under, defaults to ENTITY + */ + ruleFileType?: 'ENTITY' | 'COMPONENT'; /** * The actual string of rules. */