import { useRef, useLayoutEffect, ReactNode, FC, useState } from 'react' import { IconProps, Notepad, Prohibit } from 'phosphor-react' import useStayScrolled from 'react-stay-scrolled' import NextLink from 'next/link' import Container from './Container' import LogText from './LogText' import { ILog } from '../state' import { Pre, Link, Heading, Button, Text, Flex, Box } from '.' interface ILogBox { title: string clearLog?: () => void logs: ILog[] renderNav?: () => ReactNode enhanced?: boolean Icon?: FC } const LogBox: FC = ({ title, clearLog, logs, children, renderNav, enhanced, Icon = Notepad }) => { const logRef = useRef(null) const { stayScrolled /*, scrollBottom*/ } = useStayScrolled(logRef) useLayoutEffect(() => { stayScrolled() }, [stayScrolled, logs]) return ( {title} {renderNav?.()} {clearLog && ( )} {logs?.map((log, index) => ( ))} {children} ) } export const Log: FC = ({ type, timestring, message, link, linkText, defaultCollapsed, jsonData }) => { const [expanded, setExpanded] = useState(!defaultCollapsed) if (message === undefined) message = {'undefined'} else if (message === '') message = {'""'} return ( <> {timestring && ( {timestring}{' '} )}
{message}
{link && ( {linkText} )} {jsonData && ( setExpanded(!expanded)} as="a"> {expanded ? 'Collapse' : 'Expand'} )} {expanded && jsonData &&
{jsonData}
}
) } export default LogBox