mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-10 00:04:48 -07:00
101 lines
2.3 KiB
TypeScript
101 lines
2.3 KiB
TypeScript
// eslint-disable-next-line
|
|
import React, { Component } from "react";
|
|
import { connect } from "react-redux";
|
|
import { withRouter } from "react-router-dom";
|
|
import * as _ from "lodash";
|
|
|
|
import { ServerDispatch, ServerSelectors, ServerStateLogs } from "store";
|
|
|
|
import { ModeratorService } from "api";
|
|
|
|
import { AuthGuard, ModGuard} from "components";
|
|
import LogResults from "./LogResults";
|
|
import { SearchForm } from "forms";
|
|
|
|
import "./Logs.css";
|
|
|
|
class Logs extends Component<LogsTypes> {
|
|
MAXIMUM_RESULTS = 1000;
|
|
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.onSubmit = this.onSubmit.bind(this);
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
ServerDispatch.clearLogs();
|
|
}
|
|
|
|
onSubmit(fields) {
|
|
const trimmedFields: any = this.trimFields(fields);
|
|
|
|
const { userName, ipAddress, gameName, gameId, message, logLocation } = trimmedFields;
|
|
|
|
const required = _.filter({
|
|
userName, ipAddress, gameName, gameId, message
|
|
}, field => field);
|
|
|
|
if (logLocation) {
|
|
trimmedFields.logLocation = this.flattenLogLocations(logLocation);
|
|
}
|
|
|
|
trimmedFields.maximumResults = this.MAXIMUM_RESULTS;
|
|
|
|
if (_.size(required)) {
|
|
ModeratorService.viewLogHistory(trimmedFields);
|
|
} else {
|
|
// @TODO use yet-to-be-implemented banner/alert
|
|
}
|
|
}
|
|
|
|
private trimFields(fields) {
|
|
return _.reduce(fields, (obj, field, key) => {
|
|
if (typeof field === "string") {
|
|
const trimmed = _.trim(field);
|
|
|
|
if (!!trimmed) {
|
|
obj[key] = trimmed;
|
|
}
|
|
} else {
|
|
obj[key] = field;
|
|
}
|
|
|
|
return obj;
|
|
}, {});
|
|
}
|
|
|
|
private flattenLogLocations(logLocations) {
|
|
return _.reduce(logLocations, (arr, loc, key) => {
|
|
arr.push(key);
|
|
return arr;
|
|
}, [])
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div className="moderator-logs overflow-scroll">
|
|
<AuthGuard />
|
|
<ModGuard />
|
|
|
|
<div className="moderator-logs__form">
|
|
<SearchForm onSubmit={this.onSubmit} />
|
|
</div>
|
|
|
|
<div className="moderator-logs__results">
|
|
<LogResults logs={this.props.logs} />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
}
|
|
|
|
interface LogsTypes {
|
|
logs: ServerStateLogs
|
|
}
|
|
|
|
const mapStateToProps = state => ({
|
|
logs: ServerSelectors.getLogs(state)
|
|
});
|
|
|
|
export default withRouter(connect(mapStateToProps)(Logs));
|