import * as React from 'react' import { Badge, Typography } from '@material-ui/core' import { selectTextWithCtrlA } from '../../utils/handleTextSelectWithCtrlA' import { Theme, withStyles } from '@material-ui/core/styles' interface HistoryItem { key: string title: JSX.Element | string value: string selected?: boolean } interface Props { items: Array onClick?: (index: number, element: EventTarget) => void classes: any contentTypeIndicator?: JSX.Element theme: Theme } interface State { collapsed: boolean } class HistoryDrawer extends React.Component { private handleCtrlA = selectTextWithCtrlA({ targetSelector: 'pre' }) constructor(props: any) { super(props) this.state = { collapsed: true, } } private toggle = () => { this.setState({ collapsed: !this.state.collapsed }) } private createSelectionHandler = (index: number) => (event: React.MouseEvent) => { this.props.onClick && this.props.onClick(index, event.target) event.preventDefault() event.stopPropagation() } public renderHistory() { const style = (element: HistoryItem) => ({ backgroundColor: element.selected ? this.props.theme.palette.action.selected : this.props.theme.palette.action.hover, margin: '8px', padding: '8px 8px 0 8px', cursor: this.props.onClick ? 'pointer' : 'inherit', }) const messageStyle: React.CSSProperties = { textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' } const elements = this.props.items.map((element, index) => (
{element.title}
{element.value}
)) const visible = this.props.items.length > 0 && this.state.collapsed return (
{this.state.collapsed ? '▶ History' : '▼ History'}
{this.state.collapsed ? this.props.contentTypeIndicator : null}
{this.state.collapsed ? null : this.props.children} {this.state.collapsed ? null : elements}
) } public render() { return
{this.renderHistory()}
} } const styles = (theme: Theme) => ({ main: { backgroundColor: 'rgba(170, 170, 170, 0.2)', marginTop: '16px', }, badge: { right: '-25px' }, }) export default withStyles(styles, { withTheme: true })(HistoryDrawer)