diff --git a/backend/src/main.ts b/backend/src/main.ts index 13cad38..2031452 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -3,6 +3,6 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(3000); + await app.listen(3500); } bootstrap(); diff --git a/frontend/package.json b/frontend/package.json index e9ad51d..477eafa 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,6 +2,7 @@ "name": "ts-onlinetime-ranks", "version": "0.1.0", "private": true, + "proxy": "http://localhost:3500", "dependencies": { "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", diff --git a/frontend/src/App.scss b/frontend/src/App.scss index 1287ae1..6682593 100644 --- a/frontend/src/App.scss +++ b/frontend/src/App.scss @@ -5,7 +5,6 @@ justify-content: center; align-items: center; text-align: center; - height: 100vh; color: whitesmoke; background-color: #282c34; } diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ed0a3bd..5c593d5 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,26 +1,67 @@ import React from 'react'; import './App.scss'; -import Mock from "./mock/Mock"; +import UserStatsMockService from "./mock/UserStatsMockService"; import TableEntry from "./models/TableEntry"; -import {SinusBot} from "@support-pp/sinusbot-ts"; -import SinusBotService from "./services/SinusBotService"; +import UserStatsService from "./services/UserStatsService"; +import {findDOMNode} from "react-dom"; + +interface State { + error?: any, + isLoaded: boolean, + users?: TableEntry[] +} export default class App extends React.Component { - //private tableContent: TableEntry[] = Mock.tableContent; + private apiService: UserStatsService = new UserStatsService(); - state = { + state: State = { error: null, isLoaded: false, - users: [], + users: undefined } componentDidMount() { + this.setState({isLoaded: false}) + this.apiService.getStats() + .then(data => this.setState({ + isLoaded: true, + users: data + })) + .catch(error => this.setState({ + isLoaded: true, + error: error + })); + } + componentDidUpdate() { + const element = findDOMNode(this); + if (element != null) { + window.scrollTo(0, 0); + } + } + + renderTableData() { + const { error, isLoaded, users } = this.state; + if (users != null && isLoaded) { + return users.map((entry, index) => { + const placement = index + 1; + const placementClassName = placement === 1 ? "first-place" + : (placement === 2 ? "second-place" + : (placement === 3 ? "third-place" + : undefined)) + return ( + + {placement} + {entry.name} + {entry.onlineTime} + + ) + }); + } } render() { - const { error, isLoaded, users } = this.state; return (

Humenius' TeamSpeak 3-Ranking

@@ -33,33 +74,15 @@ export default class App extends React.Component { - { - users.map((tableEntry: TableEntry, i) => { - let className; - switch (i+1) { - case 1: className = "first-place"; break; - case 2: className = "second-place"; break; - case 3: className = "third-place"; break; - default: className = ""; break; - } - - return ( - - {i+1} - {tableEntry.name} - {tableEntry.onlineTime} - - ); - }) - } + {this.renderTableData()}