Newer
Older
import { Injectable } from '@angular/core';
import { TextMarker } from '../classes/text-marker';
import { Unit } from '../../../../common/interfaces/unit';
import {
AudioElement, DragNDropValueObject, InputElement, InputElementValue,
TextElement, UIElement, UIElementType, VideoElement
} from '../../../../common/interfaces/elements';
import { UnitUtils } from '../../../../common/util/unit-utils';
@Injectable({
providedIn: 'root'
})
export class UnitStateElementMapperService {
dropListValueIds!: DragNDropValueObject[];
registerDropListValueIds(unitDefinition: Unit): void {
this.dropListValueIds = UnitUtils.findUIElements(unitDefinition.pages, 'drop-list')
.reduce(
(accumulator: DragNDropValueObject[], currentValue: UIElement) => (
(currentValue.value && (currentValue.value as DragNDropValueObject[]).length) ?
accumulator.concat(currentValue.value as DragNDropValueObject) : accumulator), []
fromUnitState = (unitStateValue: InputElementValue | undefined, elementModel: UIElement): InputElementValue => {
case 'drop-list':
return (unitStateValue !== undefined) ?
(unitStateValue as string[]).map(id => this.getDropListValueById(id)) as DragNDropValueObject[] :
(elementModel as InputElement).value;
return (unitStateValue !== undefined) ?
TextMarker.restoreMarkings(unitStateValue as string[], (elementModel as TextElement).text) :
(elementModel as TextElement).text;
return unitStateValue !== undefined ?
unitStateValue as number :
(elementModel as AudioElement).playerProps.playbackTime;
case 'video':
return unitStateValue !== undefined ?
unitStateValue as number :
(elementModel as VideoElement).playerProps.playbackTime;
case 'radio':
case 'radio-group-images':
case 'dropdown':
case 'toggle-button':
case 'likert-row':
return unitStateValue !== undefined ? unitStateValue as number - 1 : (elementModel as InputElement).value;
default:
return unitStateValue !== undefined ? unitStateValue : (elementModel as InputElement).value;
}
};
toUnitState = (value: InputElementValue, elementType: UIElementType): InputElementValue => {
switch (elementType) {
return (value as DragNDropValueObject[]).map(object => object.id);
case 'radio':
case 'radio-group-images':
case 'dropdown':
case 'toggle-button':
case 'likert-row':
return value as number + 1;
}
};
reset(): void {
this.dropListValueIds = [];
}
private getDropListValueById(id: string): DragNDropValueObject | undefined {
return this.dropListValueIds.find(dropListValue => dropListValue.id === id);
}
}