From ae3b11c8d5a7d09dfc648c0ef821ce2a7db054fe Mon Sep 17 00:00:00 2001
From: Tomas Madeja <t.mm.madeja@gmail.com>
Date: Thu, 27 May 2021 23:34:39 +0200
Subject: [PATCH] feat: change players table to material table

---
 web/angular.json                              |  2 ++
 web/package-lock.json                         | 25 +++++++++++++++++++
 web/package.json                              |  2 ++
 web/src/app/app.module.ts                     |  6 ++++-
 .../components/players/players.component.css  |  3 +++
 .../components/players/players.component.html | 14 +++++++----
 .../components/players/players.component.ts   | 18 ++++++++++++-
 web/src/app/services/player.service.ts        |  4 +++
 web/src/index.html                            |  5 +++-
 web/src/styles.css                            |  3 +++
 10 files changed, 74 insertions(+), 8 deletions(-)

diff --git a/web/angular.json b/web/angular.json
index 6efbadb..bc0e6e3 100644
--- a/web/angular.json
+++ b/web/angular.json
@@ -27,6 +27,7 @@
               "src/assets"
             ],
             "styles": [
+              "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
               "src/styles.css"
             ],
             "scripts": []
@@ -94,6 +95,7 @@
               "src/assets"
             ],
             "styles": [
+              "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
               "src/styles.css"
             ],
             "scripts": []
diff --git a/web/package-lock.json b/web/package-lock.json
index 0ad6c65..3060609 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -143,6 +143,23 @@
         "tslib": "^2.1.0"
       }
     },
+    "@angular/cdk": {
+      "version": "12.0.2",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.0.2.tgz",
+      "integrity": "sha512-1JGayyUJmwaul5YSEgb780aWxk+MLVG5FakVaxz5NtbPZx19ZyOuZqytCh5js11LsBDipF5/kirYhJPBFlMbWQ==",
+      "requires": {
+        "parse5": "^5.0.0",
+        "tslib": "^2.1.0"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+          "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+          "optional": true
+        }
+      }
+    },
     "@angular/cli": {
       "version": "12.0.0",
       "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.0.0.tgz",
@@ -314,6 +331,14 @@
         "tslib": "^2.1.0"
       }
     },
