From 9880a4cc7540187f7d850e583e31a487f41a211c Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Tue, 27 Jun 2023 09:21:48 +0200
Subject: [PATCH] Convert VisibilityRule to interface

---
 projects/common/models/section.ts                   |  5 +----
 projects/common/models/visibility-rule.ts           | 13 +++----------
 .../visibility-rule-editor.component.html           |  2 +-
 .../visibility-rule-editor.component.ts             |  4 ++--
 .../visibility-rules-dialog.component.ts            |  2 +-
 5 files changed, 8 insertions(+), 18 deletions(-)

diff --git a/projects/common/models/section.ts b/projects/common/models/section.ts
index 38364c590..7680bf55b 100644
--- a/projects/common/models/section.ts
+++ b/projects/common/models/section.ts
@@ -39,10 +39,7 @@ export class Section {
     if (sanitizedBlueprint.visibilityDelay) this.visibilityDelay = sanitizedBlueprint.visibilityDelay;
     if (sanitizedBlueprint.animatedVisibility) this.animatedVisibility = sanitizedBlueprint.animatedVisibility;
     if (sanitizedBlueprint.enableReHide) this.enableReHide = sanitizedBlueprint.enableReHide;
-    if (sanitizedBlueprint.visibilityRules) {
-      this.visibilityRules = sanitizedBlueprint.visibilityRules
-        .map(rule => new VisibilityRule(rule.id, rule.operator, rule.value));
-    }
+    if (sanitizedBlueprint.visibilityRules) this.visibilityRules = sanitizedBlueprint.visibilityRules;
     this.elements =
       sanitizedBlueprint.elements?.map(element => ElementFactory.createElement({
         ...element,
diff --git a/projects/common/models/visibility-rule.ts b/projects/common/models/visibility-rule.ts
index 1a1856d9e..d9c85e6c0 100644
--- a/projects/common/models/visibility-rule.ts
+++ b/projects/common/models/visibility-rule.ts
@@ -1,15 +1,8 @@
-export class VisibilityRule {
+export interface VisibilityRule {
   id: string;
   operator: Operator;
   value: string;
-
-  static operators = ['=', '!=', '<', '<=', '>', '>='];
-
-  constructor(id: string, operator: Operator, value: string) {
-    this.id = id;
-    this.operator = operator;
-    this.value = value;
-  }
 }
 
-export type Operator = typeof VisibilityRule.operators[number];
+export const VisibilityRuleOperators = ['=', '!=', '<', '<=', '>', '>='];
+type Operator = typeof VisibilityRuleOperators[number];
diff --git a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.html b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.html
index 978c61870..468d95a6b 100644
--- a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.html
+++ b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.html
@@ -14,7 +14,7 @@
     <mat-label>{{'section.operator' | translate}}</mat-label>
     <mat-select [(ngModel)]="visibilityRule.operator"
                 (ngModelChange)="visibilityRuleChange.emit(visibilityRule)">
-      <mat-option *ngFor="let operator of VisibilityRule.operators"
+      <mat-option *ngFor="let operator of VisibilityRuleOperators"
                   [value]="operator">
         {{operator}}
       </mat-option>
diff --git a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.ts b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.ts
index 24547874b..10df8b6e9 100644
--- a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.ts
+++ b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rule-editor.component.ts
@@ -1,7 +1,7 @@
 import {
   Component, EventEmitter, Input, Output
 } from '@angular/core';
-import { VisibilityRule } from 'common/models/visibility-rule';
+import { VisibilityRule, VisibilityRuleOperators } from 'common/models/visibility-rule';
 
 @Component({
   selector: 'aspect-visibility-rule-editor',
@@ -12,5 +12,5 @@ export class VisibilityRuleEditorComponent {
   @Input() visibilityRule!: VisibilityRule;
 
   @Output() visibilityRuleChange = new EventEmitter<VisibilityRule>();
-  protected readonly VisibilityRule = VisibilityRule;
+  protected readonly VisibilityRuleOperators = VisibilityRuleOperators;
 }
diff --git a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rules-dialog.component.ts b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rules-dialog.component.ts
index 4775b0725..fd34cbfc2 100644
--- a/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rules-dialog.component.ts
+++ b/projects/editor/src/app/components/dialogs/visibility-rules-dialog/visibility-rules-dialog.component.ts
@@ -30,7 +30,7 @@ export class VisibilityRulesDialogComponent {
   }
 
   addVisibilityRule(): void {
-    this.visibilityRules.push(new VisibilityRule('', '=', ''));
+    this.visibilityRules.push({ id: '', operator: '=', value: '' });
   }
 
   deleteVisibilityRule(index: number): void {
-- 
GitLab