From 5b5a67cafd3bad79425d56e1456bde3a0ca92a68 Mon Sep 17 00:00:00 2001 From: jojohoch <joachim.hoch@iqb.hu-berlin.de> Date: Tue, 14 Jun 2022 14:15:39 +0200 Subject: [PATCH] [editor] Implement 'hasSchemerData' for elements with schemer data - Implement hasSchemerData in UIElement - Fix nullable field for some elements --- .../cloze-child-elements/drop-list-simple.ts | 4 ++++ .../cloze-child-elements/text-field-simple.ts | 19 +++++++------------ .../cloze-child-elements/toggle-button.ts | 4 ++++ .../compound-elements/likert/likert-row.ts | 12 ++++++++++-- projects/common/models/elements/element.ts | 4 ++++ .../elements/input-elements/checkbox.ts | 4 ++++ .../elements/input-elements/drop-list.ts | 4 ++++ .../elements/input-elements/dropdown.ts | 4 ++++ .../radio-button-group-complex.ts | 6 +++++- .../input-elements/radio-button-group.ts | 6 +++++- .../models/elements/input-elements/slider.ts | 6 +++++- .../elements/input-elements/spell-correct.ts | 12 ++++++------ .../elements/input-elements/text-area.ts | 14 +++++++------- .../elements/input-elements/text-field.ts | 14 +++++++------- 14 files changed, 76 insertions(+), 37 deletions(-) diff --git a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/drop-list-simple.ts b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/drop-list-simple.ts index 3cfe30c97..4ca98e0af 100644 --- a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/drop-list-simple.ts +++ b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/drop-list-simple.ts @@ -37,6 +37,10 @@ export class DropListSimpleElement extends InputElement { }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(dropLists: Array<DropListElement | DropListSimpleElement>): SchemerData { return { id: this.id, diff --git a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts index eeb0c61f0..57447f946 100644 --- a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts +++ b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/text-field-simple.ts @@ -1,10 +1,6 @@ import { ElementFactory } from 'common/util/element.factory'; import { - BasicStyles, - InputAssistancePreset, - InputElement, - SchemerData, - SchemerValue + BasicStyles, InputAssistancePreset, InputElement, SchemerData } from 'common/models/elements/element'; import { Type } from '@angular/core'; import { ElementComponent } from 'common/directives/element-component.directive'; @@ -50,23 +46,22 @@ export class TextFieldSimpleElement extends InputElement { }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'string', format: '', multiple: false, - nullable: !this.value && this.value === '', - values: this.getSchemerValues(), + nullable: !this.value && this.value !== '', + values: [], valuesComplete: false }; } - private getSchemerValues(): SchemerValue[] { - return []; - } - - getComponentFactory(): Type<ElementComponent> { return TextFieldSimpleComponent; } diff --git a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts index 55a28e0f5..ad7cd8798 100644 --- a/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts +++ b/projects/common/models/elements/compound-elements/cloze/cloze-child-elements/toggle-button.ts @@ -32,6 +32,10 @@ export class ToggleButtonElement extends InputElement { }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, diff --git a/projects/common/models/elements/compound-elements/likert/likert-row.ts b/projects/common/models/elements/compound-elements/likert/likert-row.ts index 6c51af805..c6b80ddad 100644 --- a/projects/common/models/elements/compound-elements/likert/likert-row.ts +++ b/projects/common/models/elements/compound-elements/likert/likert-row.ts @@ -19,20 +19,28 @@ export class LikertRowElement extends InputElement { if (element.verticalButtonAlignment) this.verticalButtonAlignment = element.verticalButtonAlignment; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'integer', format: '', multiple: false, - nullable: !this.value && this.value === 0, + nullable: !this.value && this.value !== 0, values: this.getSchemerValues(), valuesComplete: true }; } private getSchemerValues(): SchemerValue[] { - return []; + console.log(this.value); + return [ + { value: !this.value && this.value !== 0 ? 'null' : (this.value as number + 1).toString(), + label: this.rowLabel.text } // TODO Image + ]; } getComponentFactory(): Type<ElementComponent> { diff --git a/projects/common/models/elements/element.ts b/projects/common/models/elements/element.ts index 989b354fb..1b0c6da72 100644 --- a/projects/common/models/elements/element.ts +++ b/projects/common/models/elements/element.ts @@ -70,6 +70,10 @@ export abstract class UIElement { return []; } + hasSchemerData(): boolean { + return false; + } + abstract getComponentFactory(): Type<ElementComponent>; } diff --git a/projects/common/models/elements/input-elements/checkbox.ts b/projects/common/models/elements/input-elements/checkbox.ts index 3eb64b673..03b327e60 100644 --- a/projects/common/models/elements/input-elements/checkbox.ts +++ b/projects/common/models/elements/input-elements/checkbox.ts @@ -20,6 +20,10 @@ export class CheckboxElement extends InputElement implements PositionedUIElement this.styling = ElementFactory.initStylingProps(element.styling); } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, diff --git a/projects/common/models/elements/input-elements/drop-list.ts b/projects/common/models/elements/input-elements/drop-list.ts index 2f7555a2c..ed80f461f 100644 --- a/projects/common/models/elements/input-elements/drop-list.ts +++ b/projects/common/models/elements/input-elements/drop-list.ts @@ -47,6 +47,10 @@ export class DropListElement extends InputElement implements PositionedUIElement }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(options: Array<DropListElement | DropListSimpleElement>): SchemerData { return { id: this.id, diff --git a/projects/common/models/elements/input-elements/dropdown.ts b/projects/common/models/elements/input-elements/dropdown.ts index 867d979b4..2cdd6623d 100644 --- a/projects/common/models/elements/input-elements/dropdown.ts +++ b/projects/common/models/elements/input-elements/dropdown.ts @@ -26,6 +26,10 @@ export class DropdownElement extends InputElement implements PositionedUIElement }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, diff --git a/projects/common/models/elements/input-elements/radio-button-group-complex.ts b/projects/common/models/elements/input-elements/radio-button-group-complex.ts index 8001df65d..b5b8caaec 100644 --- a/projects/common/models/elements/input-elements/radio-button-group-complex.ts +++ b/projects/common/models/elements/input-elements/radio-button-group-complex.ts @@ -24,13 +24,17 @@ export class RadioButtonGroupComplexElement extends InputElement implements Posi }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'integer', format: '', multiple: false, - nullable: !this.value && this.value === 0, + nullable: !this.value && this.value !== 0, values: this.getSchemerValues(), valuesComplete: true }; diff --git a/projects/common/models/elements/input-elements/radio-button-group.ts b/projects/common/models/elements/input-elements/radio-button-group.ts index 1bb9615b6..c1aabbed7 100644 --- a/projects/common/models/elements/input-elements/radio-button-group.ts +++ b/projects/common/models/elements/input-elements/radio-button-group.ts @@ -34,13 +34,17 @@ export class RadioButtonGroupElement extends InputElement implements PositionedU }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'integer', format: '', multiple: false, - nullable: !this.value && this.value === 0, + nullable: !this.value && this.value !== 0, values: this.getSchemerValues(), valuesComplete: true }; diff --git a/projects/common/models/elements/input-elements/slider.ts b/projects/common/models/elements/input-elements/slider.ts index 820ecf0ec..3043b801b 100644 --- a/projects/common/models/elements/input-elements/slider.ts +++ b/projects/common/models/elements/input-elements/slider.ts @@ -38,13 +38,17 @@ export class SliderElement extends InputElement implements PositionedUIElement { }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'integer', format: '', multiple: false, - nullable: !this.value && this.value === 0, + nullable: !this.value && this.value !== 0, values: this.getSchemerValues(), valuesComplete: true }; diff --git a/projects/common/models/elements/input-elements/spell-correct.ts b/projects/common/models/elements/input-elements/spell-correct.ts index 2b95efbbe..9042671a8 100644 --- a/projects/common/models/elements/input-elements/spell-correct.ts +++ b/projects/common/models/elements/input-elements/spell-correct.ts @@ -5,7 +5,7 @@ import { InputAssistancePreset, InputElement, PositionedUIElement, - PositionProperties, SchemerData, SchemerValue + PositionProperties, SchemerData } from 'common/models/elements/element'; import { ElementComponent } from 'common/directives/element-component.directive'; import { SpellCorrectComponent } from 'common/components/input-elements/spell-correct.component'; @@ -34,6 +34,10 @@ export class SpellCorrectElement extends InputElement implements PositionedUIEle }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, @@ -41,15 +45,11 @@ export class SpellCorrectElement extends InputElement implements PositionedUIEle format: '', multiple: false, nullable: true, - values: this.getSchemerValues(), + values: [], valuesComplete: false }; } - private getSchemerValues(): SchemerValue[] { - return []; - } - getComponentFactory(): Type<ElementComponent> { return SpellCorrectComponent; } diff --git a/projects/common/models/elements/input-elements/text-area.ts b/projects/common/models/elements/input-elements/text-area.ts index 70906e9ee..45215b956 100644 --- a/projects/common/models/elements/input-elements/text-area.ts +++ b/projects/common/models/elements/input-elements/text-area.ts @@ -5,7 +5,7 @@ import { InputAssistancePreset, InputElement, PositionedUIElement, - PositionProperties, SchemerData, SchemerValue + PositionProperties, SchemerData } from 'common/models/elements/element'; import { ElementComponent } from 'common/directives/element-component.directive'; import { TextAreaComponent } from 'common/components/input-elements/text-area.component'; @@ -46,22 +46,22 @@ export class TextAreaElement extends InputElement implements PositionedUIElement }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'string', format: '', multiple: false, - nullable: !this.value && this.value === '', - values: this.getSchemerValues(), + nullable: !this.value && this.value !== '', + values: [], valuesComplete: false }; } - private getSchemerValues(): SchemerValue[] { - return []; - } - getComponentFactory(): Type<ElementComponent> { return TextAreaComponent; } diff --git a/projects/common/models/elements/input-elements/text-field.ts b/projects/common/models/elements/input-elements/text-field.ts index bccfa40c2..d7e2f450d 100644 --- a/projects/common/models/elements/input-elements/text-field.ts +++ b/projects/common/models/elements/input-elements/text-field.ts @@ -2,7 +2,7 @@ import { Type } from '@angular/core'; import { ElementFactory } from 'common/util/element.factory'; import { BasicStyles, InputAssistancePreset, InputElement, - PositionedUIElement, PositionProperties, SchemerData, SchemerValue + PositionedUIElement, PositionProperties, SchemerData } from 'common/models/elements/element'; import { ElementComponent } from 'common/directives/element-component.directive'; import { TextFieldComponent } from 'common/components/input-elements/text-field.component'; @@ -53,22 +53,22 @@ export class TextFieldElement extends InputElement implements PositionedUIElemen }; } + hasSchemerData(): boolean { + return true; + } + getSchemerData(): SchemerData { return { id: this.id, type: 'string', format: '', multiple: false, - nullable: !this.value && this.value === '', - values: this.getSchemerValues(), + nullable: !this.value && this.value !== '', + values: [], valuesComplete: false }; } - private getSchemerValues(): SchemerValue[] { - return []; - } - getComponentFactory(): Type<ElementComponent> { return TextFieldComponent; } -- GitLab