diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..a3c03c6
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6 @@
+{
+ "name": "team58",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {}
+}
diff --git a/sports-matcher/package.json b/sports-matcher/package.json
index 2f1f97b..e8e0974 100644
--- a/sports-matcher/package.json
+++ b/sports-matcher/package.json
@@ -10,8 +10,11 @@
"@testing-library/jest-dom": "^5.16.2",
"@testing-library/react": "^12.1.3",
"@testing-library/user-event": "^13.5.0",
+ "bootstrap": "^5.1.3",
"react": "^17.0.2",
+ "react-bootstrap": "^2.2.0",
"react-dom": "^17.0.2",
+ "react-router-dom": "^6.2.2",
"react-scripts": "^5.0.0",
"web-vitals": "^2.1.4"
},
diff --git a/sports-matcher/public/chief.jpg b/sports-matcher/public/chief.jpg
new file mode 100644
index 0000000..3335964
Binary files /dev/null and b/sports-matcher/public/chief.jpg differ
diff --git a/sports-matcher/public/freeman.jpg b/sports-matcher/public/freeman.jpg
new file mode 100644
index 0000000..45d5175
Binary files /dev/null and b/sports-matcher/public/freeman.jpg differ
diff --git a/sports-matcher/public/index.html b/sports-matcher/public/index.html
index aa069f2..c87dbda 100644
--- a/sports-matcher/public/index.html
+++ b/sports-matcher/public/index.html
@@ -24,6 +24,12 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
+
React App
diff --git a/sports-matcher/public/shogun.jpg b/sports-matcher/public/shogun.jpg
new file mode 100644
index 0000000..276e987
Binary files /dev/null and b/sports-matcher/public/shogun.jpg differ
diff --git a/sports-matcher/src/Admin.css b/sports-matcher/src/Admin.css
new file mode 100644
index 0000000..59c9b92
--- /dev/null
+++ b/sports-matcher/src/Admin.css
@@ -0,0 +1,4 @@
+
+.MainTable {
+ padding : 20px;
+}
\ No newline at end of file
diff --git a/sports-matcher/src/Admin.js b/sports-matcher/src/Admin.js
new file mode 100644
index 0000000..9d48546
--- /dev/null
+++ b/sports-matcher/src/Admin.js
@@ -0,0 +1,249 @@
+import * as React from 'react';
+import './Admin.css';
+import Button from '@mui/material/Button';
+import Typography from '@mui/material/Typography';
+import Container from '@mui/material/Container';
+import { TableContainer, TableCell, Table, TableBody, TableRow, TableHead, Paper } from '@mui/material';
+
+
+
+class AdminTable extends React.Component {
+ constructor(props) {
+ super(props)
+
+
+
+ this.state = {
+ users: [
+ { id: 1, username: 'username1', name: 'name1', email: 'user1@email.com', phone: '123-456-7890' },
+ { id: 2, username: 'username2', name: 'name2', email: 'user2@email.com', phone: '123-456-7890' },
+ { id: 3, username: 'username3', name: 'name3', email: 'user3@email.com', phone: '123-456-7890' },
+ { id: 4, username: 'username4', name: 'name4', email: 'user4@email.com', phone: '123-456-7890' }
+ ],
+ suspendedUsers: [
+ { id: 1, username: 'suspended1', name: 's1', email: 's1@email.com', phone: '123-456-7890' },
+ { id: 2, username: 'suspended2', name: 's2', email: 's2@email.com', phone: '123-456-7890' },
+ { id: 3, username: 'suspended3', name: 's3', email: 's3@email.com', phone: '123-456-7890' },
+ { id: 4, username: 'suspended4', name: 's4', email: 's4@email.com', phone: '123-456-7890' }
+ ],
+ matches: [
+ { id: 1, sport: "Tennis", date: '08/08/2021', location: 'toronto', description: 'Tennis match' },
+ { id: 2, sport: "Basketball", date: '09/09/2021', location: 'toronto', description: 'Basketball match' }
+ ],
+ buttonColors: ['black', '', '']
+ }
+
+
+ }
+
+ EditButton() {
+ return {
+ alert('clicked');
+ }} variant="contained">Edit ;
+
+ }
+
+ DeleteButtonClick() {
+ return (
+
+
+ Are you sure you want to delete this user?
+ {
+ alert('User deleted');
+ }} variant="contained">Yes
+
+ )
+ }
+
+ NewDeleteButtonClick() {
+ return ()
+ }
+
+ DeleteButton() {
+ return {
+ alert('User deleted.');
+ }} variant="contained">Delete ;
+
+ }
+
+ PardonButton() {
+ return {
+ alert('User pardoned.');
+ }} variant="contained">Pardon ;
+
+ }
+
+ userTableData() {
+ return this.state.users.map((user) => {
+ const { id, username, name, email, phone } = user;
+ return (
+
+ {id}
+ {username}
+ {name}
+ {email}
+ {phone}
+ {this.DeleteButton()}
+ {this.EditButton()}
+
+ )
+ })
+ }
+
+ suspendedUserTableData() {
+ return this.state.suspendedUsers.map((user) => {
+ const { id, username, name, email, phone } = user
+ return (
+
+ {id}
+ {username}
+ {name}
+ {email}
+ {phone}
+ {this.DeleteButton()}
+ {this.EditButton()}
+ {this.PardonButton()}
+
+ )
+ })
+ }
+
+ matchTableData() {
+ return this.state.matches.map((match) => {
+ const { id, sport, date, location, description } = match
+ return (
+
+ {id}
+ {sport}
+ {date}
+ {location}
+ {description}
+ {this.DeleteButton()}
+ {this.EditButton()}
+
+ )
+ })
+ }
+
+ matchTableHead() {
+ return (
+
+
+ ID
+ Sport
+ Date
+ Location
+ Description
+
+
+
+
+ );
+
+ }
+
+ suspendedUserTableHead() {
+ return (
+
+
+ ID
+ Username
+ Name
+ Email
+ Phone
+
+
+
+
+
+ );
+
+ }
+
+ userTableHead() {
+ return (
+
+
+ ID
+ Username
+ Name
+ Email
+ Phone
+
+
+
+
+ );
+
+ }
+
+
+ selectTable() {
+ this.setState({ buttonColors: ['', '', ''] });
+ }
+
+ renderTableHead() {
+ if (this.state.buttonColors[0] === 'black') {
+ return this.matchTableHead();
+ } else if (this.state.buttonColors[1] === 'black') {
+ return this.userTableHead();
+ } else {
+ return this.suspendedUserTableHead();
+ }
+ }
+
+ renderTableData() {
+ if (this.state.buttonColors[0] === 'black') {
+ return this.matchTableData();
+ } else if (this.state.buttonColors[1] === 'black') {
+ return this.userTableData();
+ } else {
+ return this.suspendedUserTableData();
+ }
+
+ }
+
+ render() {
+ return (
+
+
Administration
+
+ {
+ this.setState({ buttonColors: ['black', '', ''] });
+ }} sx={{
+ margin: 3,
+ backgroundColor: this.state.buttonColors[0],
+ }} variant="outlined">Matches
+ {
+ this.setState({ buttonColors: ['', 'black', ''] });
+ }} sx={{
+ margin: 3,
+ backgroundColor: this.state.buttonColors[1],
+ }} variant="outlined">Users
+ {
+ this.setState({ buttonColors: ['', '', 'black'] });
+ }} sx={{
+ margin: 3,
+ backgroundColor: this.state.buttonColors[2],
+ }} variant="outlined">Suspended Users
+
+
+
+ {this.renderTableHead()}
+
+ {this.renderTableData()}
+
+
+
+
+
+ )
+ }
+}
+
+export default AdminTable
\ No newline at end of file
diff --git a/sports-matcher/src/App.js b/sports-matcher/src/App.js
index 7ced89c..e631343 100644
--- a/sports-matcher/src/App.js
+++ b/sports-matcher/src/App.js
@@ -1,15 +1,16 @@
import './App.css';
-import Filter from './Filter';
-import MatchesList from './MatchesList';
-import ReportForm from "./ReportForm";
-import SearchBar from './SearchBar';
-
+import { Routes, Route, Link } from "react-router-dom";
+import SignIn from './SignIn';
+import SignUp from './SignUp';
+import Home from './Home';
function App() {
return (
-
-
-
+
+ } />
+ } />
+ } />
+
);
}
diff --git a/sports-matcher/src/Chat.js b/sports-matcher/src/Chat.js
new file mode 100644
index 0000000..da3ac21
--- /dev/null
+++ b/sports-matcher/src/Chat.js
@@ -0,0 +1,18 @@
+/* Please direct questions to Hansi Xu (Wallace LaWall on Discord) */
+
+import React from 'react';
+import './chats.css'
+
+class Chat extends React.Component {
+ render() {
+ return (
+
+
+ {this.props.message}
+
+
+ )
+ }
+}
+
+export default Chat;
\ No newline at end of file
diff --git a/sports-matcher/src/ChatWindow.js b/sports-matcher/src/ChatWindow.js
new file mode 100644
index 0000000..036ad55
--- /dev/null
+++ b/sports-matcher/src/ChatWindow.js
@@ -0,0 +1,113 @@
+/* Please direct questions to Hansi Xu (Wallace LaWall on Discord) */
+
+import React from 'react';
+import './chats.css'
+import Chat from './Chat'
+import Contact from './Contact'
+import { useState } from "react";
+
+class ChatWindow extends React.Component {
+ render() {
+ return (
+
+
+
+
+
+ )
+ }
+}
+
+class UserList extends React.Component {
+
+ render() {
+ return (
+
+
+
+
+
+ )
+ }
+}
+
+class MessageList extends React.Component {
+ render() {
+ return (
+
+
+
+
+
+
+ )
+ }
+}
+// class ChatWindow extends React.Component {
+// render() {
+// return (
+//
+//
+// {/* */}
+//
+// )
+// }
+// }
+const ChatInput = () => {
+ const [message, setMessage] = useState( '' );
+
+ // const onKeyPress = (e) => {
+ // // if(e.key === 'Enter'){
+ // // e.preventDefault(); // Ensure it is only this code that runs
+ // // setMessage("")
+ // // }
+ // }
+
+ const onKeyDown = (e) => {
+ const keyCode = e.which || e.keyCode;
+
+ // 13 represents the Enter key
+ if (keyCode === 13 && !e.shiftKey) {
+ e.preventDefault();
+ setMessage("")
+ }
+ }
+
+ return (
+ // onKeyPress={(e) => onKeyPress(e)}
+
+
+ );
+ };
+class ChatInput2 extends React.Component {
+
+ constructor(props) {
+ super(props)
+ this.setState({inputVal : ""})
+ }
+
+ handleUserInput(e) {
+ this.setState(this.setState({inputVal : e.target.value}));
+ };
+
+ render() {
+ return (