Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
marking-bar.component.ts 2.03 KiB
import {
  Component, EventEmitter, Input, Output
} from '@angular/core';
import { TextElement } from '../../ui-elements/text/text-element';

@Component({
  selector: 'app-marking-bar',
  template: `
    <div class="marking-bar">
      <app-marking-button *ngIf="elementModel.highlightableYellow"
                          [color]="'#f9f871'"
                          [selected]="selectedColor === '#f9f871'"
                          mode="mark"
                          (selectedChange)="onSelectionChange($event)">
      </app-marking-button>
      <app-marking-button *ngIf="elementModel.highlightableTurquoise"
                          [color]="'#9de8eb'"
                          [selected]="selectedColor === '#9de8eb'"
                          mode="mark"
                          (selectedChange)="onSelectionChange($event)">
      </app-marking-button>
      <app-marking-button *ngIf="elementModel.highlightableOrange"
                          [color]="'#ffa06a'"
                          [selected]="selectedColor === '#ffa06a'"
                          mode="mark"
                          (selectedChange)="onSelectionChange($event)">
      </app-marking-button>
      <app-marking-button [color]="'lightgrey'"
                          [selected]="selectedColor === 'lightgrey'"
                          mode="delete"
                          (selectedChange)="onSelectionChange($event)">
      </app-marking-button>
    </div>`,
  styles: [
    '.marking-bar {position: sticky; top: 0; margin-bottom: 13px;}'
  ]
})
export class MarkingBarComponent {
  @Input() elementModel!: TextElement;
  @Output() applySelection = new EventEmitter<{
    active: boolean,
    mode: 'mark' | 'delete',
    color: string
  }>();

  selectedColor!: string;

  onSelectionChange(selection: { selected: boolean, color: string, mode: 'mark' | 'delete' }): void {
    this.selectedColor = selection.selected ? selection.color : 'none';
    this.applySelection
      .emit({
        active: selection.selected, mode: selection.mode, color: selection.color
      });
  }
}