<!DOCTYPE html>
<html>

  <head>
    <title>angular playground</title>
    <link rel="stylesheet" href="style.css" />
    <script src="src/main.js"></script>
  </head>

  <body>
    <my-app>
      loading...
    </my-app>
  </body>

</html>
/* Styles go here */

### Angular Starter Plunker - Typescript
// Shim the environment
import 'core-js/client/shim';

// Angular requires Zones to be pre-configured in the environment
import 'zone.js';
import 'zone.js/dist/long-stack-trace-zone';

//main entry point
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.js';

platformBrowserDynamic().bootstrapModule(AppModule);
{
  "name": "server-list",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^6.0.3",
    "@angular/common": "^6.0.3",
    "@angular/compiler": "^6.0.3",
    "@angular/core": "^6.0.3",
    "@angular/forms": "^6.0.3",
    "@angular/http": "^6.0.3",
    "@angular/platform-browser": "^6.0.3",
    "@angular/platform-browser-dynamic": "^6.0.3",
    "@angular/router": "^6.0.3",
    "angular-font-awesome": "^3.1.2",
    "angularfire2": "^5.0.1",
    "bootstrap": "^4.1.3",
    "core-js": "^2.5.4",
    "firebase": "^5.4.2",
    "font-awesome": "^4.7.0",
    "jquery": "^3.3.1",
    "rxjs": "^6.3.2",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular/compiler-cli": "^6.0.3",
    "@angular-devkit/build-angular": "~0.6.8",
    "typescript": "~2.7.2",
    "@angular/cli": "~6.0.8",
    "@angular/language-service": "^6.0.3",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.3.0",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1"
  }
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import { AngularFontAwesomeModule } from 'angular-font-awesome';
import { HttpModule } from '@angular/http';
import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { environment } from './../environments/environment';
import { ServerInfoComponent } from './server-info/server-info.component';
import { AppRoutingModule } from './app-routing.module';
import { AllServersComponent } from './all-servers/all-servers.component';
import { DataService } from './shared/db.service';

@NgModule({
  declarations: [
    AppComponent,
    ServerInfoComponent,
    AllServersComponent
  ],
  imports: [
    BrowserModule,
    HttpModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFireDatabaseModule,
    AngularFontAwesomeModule,
    AppRoutingModule,
    FormsModule
  ],
  providers: [DataService],
  bootstrap: [AppComponent]
})
export class AppModule { }
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

import { ServerInfoComponent } from './server-info/server-info.component';
import { AllServersComponent } from './all-servers/all-servers.component';


const routes: Routes = [
	{path: '', component: AllServersComponent},
	{path: 'server-info/:id', component: ServerInfoComponent}
	//{path: 'server-info', component: ServerInfoComponent}
];

@NgModule({
	imports: [RouterModule.forRoot(routes)],
	exports: [RouterModule]
})
export class AppRoutingModule {}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
	constructor() {}
}
<div>
	<h1 class="text-center title-app">Test App</h1>
</div>

<router-outlet></router-outlet>
<div class="container-fluid">
  <table class="table table-striped">
    <thead class="thead-dark">
      <tr class="text-center">
        <th>ID</th>
        <th>Main IP</th>
        <th>Provider</th>
        <th>Company</th>
        <th>Options</th>
      </tr>
    </thead>
    <tr *ngFor="let server of servers | async; let i = index">
      <td class="text-center">{{ i + 1 }}</td>
      <td>{{ server.mainip }}</td>
      <td class="text-center">{{ server.provider }}</td>
      <td class="text-center">{{ server.company }}</td>
      <td class="options-icons text-center">
        <a class="delete" (click)="editServer()"><fa name="trash"></fa></a>
        <a class="edit" [routerLink]="['/server-info', i + 1]"><fa name="edit"></fa></a>
      </td>
    </tr>
  </table>
</div>
import { Component, OnInit } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from '@angular/fire/database';
import { Observable } from 'rxjs';

import { DataService } from '../shared/db.service';

@Component({
  selector: 'app-all-servers',
  templateUrl: './all-servers.component.html',
  styleUrls: ['./all-servers.component.css'],
  providers: [DataService]
})
export class AllServersComponent implements OnInit {

  servers: Observable<any[]>;

  constructor(private dataService: DataService) {}

  ngOnInit() {
    this.servers = this.getAllServers('/Servers');
  }

  getAllServers(path) {
    return this.dataService.getAllServers(path);
  }
}
<div class="container">
	<p>
	  	Server IP - {{ currentServer.mainip }}
	</p>
</div>
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import * as firebase from "firebase";

@Component({
  selector: 'app-server-info',
  templateUrl: './server-info.component.html',
  styleUrls: ['./server-info.component.css']
})
export class ServerInfoComponent implements OnInit {

  id: string;
  currentServer: any;

  constructor(private route: ActivatedRoute) {}

  getServerInfo() {
    firebase.database().ref('Servers/' + this.id).on('value', snap => {
      this.currentServer = snap.val();
    });
  }

  ngOnInit() {
    this.id = this.route.snapshot.params['id'];
    this.getServerInfo();
  }

}
export class Provider {
	constructor(
		public name: string,
		public site: string,
		public email: string[]
	) {}
}
export class Server {
	constructor(
		public mainip: string,
		public provider: string,
		public company: string
	) {}
}
import { AngularFireDatabase, AngularFireList } from '@angular/fire/database';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

import { Server } from './models/server.model';
import { Provider } from './models/provider.model';

@Injectable()
export class DataService {
	
	public servers: Observable<any[]>;
	public provider: Provider[];

	constructor(private db: AngularFireDatabase) {}

	getAllServers(path): Observable<any[]> {
		this.servers = this.db.list(path).valueChanges();
		return this.servers;
	}
}
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.

export const environment = {
  production: false,
  firebase: {
  	apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
  }
};

/*
 * In development mode, to ignore zone related error stack frames such as
 * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can
 * import the following file, but please comment it out in production mode
 * because it will have performance impact when throw error
 */
// import 'zone.js/dist/zone-error';  // Included with Angular CLI.