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/rules-screen/rules-screen.component.html
index 80bb36faf..88a74ec4e 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/rules-screen/rules-screen.component.html
@@ -6,12 +6,21 @@
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/rules-screen/rules-screen.component.scss
index 02e4143ba..978ec8419 100644
--- 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/rules-screen/rules-screen.component.scss
@@ -23,3 +23,45 @@ ngx-monaco-editor {
font-style: italic;
}
}
+
+.changes-box {
+ flex-direction: column;
+ justify-content: center;
+ align-items: start;
+ gap: 10px;
+
+ > div {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ }
+
+ .errors {
+ cursor: pointer;
+
+ .icon {
+ scale: 0.7;
+ }
+
+ :first-child {
+ display: flex;
+ align-items: center;
+ gap: 0.5em;
+ font-weight: 500;
+ /* TODO: Update this to --iqser-error when added */
+ color: var(--iqser-red-1);
+ }
+
+ .face-up {
+ transform: rotate(90deg);
+ }
+
+ margin-right: 0;
+ }
+
+ .actions {
+ gap: 24px;
+ }
+}
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/rules-screen/rules-screen.component.ts
index a3020e91b..ea1da9364 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/rules-screen/rules-screen.component.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit, signal, ViewChild } from '@angular/core';
import { PermissionsService } from '@services/permissions.service';
import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
import { saveAs } from 'file-saver';
@@ -25,6 +25,7 @@ interface SyntaxError {
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class RulesScreenComponent implements OnInit, ComponentCanDeactivate {
+ readonly numberOfErrors = signal(0);
readonly iconButtonTypes = IconButtonTypes;
readonly editorOptions: IStandaloneEditorConstructionOptions = {
theme: 'vs',
@@ -90,8 +91,13 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate {
this._decorations = this._codeEditor.deltaDecorations(this._decorations, newDecorations);
}
+ goToErrors() {
+ this._codeEditor.trigger('keyboard', 'editor.action.marker.next', null);
+ }
+
async save(): Promise {
this._loadingService.start();
+ this.numberOfErrors.set(0);
await firstValueFrom(
this._rulesService.uploadRules({
rules: this._codeEditor.getModel().getValue(),
@@ -180,6 +186,7 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate {
},
});
});
+ this.numberOfErrors.set(markers.length);
this._errorGlyphs = this._codeEditor.deltaDecorations(this._errorGlyphs, glyphs);
(window as any).monaco.editor.setModelMarkers(model, model.id, markers);
}
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/rules.module.ts
index bd26cc278..e6b248714 100644
--- a/apps/red-ui/src/app/modules/admin/screens/rules/rules.module.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules.module.ts
@@ -7,11 +7,20 @@ import { PendingChangesGuard } from '@guards/can-deactivate.guard';
import { TranslateModule } from '@ngx-translate/core';
import { IconButtonComponent } from '@iqser/common-ui';
import { FormsModule } from '@angular/forms';
+import { MatIconModule } from '@angular/material/icon';
const routes = [{ path: '', component: RulesScreenComponent, canDeactivate: [PendingChangesGuard] }];
@NgModule({
declarations: [RulesScreenComponent],
- imports: [RouterModule.forChild(routes), CommonModule, MonacoEditorModule, TranslateModule, IconButtonComponent, FormsModule],
+ imports: [
+ RouterModule.forChild(routes),
+ CommonModule,
+ MonacoEditorModule,
+ TranslateModule,
+ IconButtonComponent,
+ FormsModule,
+ MatIconModule,
+ ],
})
export class RulesModule {}
diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json
index 2ccc6f6d1..42bf5941f 100644
--- a/apps/red-ui/src/assets/config/config.json
+++ b/apps/red-ui/src/assets/config/config.json
@@ -1,9 +1,9 @@
{
"ADMIN_CONTACT_NAME": null,
"ADMIN_CONTACT_URL": null,
- "API_URL": "https://frontend2.iqser.cloud",
+ "API_URL": "https://dan.iqser.cloud",
"APP_NAME": "RedactManager",
- "IS_DOCUMINE": true,
+ "IS_DOCUMINE": false,
"RULE_EDITOR_DEV_ONLY": false,
"AUTO_READ_TIME": 3,
"BACKEND_APP_VERSION": "4.4.40",
@@ -13,13 +13,13 @@
"MAX_RETRIES_ON_SERVER_ERROR": 3,
"OAUTH_CLIENT_ID": "redaction",
"OAUTH_IDP_HINT": null,
- "OAUTH_URL": "https://frontend2.iqser.cloud/auth",
+ "OAUTH_URL": "https://dan.iqser.cloud/auth",
"RECENT_PERIOD_IN_HOURS": 24,
"SELECTION_MODE": "structural",
"MANUAL_BASE_URL": "https://docs.redactmanager.com/preview",
"ANNOTATIONS_THRESHOLD": 1000,
- "THEME": "scm",
- "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/scm/",
+ "THEME": "redact",
+ "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/redact/",
"AVAILABLE_NOTIFICATIONS_DAYS": 30,
"AVAILABLE_OLD_NOTIFICATIONS_MINUTES": 60,
"NOTIFICATIONS_THRESHOLD": 1000,
diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json
index 7d86de477..491127258 100644
--- a/apps/red-ui/src/assets/i18n/redact/de.json
+++ b/apps/red-ui/src/assets/i18n/redact/de.json
@@ -1237,7 +1237,8 @@
"reason": "",
"redacted-text": "",
"section": "",
- "type": ""
+ "type": "",
+ "unchanged": ""
},
"title": ""
}
@@ -2209,16 +2210,17 @@
"title": ""
},
"rules-screen": {
- "title": "",
- "warning-text": "",
"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": {
diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json
index 92551c9ae..90be40ba8 100644
--- a/apps/red-ui/src/assets/i18n/redact/en.json
+++ b/apps/red-ui/src/assets/i18n/redact/en.json
@@ -1237,7 +1237,8 @@
"reason": "Reason",
"redacted-text": "Redacted text",
"section": "Paragraph / Location",
- "type": "Type"
+ "type": "Type",
+ "unchanged": ""
},
"title": "Edit {type, select, image{Image} hint{Hint} other{Redaction}}"
}
@@ -2209,16 +2210,17 @@
"title": "Structured Component Management"
},
"rules-screen": {
- "title": "Rule Editor",
- "warning-text": "Warning: experimental feature!",
"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": {
diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json
index 2ac5e426b..d1471dccf 100644
--- a/apps/red-ui/src/assets/i18n/scm/de.json
+++ b/apps/red-ui/src/assets/i18n/scm/de.json
@@ -1237,7 +1237,8 @@
"reason": "",
"redacted-text": "",
"section": "",
- "type": ""
+ "type": "",
+ "unchanged": ""
},
"title": ""
}
@@ -2209,16 +2210,17 @@
"title": ""
},
"rules-screen": {
- "title": "",
- "warning-text": "",
"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": {
diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json
index 67035859e..caf96dbd9 100644
--- a/apps/red-ui/src/assets/i18n/scm/en.json
+++ b/apps/red-ui/src/assets/i18n/scm/en.json
@@ -2210,16 +2210,17 @@
"title": "Component View"
},
"rules-screen": {
- "title": "Rule Editor",
- "warning-text": "Warning: experimental feature!",
"error": {
"generic": "Something went wrong... Rules update failed!"
},
+ "errors-found": "",
"revert-changes": "Revert",
"save-changes": "Save Changes",
"success": {
"generic": "Rules updated!"
- }
+ },
+ "title": "Rule Editor",
+ "warning-text": "Warning: experimental feature!"
},
"search-screen": {
"cols": {