PureScript-Redux-DevTools

September 7, 2018 ยท View on GitHub

Some bindings to work with Redux DevTools.

This doesn't do any magic and you will have to handle your own encodings to Foreign and whatever.

Example usage

main :: Effect Unit
main = do
  mExt <- DT.getExtension
  case mExt of
    Just ext -> do
      log "Found extension"

      -- make instance
      inst <- DT.connect ext (DT.mkConnectOptions {})

      -- feed initial state to DevTools
      DT.init inst (JSON.write initialState)

      -- ref where i'll keep my state in this example
      ref <- Ref.new initialState

      let handle' = handle inst ref
      handle' (add_ 1)
      handle' (sub_ 1)
      handle' (add_ 1)

      -- listen and just print out what we get from DevTools
      DT.subscribe inst (log <<< JSON.writeJSON)
    Nothing -> do
      error "No extension found"
  where
    -- handler that will modify my state ref
    handle inst ref action = do
      s <- Ref.modify (update action) ref
      log $ "New action: " <> JSON.writeJSON action
      log $ "New state: " <> JSON.writeJSON s

      DT.send inst { state: JSON.write s, action: JSON.write action }