import { selectStorageListNow } from 'Player'; import { GitCommitVertical } from 'lucide-react'; import { observer } from 'mobx-react-lite'; import React from 'react'; import { PlayerContext } from 'App/components/Session/playerContext'; import { durationFromMs } from 'App/date'; import { Icon, JSONTree } from 'UI'; import JumpButton from "../../shared/DevTools/JumpButton"; import BottomBlock from '../BottomBlock/index'; interface ListItem { action: { type: string; payload?: any }; actionTime: number; duration: number; state: Record; tabId: string; time: number; } function ReduxViewer() { const { player, store } = React.useContext(PlayerContext); const { tabStates, currentTab, sessionStart } = store.get(); const state = tabStates[currentTab] || {}; const listNow = selectStorageListNow(state) || []; const decodeMessage = (msg: any) => { const decoded = {}; const pureMSG = { ...msg }; const keys = ['state', 'action']; try { keys.forEach((key) => { if (pureMSG[key]) { // @ts-ignore TODO: types for decoder decoded[key] = player.decodeMessage(pureMSG[key]); } }); } catch (e) { console.error('Error on state message decoding: ', e, pureMSG); return null; } return { ...pureMSG, ...decoded }; }; const decodedList = React.useMemo(() => { return listNow.map((msg) => { return decodeMessage(msg) as ListItem; }); }, [listNow.length]); return ( <>

Redux

{decodedList.map((msg, i) => ( ))}
); } function StateEvent({ msg, sessionStart, prevMsg, onJump, }: { msg: ListItem; sessionStart: number; onJump: (time: number) => void; prevMsg?: ListItem; }) { const [isOpen, setOpen] = React.useState(false); return (
setOpen(!isOpen)} >
{msg.action.type ?? 'action'}
@ {durationFromMs(msg.actionTime - sessionStart)} (in{' '} {durationFromMs(msg.duration)})
{isOpen ? (
{prevMsg ? (
prev state
) : null}
action
next state
) : null} onJump(msg.time)} />
); } export default observer(ReduxViewer);