import React from 'react';
import PropTypes from 'prop-types';
import { withStyles, withTheme } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableRow from '@material-ui/core/TableRow';
import TableCell from '@material-ui/core/TableCell';
import TableHead from '@material-ui/core/TableHead';
import TablePagination from '@material-ui/core/TablePagination';
import DeleteOutlinedIcon from '@material-ui/icons/DeleteOutlined';
import Popover from '@material-ui/core/Popover';
import MaterialColorPicker from 'react-material-color-picker';
import { CalendarField, EventField } from './RegexField';
import { theme, defaultChartColor } from './theme';
const styles = theme => ({
deleteButton: {
width: 0,
position: 'absolute',
marginRight: '2em',
right: 0,
height: 48,
},
deleteButtonHide: {
display: 'none'
},
deleteButtonShow: {},
deleteIcon: {
position: 'absolute',
height: '100%',
cursor: 'pointer'
},
patternTableWrapper: {
overflowX: 'auto',
overflowY: 'hidden'
},
patternTable: {
minWidth: 600
}
});
let nameFieldstyles = {
colorSample: {
display: 'inline-block',
height: 30,
width: 30,
marginRight: 10,
cursor: 'pointer'
}
};
function NameField(props) {
let color = props.value.color.background;
return (
<span>
<div
className={props.classes.colorSample}
style={{backgroundColor: color ? color : defaultChartColor}}
onClick={props.colorOnClick}>
</div>
<TextField
value={props.value.name}
onChange={props.onChange} />
</span>);
}
const patternHead = [
{label: "Name", elem: withStyles(nameFieldstyles)(NameField)},
{label: "Calendar", elem: withTheme(theme)(CalendarField)},
{label: "Event", elem: withTheme(theme)(EventField)}];
class PatternTable extends React.Component {
state = {
page: 0,
rowsPerPage: 5,
activePattern: null,
anchorEl: null,
colorPickerOpen: false,
colorPickerDefault: defaultChartColor
};
handleChangePage = (event, page) => {
this.setState({ page });
}
handleChangeRowsPerPage = event => {
this.setState({ rowsPerPage: event.target.value });
}
handleColorPickerClose = () => {
this.setState({ colorPickerOpen: false });
this.activeColorPattern !== null &&
this.chosenColor &&
this.props.onUpdatePattern('color', this.activeColorPattern,
{background: this.chosenColor.target.value})
}
render() {
const { classes, calendars, patterns } = this.props;
const { rowsPerPage, page } = this.state;
const nDummy = rowsPerPage - Math.min(rowsPerPage, patterns.length - page * rowsPerPage);
let rows = patterns.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((p, i) => {
let setActive = () => this.setState({ activePattern: p.idx });
let unsetActive = () => this.setState({ activePattern: null });
return [<TableRow key={i * 2}
onMouseOver={setActive} onMouseOut={unsetActive}
className={classes.deleteButton}>
<td>
<span className={this.state.activePattern !== p.idx ? classes.deleteButtonHide : classes.deleteButtonShow}>
<DeleteOutlinedIcon
className={classes.deleteIcon}
onClick={() => this.props.onRemovePattern(p.idx)} />
</span>
</td>
</TableRow>,
<TableRow key={i * 2 + 1} onMouseOver={setActive} onMouseOut={unsetActive}>
{
patternHead.map((s, i) => {
const CustomText = s.elem;
return (
<TableCell key={i}>
<CustomText
value={p}
calendars={calendars}
onChange={event => this.props.onUpdatePattern(s.field, p.idx, event.target.value)}
colorOnClick={event => {
this.activeColorPattern = p.idx;
this.setState({
anchorEl: event.currentTarget,
colorPickerDefault: p.color.background,
colorPickerOpen: true
});
}}/>
</TableCell>)})
}
</TableRow>]
});
rows.flat();
return (
<div>