UNPKG

undux

Version:

Dead simple state management for React

55 lines (47 loc) 1.32 kB
import { StoreDefinition } from '..' export function withReduxDevtools<State extends object>( store: StoreDefinition<State>, ): StoreDefinition<State> { let devtools = window.__REDUX_DEVTOOLS_EXTENSION__ if (!devtools) { console.error( 'Undux withReduxDevtools plugin: Cannot find Redux Devtools browser extension. Is it installed?', ) return store } let devTools = devtools.connect() let wasTriggeredByDevtools = false let jumpToState = (newState: State) => { let oldState = store.getState() for (let key in newState) { if (key in oldState) { wasTriggeredByDevtools = true store.set(key as keyof State)(newState[key as keyof State]) wasTriggeredByDevtools = false } } } devTools.subscribe((message) => { switch (message.type) { case 'START': devTools.send(null, store.getState()) return case 'DISPATCH': if (!message.state) { return } switch (message.payload.type) { case 'JUMP_TO_ACTION': case 'JUMP_TO_STATE': jumpToState(JSON.parse(message.state)) } } }) store.onAll().subscribe(({ key }) => { if (wasTriggeredByDevtools) { return } devTools.send(key, store.getState()) }) return store }