import React, {useEffect} from 'react' import {ScrollView, StyleSheet, TouchableOpacity, View} from 'react-native' import {observer} from 'mobx-react-lite' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {useStores} from '../../state' import {ScreenParams} from '../routes' import {s} from '../lib/styles' import {ViewHeader} from '../com/util/ViewHeader' import {Text} from '../com/util/text/Text' import {usePalette} from '../lib/hooks/usePalette' import {ago} from '../../lib/strings' export const Log = observer(function Log({navIdx, visible}: ScreenParams) { const pal = usePalette('default') const store = useStores() const [expanded, setExpanded] = React.useState([]) useEffect(() => { if (!visible) { return } store.shell.setMinimalShellMode(false) store.nav.setTitle(navIdx, 'Log') }, [visible, store]) const toggler = (id: string) => () => { if (expanded.includes(id)) { setExpanded(expanded.filter(v => v !== id)) } else { setExpanded([...expanded, id]) } } return ( {store.log.entries .slice(0) .reverse() .map(entry => { return ( {entry.type === 'debug' ? ( ) : ( )} {entry.summary} {!!entry.details ? ( ) : undefined} {entry.ts ? ago(entry.ts) : ''} {expanded.includes(entry.id) ? ( {entry.details} ) : undefined} ) })} ) }) const styles = StyleSheet.create({ entry: { flexDirection: 'row', borderTopWidth: 1, paddingVertical: 10, paddingHorizontal: 6, }, summary: { flex: 1, }, ts: { width: 40, }, details: { paddingVertical: 10, paddingHorizontal: 6, }, })