pdnsmanager/frontend/src/app/pages/domains/domains.component.ts
2018-02-09 16:58:04 +01:00

107 lines
3.1 KiB
TypeScript

import {Component, OnInit, ViewChild} from '@angular/core';
import {Router, ActivatedRoute} from '@angular/router';
import {DomainsService} from 'app/services/domains/domains.service';
import {DomainsAnswer} from 'app/interfaces/domains-answer';
import {ModalService} from 'app/services/modal/modal.service';
import {SortComponent} from 'app/partials/sort/sort.component';
import {SortEvent} from 'app/interfaces/sort-event';
@Component({
selector: 'app-domains',
templateUrl: './domains.component.html',
styleUrls: ['./domains.component.scss']
})
export class DomainsComponent implements OnInit {
data: DomainsAnswer = {pages: {current: 1, total: 1}, data: []};
@ViewChild('sortId') sortId: SortComponent;
@ViewChild('sortName') sortName: SortComponent;
@ViewChild('sortType') sortType: SortComponent;
@ViewChild('sortRecords') sortRecords: SortComponent;
private sortField: string = null;
private sortOrder = 0;
private searchName: string;
private searchType = 'none';
constructor(private domainsService: DomainsService,
private modalService: ModalService,
private router: Router,
private route: ActivatedRoute) {}
ngOnInit() {
this.loadDomains();
}
/**
* Loads the domains from the server using the parameters specified in
* the properties of the components.
*/
loadDomains() {
const field = this.sortField ? this.sortField : '';
const searchType = this.searchType === 'none' ? '' : this.searchType;
this.domainsService.getDomains(1, field, this.sortOrder, this.searchName, searchType)
.then((data: DomainsAnswer) => {
this.data = data;
});
}
/**
* Delete a domain.
*
* @param id Id of domain to delete
* @param name Name of domain to delete (only used for modal dialog)
*/
deleteDomain(id: number, name: string) {
this.modalService.showMessage({
heading: 'Delete Domain?',
body: `Are you shure you want to delete the zone ${name}?`,
acceptText: 'Delete',
dismisText: 'Cancel',
acceptClass: 'danger'
})
.then(() => {
this.domainsService.deleteDomain(id);
this.loadDomains();
}, () => {
});
}
/**
* Takes a sort event and applies the data to the current component state.
*
* @param event The SortEvent to process
*/
sort(event: SortEvent) {
this.sortId.resetIfNotField(event.field);
this.sortName.resetIfNotField(event.field);
this.sortType.resetIfNotField(event.field);
this.sortRecords.resetIfNotField(event.field);
if (event.order === 0) {
this.sortField = null;
} else {
this.sortField = event.field;
}
this.sortOrder = event.order;
this.loadDomains();
}
/**
* Navigates to the domain edit page
*
* @param id Id of the domain to edit
*/
onClickDomain(id: Number) {
this.router.navigate(['edit', id], {relativeTo: this.route});
}
}