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