import React, { useCallback, useState, useEffect, memo } from 'react' import { Badge, Typography } from '@mui/material' import { selectTextWithCtrlA } from '../../utils/handleTextSelectWithCtrlA' import { Theme, emphasize } from '@mui/material/styles' import { withStyles } from '@mui/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 autoOpen?: boolean theme: Theme children?: any } function HistoryDrawer(props: Props) { const handleCtrlA = selectTextWithCtrlA({ targetSelector: 'pre' }) const [expanded, setExpanded] = useState(undefined) const toggle = useCallback(() => { setExpanded(!expanded) }, [expanded]) useEffect(() => { if (props.autoOpen && expanded === undefined && props.items.length > 0) { setExpanded(true) } }, [props.autoOpen, expanded, props.items]) const createSelectionHandler = (index: number) => (event: React.MouseEvent) => { props.onClick && props.onClick(index, event.target) event.preventDefault() event.stopPropagation() } function renderHistory() { const style = (element: HistoryItem) => ({ backgroundColor: element.selected ? emphasize(props.theme.palette.background.default, 0.2) : emphasize(props.theme.palette.background.default, 0.07), margin: '8px', padding: '8px 8px 0 8px', cursor: props.onClick ? 'pointer' : 'inherit', }) const messageStyle: React.CSSProperties = { textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' } const elements = props.items.map((element, index) => (
{element.title}
{element.value}
)) const visible = props.items.length > 0 && !expanded return (
{expanded ? '▼ History' : '▶ History'} {props.contentTypeIndicator}
{expanded ? props.children : null} {expanded ? elements : null}
) } return
{renderHistory()}
} const styles = (theme: Theme) => ({ main: { backgroundColor: theme.palette.background.default, marginTop: '16px', }, badge: { right: '-25px' }, }) export default withStyles(styles, { withTheme: true })(memo(HistoryDrawer))