diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 0000000..e6af197
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1 @@
+- Add route guards to make it nicer for the user if he is not logged in
diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts
index 79193a9..866ccc6 100644
--- a/frontend/src/app/app-routing.module.ts
+++ b/frontend/src/app/app-routing.module.ts
@@ -4,8 +4,13 @@ import {Routes, RouterModule} from '@angular/router';
import {DomainsComponent} from './pages/domains/domains.component';
import {UsersComponent} from './pages/users/users.component';
import {LoginComponent} from './pages/login/login.component';
+import {RecordEditComponent} from './pages/record-edit/record-edit.component';
const routes: Routes = [
+ {
+ path: 'domains/edit/:id',
+ component: RecordEditComponent
+ },
{
path: 'domains',
component: DomainsComponent
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index 2f42627..b6ad491 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -1,27 +1,29 @@
-import { BrowserModule } from '@angular/platform-browser';
-import { FormsModule } from '@angular/forms';
-import { NgModule } from '@angular/core';
-import { HttpModule } from '@angular/http';
+import {BrowserModule} from '@angular/platform-browser';
+import {FormsModule} from '@angular/forms';
+import {NgModule} from '@angular/core';
+import {HttpModule} from '@angular/http';
-import { AppRoutingModule } from './app-routing.module';
-import { AppComponent } from './app.component';
+import {AppRoutingModule} from './app-routing.module';
+import {AppComponent} from './app.component';
-import { NavbarComponent } from './partials/navbar/navbar.component';
-import { NavbarEntryComponent } from './partials/navbar-entry/navbar-entry.component';
-import { FaIconComponent } from './partials/fa-icon/fa-icon.component';
-import { AlertComponent } from './partials/alert/alert.component';
-import { AlertMessageComponent } from './partials/alert-message/alert-message.component';
-import { ModalContainerComponent } from './partials/modal-container/modal-container.component';
-import { SortComponent } from './partials/sort/sort.component';
+import {NavbarComponent} from './partials/navbar/navbar.component';
+import {NavbarEntryComponent} from './partials/navbar-entry/navbar-entry.component';
+import {FaIconComponent} from './partials/fa-icon/fa-icon.component';
+import {AlertComponent} from './partials/alert/alert.component';
+import {AlertMessageComponent} from './partials/alert-message/alert-message.component';
+import {ModalContainerComponent} from './partials/modal-container/modal-container.component';
+import {SortComponent} from './partials/sort/sort.component';
-import { DomainsComponent } from './pages/domains/domains.component';
-import { UsersComponent } from './pages/users/users.component';
-import { LoginComponent } from './pages/login/login.component';
+import {DomainsComponent} from './pages/domains/domains.component';
+import {UsersComponent} from './pages/users/users.component';
+import {LoginComponent} from './pages/login/login.component';
+import {RecordEditComponent} from './pages/record-edit/record-edit.component';
-import { HttpService } from './services/http/http.service';
-import { ModalService } from './services/modal/modal.service';
-import { SessionService } from './services/session/session.service';
-import { DomainsService } from './services/domains/domains.service';
+import {HttpService} from './services/http/http.service';
+import {ModalService} from './services/modal/modal.service';
+import {SessionService} from './services/session/session.service';
+import {DomainsService} from './services/domains/domains.service';
+import {RecordEditService} from './services/record-edit/record-edit.service';
@NgModule({
declarations: [
@@ -35,7 +37,8 @@ import { DomainsService } from './services/domains/domains.service';
AlertComponent,
AlertMessageComponent,
ModalContainerComponent,
- SortComponent
+ SortComponent,
+ RecordEditComponent
],
imports: [
BrowserModule,
@@ -43,7 +46,11 @@ import { DomainsService } from './services/domains/domains.service';
FormsModule,
HttpModule
],
- providers: [SessionService, HttpService, DomainsService, ModalService],
+ providers: [SessionService,
+ HttpService,
+ DomainsService,
+ ModalService,
+ RecordEditService],
bootstrap: [AppComponent]
})
-export class AppModule { }
+export class AppModule {}
diff --git a/frontend/src/app/interfaces/domain-name-answer.ts b/frontend/src/app/interfaces/domain-name-answer.ts
new file mode 100644
index 0000000..e9b21ef
--- /dev/null
+++ b/frontend/src/app/interfaces/domain-name-answer.ts
@@ -0,0 +1,3 @@
+export interface DomainNameAnswer {
+ name: string
+}
diff --git a/frontend/src/app/pages/domains/domains.component.html b/frontend/src/app/pages/domains/domains.component.html
index 07d9e9a..92f0fd2 100644
--- a/frontend/src/app/pages/domains/domains.component.html
+++ b/frontend/src/app/pages/domains/domains.component.html
@@ -37,7 +37,7 @@
-
+
{{domain.id}} |
{{domain.name}} |
{{domain.type}} |
diff --git a/frontend/src/app/pages/domains/domains.component.ts b/frontend/src/app/pages/domains/domains.component.ts
index 692a34a..2915f40 100644
--- a/frontend/src/app/pages/domains/domains.component.ts
+++ b/frontend/src/app/pages/domains/domains.component.ts
@@ -1,10 +1,11 @@
-import { Component, OnInit, ViewChild } from '@angular/core';
+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';
+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',
@@ -13,7 +14,7 @@ import { SortEvent } from 'app/interfaces/sort-event';
})
export class DomainsComponent implements OnInit {
- data: DomainsAnswer = { pages: { current: 1, total: 1 }, data: [] };
+ data: DomainsAnswer = {pages: {current: 1, total: 1}, data: []};
@ViewChild('sortId') sortId: SortComponent;
@ViewChild('sortName') sortName: SortComponent;
@@ -27,7 +28,9 @@ export class DomainsComponent implements OnInit {
private searchType = 'none';
constructor(private domainsService: DomainsService,
- private modalService: ModalService) { }
+ private modalService: ModalService,
+ private router: Router,
+ private route: ActivatedRoute) {}
ngOnInit() {
this.loadDomains();
@@ -56,7 +59,7 @@ export class DomainsComponent implements OnInit {
deleteDomain(id: number, name: string) {
this.modalService.showMessage({
heading: 'Delete Domain?',
- body: `Are you shure you want to delete the zone ${ name }?`,
+ body: `Are you shure you want to delete the zone ${name}?`,
acceptText: 'Delete',
dismisText: 'Cancel',
acceptClass: 'danger'
@@ -91,4 +94,13 @@ export class DomainsComponent implements OnInit {
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});
+ }
+
}
diff --git a/frontend/src/app/pages/record-edit/record-edit.component.html b/frontend/src/app/pages/record-edit/record-edit.component.html
new file mode 100644
index 0000000..8c7cf68
--- /dev/null
+++ b/frontend/src/app/pages/record-edit/record-edit.component.html
@@ -0,0 +1,61 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/app/pages/record-edit/record-edit.component.scss b/frontend/src/app/pages/record-edit/record-edit.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/src/app/pages/record-edit/record-edit.component.spec.ts b/frontend/src/app/pages/record-edit/record-edit.component.spec.ts
new file mode 100644
index 0000000..f557322
--- /dev/null
+++ b/frontend/src/app/pages/record-edit/record-edit.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RecordEditComponent } from './record-edit.component';
+
+describe('RecordEditComponent', () => {
+ let component: RecordEditComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ RecordEditComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(RecordEditComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should be created', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/pages/record-edit/record-edit.component.ts b/frontend/src/app/pages/record-edit/record-edit.component.ts
new file mode 100644
index 0000000..d24c49e
--- /dev/null
+++ b/frontend/src/app/pages/record-edit/record-edit.component.ts
@@ -0,0 +1,29 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, ParamMap} from '@angular/router';
+
+import {RecordEditService} from 'app/services/record-edit/record-edit.service';
+import {DomainNameAnswer} from 'app/interfaces/domain-name-answer';
+
+@Component({
+ selector: 'app-record-edit',
+ templateUrl: './record-edit.component.html',
+ styleUrls: ['./record-edit.component.scss']
+})
+export class RecordEditComponent implements OnInit {
+
+ private domainName = '';
+
+ constructor(private route: ActivatedRoute,
+ private recordEditService: RecordEditService) {}
+
+ ngOnInit() {
+ this.route.paramMap.subscribe((params: ParamMap) => {
+ this.initDomain(parseInt(params.get('id'), 10));
+ });
+ }
+
+ async initDomain(id: number) {
+ this.domainName = (await this.recordEditService.getDomainName(id)).name;
+ }
+
+}
diff --git a/frontend/src/app/services/record-edit/record-edit.service.spec.ts b/frontend/src/app/services/record-edit/record-edit.service.spec.ts
new file mode 100644
index 0000000..5eabc03
--- /dev/null
+++ b/frontend/src/app/services/record-edit/record-edit.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { RecordEditService } from './record-edit.service';
+
+describe('RecordEditService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [RecordEditService]
+ });
+ });
+
+ it('should be created', inject([RecordEditService], (service: RecordEditService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/frontend/src/app/services/record-edit/record-edit.service.ts b/frontend/src/app/services/record-edit/record-edit.service.ts
new file mode 100644
index 0000000..8146fd5
--- /dev/null
+++ b/frontend/src/app/services/record-edit/record-edit.service.ts
@@ -0,0 +1,34 @@
+import {Injectable} from '@angular/core';
+
+import {HttpService} from 'app/services/http/http.service';
+import {DomainNameAnswer} from 'app/interfaces/domain-name-answer';
+
+@Injectable()
+export class RecordEditService {
+
+ constructor(private httpService: HttpService) {}
+
+ /**
+ * Gets the name of the domain
+ *
+ * @param id Id of the domain for which the name should be retrieved
+ *
+ * @returns A Promise for a DomainNameAnswer
+ */
+ getDomainName(id: number): Promise {
+ return new Promise((resolve, reject) => {
+ const body = {
+ action: 'getDomainName',
+ domain: id
+ };
+
+ this.httpService.post('api/edit-master.php', body)
+ .then((answer: DomainNameAnswer) => {
+ resolve(answer);
+ }, (err) => {
+ reject(err);
+ });
+ });
+ }
+
+}