import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core'; import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; import { TournamentCompetitionFormComponent } from '../../forms/tournament-competition-form/tournament-competition-form.component'; import { TournamentCompetition, Tournament } from 'tournee.businesslogic'; import { UtilityService } from 'src/app/shared/services/utility.service'; @Component({ selector: 'app-selectable-listing-competitions', templateUrl: './selectable-listing-competitions.component.html', styleUrls: ['./selectable-listing-competitions.component.css'] }) export class SelectableListingCompetitionsComponent implements OnInit { @ViewChild('Form') Form:TournamentCompetitionFormComponent; @Input() EditModel: Tournament; @Output() OnShown = new EventEmitter(); @Output() OnHidden = new EventEmitter(); Selected: TournamentCompetition; constructor(private _scrollToService: ScrollToService) { } ngOnInit() { } add() { this.edit(TournamentCompetition.create(this.EditModel), true); } store(competition: TournamentCompetition) { this.EditModel.storeCompetition(competition); this.hide(); } hide() { this.Selected = null; this.Form.reset(); this.OnHidden.emit(); } edit(competition: TournamentCompetition, isNew = false) { this.Selected = competition; this.Form.initiate(this.EditModel, competition, isNew); this.OnShown.emit(); this._scrollToService.scrollTo(UtilityService.scroll_to_head); } delete(competition: TournamentCompetition) { this.EditModel.removeCompetition(competition); } shift_left(competition: TournamentCompetition) { const current_index = competition.display_order; let to_swap = this.EditModel.competitions.find((t) => { return t.display_order == current_index - 1; }); competition.display_order = current_index -1; to_swap.display_order = current_index; this.EditModel.competitions.sort((t1, t2) => { return t1.display_order - t2.display_order; }); } shift_right(competition: TournamentCompetition) { const current_index = competition.display_order; let to_swap = this.EditModel.competitions.find((t) => { return t.display_order == current_index + 1; }); competition.display_order = current_index + 1; to_swap.display_order = current_index; this.EditModel.competitions.sort((t1, t2) => { return t1.display_order - t2.display_order; }); } }