Skip to content
Snippets Groups Projects
element.factory.ts 5 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { ComponentFactory, ComponentFactoryResolver } from '@angular/core';
    
    rhenck's avatar
    rhenck committed
    import { UIElement } from '../models/uI-element';
    import { TextElement } from '../models/text-element';
    import { ButtonElement } from '../models/button-element';
    import { TextFieldElement } from '../models/text-field-element';
    import { TextAreaElement } from '../models/text-area-element';
    import { CheckboxElement } from '../models/checkbox-element';
    import { DropdownElement } from '../models/dropdown-element';
    import { RadioButtonGroupElement } from '../models/radio-button-group-element';
    import { ImageElement } from '../models/image-element';
    import { AudioElement } from '../models/audio-element';
    import { VideoElement } from '../models/video-element';
    
    import { FileService } from '../file.service';
    
    import { TextComponent } from '../element-components/text.component';
    import { ButtonComponent } from '../element-components/button.component';
    import { TextFieldComponent } from '../element-components/text-field.component';
    import { TextAreaComponent } from '../element-components/text-area.component';
    import { CheckboxComponent } from '../element-components/checkbox.component';
    import { DropdownComponent } from '../element-components/dropdown.component';
    import { RadioButtonGroupComponent } from '../element-components/radio-button-group.component';
    import { ImageComponent } from '../element-components/image.component';
    import { AudioComponent } from '../element-components/audio.component';
    import { VideoComponent } from '../element-components/video.component';
    
    import { LikertElement } from '../models/compound-elements/likert-element';
    
    rhenck's avatar
    rhenck committed
    import { LikertComponent } from '../element-components/compound-elements/likert.component';
    
    import { RadioGroupImagesComponent } from '../element-components/compound-elements/radio-group-images.component';
    import { RadioGroupImagesElement } from '../models/compound-elements/radio-group-images';
    
    rhenck's avatar
    rhenck committed
    import { DropListComponent } from '../element-components/compound-elements/drop-list.component';
    import { DropListElement } from '../models/compound-elements/drop-list';
    
    rhenck's avatar
    rhenck committed
    export function createElement(elementModel: UIElement): UIElement {
    
      let newElement: UIElement;
      switch (elementModel.type) {
        case 'text':
    
    rhenck's avatar
    rhenck committed
          newElement = new TextElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new ButtonElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new TextFieldElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new TextAreaElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new CheckboxElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new DropdownElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new RadioButtonGroupElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new ImageElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new AudioElement(elementModel);
    
    rhenck's avatar
    rhenck committed
          newElement = new VideoElement(elementModel);
    
        case 'likert':
    
    rhenck's avatar
    rhenck committed
          newElement = new LikertElement(elementModel);
    
          break;
    
        case 'radio-group-images':
          newElement = new RadioGroupImagesElement(elementModel);
          break;
    
    rhenck's avatar
    rhenck committed
        case 'drop-list':
          newElement = new DropListElement(elementModel);
          break;
    
        default:
          throw new Error(`ElementType ${elementModel.type} not found!`);
      }
      console.log('newElement', newElement);
      return newElement;
    }
    
    
    export function getComponentFactory(
      elementType: string, componentFactoryResolver: ComponentFactoryResolver
    ): ComponentFactory<any> {
      // TODO: Find better solution than any
      switch (elementType) {
        case 'text':
          return componentFactoryResolver.resolveComponentFactory(TextComponent);
        case 'button':
          return componentFactoryResolver.resolveComponentFactory(ButtonComponent);
        case 'text-field':
          return componentFactoryResolver.resolveComponentFactory(TextFieldComponent);
        case 'text-area':
          return componentFactoryResolver.resolveComponentFactory(TextAreaComponent);
        case 'checkbox':
          return componentFactoryResolver.resolveComponentFactory(CheckboxComponent);
        case 'dropdown':
          return componentFactoryResolver.resolveComponentFactory(DropdownComponent);
        case 'radio':
          return componentFactoryResolver.resolveComponentFactory(RadioButtonGroupComponent);
        case 'image':
          return componentFactoryResolver.resolveComponentFactory(ImageComponent);
        case 'audio':
          return componentFactoryResolver.resolveComponentFactory(AudioComponent);
        case 'video':
          return componentFactoryResolver.resolveComponentFactory(VideoComponent);
    
    rhenck's avatar
    rhenck committed
        case 'likert':
          return componentFactoryResolver.resolveComponentFactory(LikertComponent);
    
        case 'radio-group-images':
          return componentFactoryResolver.resolveComponentFactory(RadioGroupImagesComponent);
    
    rhenck's avatar
    rhenck committed
        case 'drop-list':
          return componentFactoryResolver.resolveComponentFactory(DropListComponent);
    
        default:
          throw new Error('unknown element');
      }
    }