From 9975f1cd1b678eade5dbecbe0ff61136fc22af7f Mon Sep 17 00:00:00 2001
From: rhenck <richard.henck@iqb.hu-berlin.de>
Date: Mon, 18 Oct 2021 15:52:18 +0200
Subject: [PATCH] Use serialized parameters when building elements

Before the defaults were simply set on any field regardless of the
passed object.
---
 projects/common/models/button-element.ts      |  4 ++--
 projects/common/models/checkbox-element.ts    |  4 ++--
 projects/common/models/dropdown-element.ts    |  4 ++--
 .../models/radio-button-group-element.ts      |  4 ++--
 projects/common/models/text-area-element.ts   |  4 ++--
 projects/common/models/text-element.ts        |  2 +-
 projects/common/models/text-field-element.ts  |  4 ++--
 .../common/util/unit-interface-initializer.ts | 19 ++++++++++---------
 8 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/projects/common/models/button-element.ts b/projects/common/models/button-element.ts
index 70d1e4376..c988c4e2b 100644
--- a/projects/common/models/button-element.ts
+++ b/projects/common/models/button-element.ts
@@ -20,7 +20,7 @@ export class ButtonElement extends UIElement implements FontElement, SurfaceUIEl
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
   }
 }
diff --git a/projects/common/models/checkbox-element.ts b/projects/common/models/checkbox-element.ts
index 62122fc41..b9cfb3a72 100644
--- a/projects/common/models/checkbox-element.ts
+++ b/projects/common/models/checkbox-element.ts
@@ -15,8 +15,8 @@ export class CheckboxElement extends InputElement implements FontElement, Surfac
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
 
     this.value = serializedElement.value as boolean || false; // booleans are always initialized false
 
diff --git a/projects/common/models/dropdown-element.ts b/projects/common/models/dropdown-element.ts
index 45833bba4..3aa5578ae 100644
--- a/projects/common/models/dropdown-element.ts
+++ b/projects/common/models/dropdown-element.ts
@@ -18,8 +18,8 @@ export class DropdownElement extends InputElement implements FontElement, Surfac
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
 
     this.height = serializedElement.height || 83;
   }
diff --git a/projects/common/models/radio-button-group-element.ts b/projects/common/models/radio-button-group-element.ts
index 0047de1a0..96d732186 100644
--- a/projects/common/models/radio-button-group-element.ts
+++ b/projects/common/models/radio-button-group-element.ts
@@ -18,8 +18,8 @@ export class RadioButtonGroupElement extends InputElement implements FontElement
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
 
     this.height = serializedElement.height || 85;
     this.backgroundColor = serializedElement.backgroundColor as string || 'transparent';
diff --git a/projects/common/models/text-area-element.ts b/projects/common/models/text-area-element.ts
index 3571580e5..63dd5641b 100644
--- a/projects/common/models/text-area-element.ts
+++ b/projects/common/models/text-area-element.ts
@@ -20,8 +20,8 @@ export class TextAreaElement extends InputElement implements FontElement, Surfac
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
 
     this.height = serializedElement.height || 132;
     this.backgroundColor = serializedElement.backgroundColor as string || 'transparent';
diff --git a/projects/common/models/text-element.ts b/projects/common/models/text-element.ts
index 225823c1f..397233398 100644
--- a/projects/common/models/text-element.ts
+++ b/projects/common/models/text-element.ts
@@ -16,7 +16,7 @@ export class TextElement extends UIElement implements SurfaceUIElement {
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initSurfaceElement(serializedElement));
     this.fontColor = serializedElement.fontColor as string || 'black';
     this.font = serializedElement.font as string || 'Roboto';
     this.bold = serializedElement.bold as boolean || false;
diff --git a/projects/common/models/text-field-element.ts b/projects/common/models/text-field-element.ts
index 50bd8deb2..a1c9b4506 100644
--- a/projects/common/models/text-field-element.ts
+++ b/projects/common/models/text-field-element.ts
@@ -27,8 +27,8 @@ export class TextFieldElement extends InputElement implements FontElement, Surfa
   constructor(serializedElement: UIElement, coordinates?: { x: number; y: number }) {
     super(serializedElement, coordinates);
     Object.assign(this, serializedElement);
-    Object.assign(this, initFontElement());
-    Object.assign(this, initSurfaceElement());
+    Object.assign(this, initFontElement(serializedElement));
+    Object.assign(this, initSurfaceElement(serializedElement));
 
     this.height = serializedElement.height || 100;
     this.backgroundColor = serializedElement.backgroundColor as string || 'transparent';
diff --git a/projects/common/util/unit-interface-initializer.ts b/projects/common/util/unit-interface-initializer.ts
index 24e3f4241..f3db614b7 100644
--- a/projects/common/util/unit-interface-initializer.ts
+++ b/projects/common/util/unit-interface-initializer.ts
@@ -1,16 +1,17 @@
 import { FontElement, SurfaceUIElement } from '../interfaces/UIElementInterfaces';
+import { UIElement } from '../models/uI-element';
 
-export function initFontElement(): FontElement {
+export function initFontElement(serializedElement: UIElement): FontElement {
   return {
-    fontColor: 'black',
-    font: 'Roboto',
-    fontSize: 18,
-    bold: false,
-    italic: false,
-    underline: false
+    fontColor: serializedElement.fontColor as string || 'black',
+    font: serializedElement.font as string || 'Roboto',
+    fontSize: serializedElement.fontSize as number || 18,
+    bold: serializedElement.bold as boolean || false,
+    italic: serializedElement.italic as boolean || false,
+    underline: serializedElement.underline as boolean || false
   };
 }
 
-export function initSurfaceElement(): SurfaceUIElement {
-  return { backgroundColor: 'lightgrey' };
+export function initSurfaceElement(serializedElement: UIElement): SurfaceUIElement {
+  return { backgroundColor: serializedElement.backgroundColor as string || 'lightgrey' };
 }
-- 
GitLab