Skip to content
Snippets Groups Projects
slider.component.ts 2.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Component, OnInit, ViewChild } from '@angular/core';
    
    import { ValidatorFn, Validators } from '@angular/forms';
    
    import { MatSlider } from '@angular/material/slider';
    
    mechtelm's avatar
    mechtelm committed
    import { SliderElement } from '../models/slider-element';
    
    mechtelm's avatar
    mechtelm committed
    import { FormElementComponent } from '../form-element-component.directive';
    
    mechtelm's avatar
    mechtelm committed
    
    @Component({
      selector: 'app-slider',
      template: `
        <div [style.display]="'flex'"
    
             [style.flex-direction]="'row'"
    
    mechtelm's avatar
    mechtelm committed
             [style.background-color]="elementModel.backgroundColor"
             [style.width.%]="100"
             [style.height.%]="100">
    
          <div *ngIf="elementModel.showValues"
               [style.color]="elementModel.fontColor"
               [style.font-family]="elementModel.font"
               [style.font-size.px]="elementModel.fontSize"
               [style.line-height.%]="elementModel.lineHeight"
               [style.font-weight]="elementModel.bold ? 'bold' : ''"
               [style.font-style]="elementModel.italic ? 'italic' : ''"
    
               [style.text-decoration]="elementModel.underline ? 'underline' : ''">
            {{elementModel.minValue | number:'.0'}}
          </div>
    
          <div [style.display]="'flex'"
               [style.flex-direction]="'column'"
               [style.width.%]="100"
               [style.height.%]="100">
            <mat-slider
              [formControl]="elementFormControl"
              [style.width.%]="100"
              [max]="elementModel.maxValue"
              [min]="elementModel.minValue">
            </mat-slider>
            <mat-error *ngIf="elementFormControl.touched && elementFormControl.errors">
              {{elementFormControl.errors | errorTransform: elementModel}}
            </mat-error>
          </div>
          <div *ngIf="elementModel.showValues"
               [style.color]="elementModel.fontColor"
               [style.font-family]="elementModel.font"
               [style.font-size.px]="elementModel.fontSize"
               [style.line-height.%]="elementModel.lineHeight"
               [style.font-weight]="elementModel.bold ? 'bold' : ''"
               [style.font-style]="elementModel.italic ? 'italic' : ''"
               [style.text-decoration]="elementModel.underline ? 'underline' : ''"
          >{{elementModel.maxValue | number:'.0'}}</div>
    
    mechtelm's avatar
    mechtelm committed
        </div>
      `,
      styles: [
    
    mechtelm's avatar
    mechtelm committed
        ':host ::ng-deep .mat-slider-thumb {border-radius: 0; width: 10px; height: 40px; bottom: -15px}'
    
    mechtelm's avatar
    mechtelm committed
      ]
    })
    
    export class SliderComponent extends FormElementComponent implements OnInit {
      @ViewChild(MatSlider) inputElement!: MatSlider;
    
    mechtelm's avatar
    mechtelm committed
      elementModel!: SliderElement;
    
    
      get validators(): ValidatorFn[] {
        const validators: ValidatorFn[] = [];
        if (this.elementModel.required) {
          validators.push(Validators.min(this.elementModel.minValue + 1));
        }
        return validators;
      }
    
    
      ngOnInit(): void {
        super.ngOnInit();
        this.inputElement.disabled = this.elementModel.readOnly;
      }
    
    mechtelm's avatar
    mechtelm committed
    }