mediamonkeyserver
Version:
MediaMonkey Server
87 lines (74 loc) • 2.25 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
import Typography from '@material-ui/core/Typography';
import Server from 'server';
import { subscribeLogChanges } from 'actions';
const DEFAULT_MAX_ITEMS = 100000;
const styles = ({
});
class LogList extends React.Component {
state = {
log: [],
};
reversed = false;
updateList = (logType) => {
logType = logType || 'messages';
Server.getLog(logType).then(log => {
const maxItems = this.props.maxItems || DEFAULT_MAX_ITEMS;
this.reversed = false;
this.setState({ log: log.slice(-maxItems).map(x => x) });
});
}
componentDidMount = () => {
this.updateList(this.props.logType);
subscribeLogChanges(this.logChanged);
}
componentWillUpdate = (nextProps) => {
if (nextProps.logType !== this.props.logType) {
this.updateList(nextProps.logType);
}
}
logChanged = () => {
this.updateList(this.props.logType);
}
render() {
var items = this.state.log;
if (this.props.reversed !== this.reversed) {
items = items.reverse();
this.reversed = !this.reversed;
}
if (this.props.dense)
return (
<Typography variant='body1'>
{items.map((logitem, index) => {
return <span key={index}>
{new Date(logitem.timestamp).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit' })} {logitem.message} <br />
</span>;
})}
</Typography>
);
else
return (
<List component='div'>
{items.map((logitem, index) => {
return <ListItem key={'log' + index} dense>
<Typography variant='body1'>
{new Date(logitem.timestamp).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })} {logitem.message}
</Typography>
</ListItem>;
})}
</List>
);
}
}
LogList.propTypes = {
classes: PropTypes.object.isRequired,
logType: PropTypes.string,
maxItems: PropTypes.number,
reversed: PropTypes.bool,
dense: PropTypes.bool,
};
export default withStyles(styles)(LogList);