diff --git a/README.md b/README.md index 81db829..c6d833a 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ To set up this template in development mode: # Features List +- Mainly one language across the codebase (JavaScript) - Full documentation - Setup tutorial - Fully Featured Account System (as a microservice) diff --git a/client/components/pages/mod.jsx b/client/components/pages/mod.jsx index 9cf5f93..22eccc5 100644 --- a/client/components/pages/mod.jsx +++ b/client/components/pages/mod.jsx @@ -3,6 +3,9 @@ import { Redirect } from 'react-router-dom'; import { TokenContext } from '../utilities/token-provider'; +import ChatReports from '../panels/chat-reports'; +import BanUser from '../panels/ban-user'; + const Mod = props => { //context const authTokens = useContext(TokenContext); @@ -15,6 +18,8 @@ const Mod = props => { return (

Moderation Tools

+ +
); }; diff --git a/client/components/panels/ban-user.jsx b/client/components/panels/ban-user.jsx new file mode 100644 index 0000000..6371d3b --- /dev/null +++ b/client/components/panels/ban-user.jsx @@ -0,0 +1,9 @@ +import React from 'react'; + +const BanUser = props => { + return ( + <> + ); +}; + +export default BanUser; \ No newline at end of file diff --git a/client/components/panels/chat-reports.jsx b/client/components/panels/chat-reports.jsx new file mode 100644 index 0000000..f4ce443 --- /dev/null +++ b/client/components/panels/chat-reports.jsx @@ -0,0 +1,67 @@ +import React, { useState, useEffect, useContext } from 'react'; +import { TokenContext } from '../utilities/token-provider'; +import dateFormat from 'dateformat'; + +const ChatReports = props => { + const [reports, setReports] = useState([]); + + const authTokens = useContext(TokenContext); + + useEffect(async () => { + const result = await authTokens.tokenFetch(`${process.env.CHAT_URI}/admin/reports`, { + method: 'GET', + headers: { + 'Access-Control-Allow-Origin': '*' + } + }); + + if (!result.ok) { + const err = `${result.status}: ${await result.text()}`; + console.log(err); + alert(err); + } else { + setReports(await result.json()); + } + }, []); + + return ( + + + + + + + + + + + + {reports.map((report, index) => ( + + + + + + + + + ))} + +
DateUsernameRoom NameContentReported By
{dateFormat(report.chatlog.createdAt, 'yyyy-mm-dd, H:MM:ss')}{report.chatlog.username}{report.chatlog.room}{report.chatlog.text}{report.reporter.join(', ')}
+ ); +}; + +const deleteReportsFor = (chatlogId, tokenFetch, setReports) => { + tokenFetch(`${process.env.CHAT_URI}/admin/reports`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*' + }, + body: JSON.stringify({ chatlogId }) + }); + + setReports(reports => reports.filter(report => report.chatlogId != chatlogId)); +}; + +export default ChatReports; \ No newline at end of file