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'; import { useTranslation } from 'react-i18next'; interface ListItem { action: { type: string; payload?: any }; actionTime: number; duration: number; state: Record; tabId: string; time: number; } function ReduxViewer() { const { t } = useTranslation(); 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( () => listNow.map((msg) => decodeMessage(msg) as ListItem), [listNow.length], ); return ( <>

{t('Redux')}

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