Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
likert-row-edit-dialog.component.ts 3.77 KiB
import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { FileService } from 'common/services/file.service';
import { LikertRowElement } from 'common/models/elements/compound-elements/likert/likert-row';
import { TextLabel } from 'common/models/elements/element';

@Component({
  selector: 'aspect-likert-row-edit-dialog',
  template: `
    <mat-dialog-content class="fx-column-start-stretch">
      <aspect-rich-text-editor-simple [(content)]="newLikertRow.rowLabel.text">
      </aspect-rich-text-editor-simple>

      <mat-form-field [style.margin-top.px]="15">
        <mat-label>{{'id' | translate }}</mat-label>
        <input matInput type="text" [(ngModel)]="newLikertRow.id">
      </mat-form-field>

      <mat-checkbox [(ngModel)]="newLikertRow.readOnly">
        {{'propertiesPanel.readOnly' | translate }}
      </mat-checkbox>

      <mat-form-field appearance="fill">
        <mat-label>{{'preset' | translate }}</mat-label>
        <mat-select [(ngModel)]="newLikertRow.value">
          <mat-option [value]="null">{{'propertiesPanel.undefined' | translate }}</mat-option>
          <mat-option *ngFor="let column of data.options; let i = index" [value]="i"
                      [innerHTML]="'<span>' + column.text + ' (Index: ' + i + ')</span>' | safeResourceHTML">
          </mat-option>
        </mat-select>
      </mat-form-field>

      <mat-form-field appearance="fill">
        <mat-label>{{'verticalButtonAlignment' | translate }}</mat-label>
        <mat-select [(ngModel)]="newLikertRow.verticalButtonAlignment">
          <mat-option *ngFor="let option of ['auto', 'center']"
                      [value]="option">
            {{ option | translate }}
          </mat-option>
        </mat-select>
      </mat-form-field>

      <div class="fx-row-space-between-center">
        <div class="fx-column-start-stretch fx-fix-gap-10">
          <button mat-raised-button (click)="loadImage()">
            {{ 'loadImage' | translate }}</button>
          <button mat-raised-button (click)="newLikertRow.rowLabel.imgSrc = null">
            {{ 'removeImage' | translate }}</button>
          <mat-form-field>
            <mat-label>{{'imagePosition' | translate }}</mat-label>
            <mat-select [(ngModel)]="newLikertRow.rowLabel.imgPosition">
              <mat-option *ngFor="let option of ['above', 'below', 'left', 'right']"
                          [value]="option">
                {{ option | translate }}
              </mat-option>
            </mat-select>
          </mat-form-field>
        </div>

        <img [src]="newLikertRow.rowLabel.imgSrc"
             [style.object-fit]="'scale-down'" [width]="200">
      </div>

    </mat-dialog-content>

    <mat-dialog-actions>
      <button mat-button [mat-dialog-close]="newLikertRow">
        {{'save' | translate }}
      </button>
      <button mat-button mat-dialog-close>{{'cancel' | translate }}</button>
    </mat-dialog-actions>
  `,
  styles: [`
     mat-checkbox {
       margin-bottom: 15px;
     }

     .fx-column-start-stretch {
       box-sizing: border-box;
       display: flex;
       flex-direction: column;
       justify-content: flex-start;
       align-items: stretch;
     }

     .fx-row-space-between-center {
       box-sizing: border-box;
       display: flex;
       flex-direction: row;
       justify-content: space-between;
       align-items: center;
     }

     .fx-fix-gap-10 {
       gap: 10px;
     }
  `]
})
export class LikertRowEditDialogComponent {
  constructor(@Inject(MAT_DIALOG_DATA) public data: { row: LikertRowElement, options: TextLabel[] }) { }

  newLikertRow = {
    ...this.data.row,
    rowLabel: { ...this.data.row.rowLabel }
  };

  async loadImage(): Promise<void> {
    this.newLikertRow.rowLabel.imgSrc = await FileService.loadImage();
  }
}