+    "@angular/material": {
+      "version": "12.0.2",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.0.2.tgz",
+      "integrity": "sha512-jTH53w4iVNk+3K5ciFyHeRhNNtV6TzeuNTSELeme4l3t5FP3VqFTdE56Q55MrV2RMIzDKLYEpiqSiQf+8ZuGSA==",
+      "requires": {
+        "tslib": "^2.1.0"
+      }
+    },
     "@angular/platform-browser": {
       "version": "12.0.0",
       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.0.0.tgz",
diff --git a/web/package.json b/web/package.json
index 8f93084..cb01b73 100644
--- a/web/package.json
+++ b/web/package.json
@@ -11,10 +11,12 @@
   "private": true,
   "dependencies": {
     "@angular/animations": "~12.0.0",
+    "@angular/cdk": "^12.0.2",
     "@angular/common": "~12.0.0",
     "@angular/compiler": "~12.0.0",
     "@angular/core": "~12.0.0",
     "@angular/forms": "~12.0.0",
+    "@angular/material": "^12.0.2",
     "@angular/platform-browser": "~12.0.0",
     "@angular/platform-browser-dynamic": "~12.0.0",
     "@angular/router": "~12.0.0",
diff --git a/web/src/app/app.module.ts b/web/src/app/app.module.ts
index d3fe87d..7a52b6b 100644
--- a/web/src/app/app.module.ts
+++ b/web/src/app/app.module.ts
@@ -1,6 +1,7 @@
 import { NgModule } from '@angular/core';
 import { BrowserModule } from '@angular/platform-browser';
 import { FormsModule } from '@angular/forms';
+import { MatTableModule } from '@angular/material/table';
 
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';
@@ -17,6 +18,7 @@ import { CreateTeamFormComponent } from './components/create-team-form/create-te
 import { RecruitNewPlayerFormComponent } from './components/recruit-new-player-form/recruit-new-player-form.component';
 import { RecruitVeteranPlayerFormComponent } from './components/recruit-veteran-player-form/recruit-veteran-player-form.component';
 import { UpdateGameWinnerFormComponent } from './components/update-game-winner-form/update-game-winner-form.component';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
 @NgModule({
   declarations: [
@@ -38,7 +40,9 @@ import { UpdateGameWinnerFormComponent } from './components/update-game-winner-f
   imports: [
     BrowserModule,
     AppRoutingModule,
-    FormsModule
+    FormsModule,
+    MatTableModule,
+    BrowserAnimationsModule 
   ],
   providers: [],
   bootstrap: [AppComponent]
diff --git a/web/src/app/components/players/players.component.css b/web/src/app/components/players/players.component.css
index e69de29..854f0db 100644
--- a/web/src/app/components/players/players.component.css
+++ b/web/src/app/components/players/players.component.css
@@ -0,0 +1,3 @@
+.highlight{
+  background: #679cec; /* green */
+}
diff --git a/web/src/app/components/players/players.component.html b/web/src/app/components/players/players.component.html
index 6ebce1a..8891193 100644
--- a/web/src/app/components/players/players.component.html
+++ b/web/src/app/components/players/players.component.html
@@ -1,8 +1,12 @@
 <h2>Players</h2>
-<table class="playerList">
-  <tr *ngFor="let player of players">
-    <span class="badge">{{player.id}}</span> 
-    <th>{{player.name}}</th>
-  </tr>
+<table mat-table [dataSource]="players">
+  <ng-container matColumnDef="name">
+    <th mat-header-cell *matHeaderCellDef> Name </th>
+    <td mat-cell *matCellDef="let player"> {{player.name}} </td>
+  </ng-container>
+  <tr mat-header-row *matHeaderRowDef="columnsToDisplay"></tr>
+  <tr mat-row *matRowDef="let row; columns: columnsToDisplay"
+    [ngClass]="{'highlight': selectedRowIndex == row.id && highlightSelected}"
+    (click)="highlight(row)"></tr>
 </table>
 
diff --git a/web/src/app/components/players/players.component.ts b/web/src/app/components/players/players.component.ts
index 49e68b7..d26ceb4 100644
--- a/web/src/app/components/players/players.component.ts
+++ b/web/src/app/components/players/players.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input, OnInit } from '@angular/core';
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { Player } from 'src/app/models/player';
 
 @Component({
@@ -10,9 +10,25 @@ export class PlayersComponent implements OnInit {
 
   @Input() players!: Player[];
 
+  @Input() highlightSelected: boolean = false;
+
+  @Output() selectRowEvent: EventEmitter<number> = new EventEmitter();
+
+  columnsToDisplay = ['name'];
+
+  selectedRowIndex: number = -1;
+
   constructor() { }
 
   ngOnInit(): void {
   }
 
+  highlight(row: Player): void {
+    if (this.selectedRowIndex == row.id) {
+      this.selectedRowIndex = -1;
+    } else {
+      this.selectedRowIndex = row.id
+    }
+    this.selectRowEvent.emit(this.selectedRowIndex);
+  }
 }
diff --git a/web/src/app/services/player.service.ts b/web/src/app/services/player.service.ts
index 517cd1e..0f54f9b 100644
--- a/web/src/app/services/player.service.ts
+++ b/web/src/app/services/player.service.ts
@@ -49,4 +49,8 @@ export class PlayerService {
   recruitVeteranPlayer(player: Player, team: Team) : void {
     
   }
+
+  firePlayer(player: Player): void {
+
+  }
 }
diff --git a/web/src/index.html b/web/src/index.html
index 52f51d7..7948271 100644
--- a/web/src/index.html
+++ b/web/src/index.html
@@ -6,8 +6,11 @@
   <base href="/">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
+  <link rel="preconnect" href="https://fonts.gstatic.com">
+  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
+  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 </head>
-<body>
+<body class="mat-typography">
   <app-root></app-root>
 </body>
 </html>
diff --git a/web/src/styles.css b/web/src/styles.css
index 90d4ee0..7e7239a 100644
--- a/web/src/styles.css
+++ b/web/src/styles.css
@@ -1 +1,4 @@
 /* You can add global styles to this file, and also import other style files */
+
+html, body { height: 100%; }
+body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
-- 
GitLab