import {Component, ElementRef, OnDestroy, OnInit, ViewChild} from '@angular/core'; import {AgGridComponent} from '../../components/ag-grid-component'; import {AppService} from '../../services/app.service'; import {MeetingService} from '../../services/meeting.service'; import {TabsComponent} from '../../components/tabs/tabs.component'; import {ModalComponent} from '../../components/modal/modal.component'; import {Subscription} from 'rxjs'; import {OperatorViewComponent} from './operator-view/operator-view.component'; import {OperatorsListComponent} from './operators-list/operators-list.component'; import {OperatorsContactListComponent} from './operators-contact-list/operators-contact-list.component'; import {IOperator} from '../../model/entities/operator'; import {IOperatorContact} from '../../model/entities/operator-contact'; import {Factory} from '../../factory/factory'; import {OperatorDataEditComponent} from './operator-view/operator-data-edit/operator-data-edit.component'; import {OperatorService} from '../../services/operator.service'; import {IOperatorNote} from '../../model/entities/operator-note'; import {IOperatorMeeting} from '../../model/entities/operator-meeting'; import {isNull} from 'util'; @Component({ selector: 'app-operators', templateUrl: './operators.component.html', styleUrls: ['./operators.component.scss'] }) export class OperatorsComponent extends AgGridComponent implements OnInit, OnDestroy { @ViewChild('tabsCM', { static: true }) tabsCM: TabsComponent; @ViewChild('modalOperator', { static: true }) modalOperator: ModalComponent; @ViewChild('operatorView', { static: true }) operatorView: OperatorViewComponent; @ViewChild('operatorsList', { static: true }) operatorsList: OperatorsListComponent; @ViewChild('operatorsContactList', { static: true }) operatorsContactList: OperatorsContactListComponent; @ViewChild('modalOperatorDataEdit', { static: true }) modalOperatorDataEdit: ModalComponent; @ViewChild('operatorDataEdit', { static: true }) operatorDataEdit: OperatorDataEditComponent; @ViewChild('headline', { static: true }) headline: ElementRef; @ViewChild('content', { static: true }) content: ElementRef; private operators: IOperator[]; private operatorsSub: Subscription; private operatorsContactsSub: Subscription; public operatorContacts: IOperatorContact[]; constructor(private appService: AppService, private operatorService: OperatorService, private meetingService: MeetingService) { super(); this.operatorService.apiGetOperatorData(); } ngOnInit() { this.operatorContacts = []; this.operatorsSub = this.operatorService.getOperators$().subscribe( data => { this.operators = data; this.setComponentData(); } ); this.operatorsContactsSub = this.operatorService.getOperatorContacts$().subscribe( data => { this.operatorContacts = data; this.setComponentData(); } ); } /** * Set component data after all data has been received */ private setComponentData() { if (!isNull(this.operators) && !isNull(this.operatorContacts)) { this.operatorsList.setData(this.operators); this.operatorsContactList.setData(this.operators, this.operatorContacts); } } /** * Operator row is clicked * @param e */ public rowClickedOperator(e: any) { this.operatorService.apiGetOperatorFull(e.data.operator_id).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); this.modalOperator.openModal(); }, error => {} ); } /** * OnClick Create operator */ public createOperator(): void { this.modalOperatorDataEdit.openModal(); this.operatorDataEdit.setData(Factory.getEmptyOperator()); } /** * Creates operator * @param operator */ public createOperatorFunction(operator: IOperator): void { this.operatorService.apiCreateOperator(operator).subscribe( data => { this.modalOperatorDataEdit.closeModal(); }, error => {} ); } /** * Saves operator * @param operator */ public editOperatorFunction(operator: IOperator): void { this.operatorService.apiEditOperator(operator).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Creates operator contact * @param operatorContact */ public createOperatorContactFunction(operatorContact: IOperatorContact): void { this.operatorService.apiCreateOperatorContact(operatorContact).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Edit operator contact * @param operatorContact */ public editOperatorContactFunction(operatorContact: IOperatorContact): void { this.operatorService.apiEditOperatorContact(operatorContact).subscribe( data => { this.operatorView.setData(data.result_data as IOperator, true); }, error => {} ); } /** * Deletes operator contact * @param operatorId */ public deleteOperatorContactFunction(operatorId: number): void { this.operatorService.apiDeleteOperatorContact(operatorId).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Creates operator note entry * @param operatorNote */ public createOperatorNoteFunction(operatorNote: IOperatorNote): void { this.operatorService.apiCreateOperatorNote(operatorNote).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Edits operator note entry * @param operatorNote */ public editOperatorNoteFunction(operatorNote: IOperatorNote): void { this.operatorService.apiEditOperatorNote(operatorNote).subscribe( data => { this.operatorView.setData(data.result_data as IOperator, true); }, error => {} ); } /** * Deletes operator note entry * @param operatorNoteId */ public deleteOperatorNoteFunction(operatorNoteId: number): void { this.operatorService.apiDeleteOperatorNote(operatorNoteId).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Creates operator meeting entry * @param operatorMeeting */ public createOperatorMeetingFunction(operatorMeeting: IOperatorMeeting): void { this.meetingService.apiCreateOperatorMeeting(operatorMeeting).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Edits operator meeting entry * @param operatorMeeting */ public editOperatorMeetingFunction(operatorMeeting: IOperatorMeeting): void { this.meetingService.apiEditOperatorMeeting(operatorMeeting).subscribe( data => { this.operatorView.setData(data.result_data as IOperator, true); }, error => {} ); } /** * Deletes operator meeting entry * @param operatorMeetingId */ public deleteOperatorMeetingFunction(operatorMeetingId: number): void { this.meetingService.apiDeleteOperatorMeeting(operatorMeetingId).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); }, error => {} ); } /** * Edit report after meeting has started * @param reportValues */ public editOperatorMeetingReportFunction(reportValues: any): void { const meetingId: number = reportValues.id; const report: string = reportValues.report; this.meetingService.apiEditOperatorMeetingReport(meetingId, report).subscribe( data => { this.operatorView.setData(data.result_data as IOperator, true); }, error => {} ); } /** * Shortcut to operator detail * @param operator */ public shortcutFunction(operator: IOperator): void { this.operatorService.apiGetOperatorFull(operator.id).subscribe( data => { this.operatorView.setData(data.result_data as IOperator); this.modalOperator.openModal(); }, error => {} ); } /** * Destroy */ ngOnDestroy(): void { if (this.operatorsSub !== null && this.operatorsSub !== undefined) { this.operatorsSub.unsubscribe(); } } }