From 1aad0d7219593ac6f1ae17ca3a6f9164288018ce Mon Sep 17 00:00:00 2001 From: Lukas Metzger Date: Fri, 9 Feb 2018 16:58:04 +0100 Subject: [PATCH] Save some unknown progress --- TODO.txt | 1 + frontend/src/app/app-routing.module.ts | 5 ++ frontend/src/app/app.module.ts | 53 +++++++++------- .../src/app/interfaces/domain-name-answer.ts | 3 + .../app/pages/domains/domains.component.html | 2 +- .../app/pages/domains/domains.component.ts | 30 ++++++--- .../record-edit/record-edit.component.html | 61 +++++++++++++++++++ .../record-edit/record-edit.component.scss | 0 .../record-edit/record-edit.component.spec.ts | 25 ++++++++ .../record-edit/record-edit.component.ts | 29 +++++++++ .../record-edit/record-edit.service.spec.ts | 15 +++++ .../record-edit/record-edit.service.ts | 34 +++++++++++ 12 files changed, 225 insertions(+), 33 deletions(-) create mode 100644 TODO.txt create mode 100644 frontend/src/app/interfaces/domain-name-answer.ts create mode 100644 frontend/src/app/pages/record-edit/record-edit.component.html create mode 100644 frontend/src/app/pages/record-edit/record-edit.component.scss create mode 100644 frontend/src/app/pages/record-edit/record-edit.component.spec.ts create mode 100644 frontend/src/app/pages/record-edit/record-edit.component.ts create mode 100644 frontend/src/app/services/record-edit/record-edit.service.spec.ts create mode 100644 frontend/src/app/services/record-edit/record-edit.service.ts 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 @@ +
+
+

{{domainName}}

+
+
+ +
+
+

SOA

+
+
+ +
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
\ 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); + }); + }); + } + +}