readonlyMiddleware
Overview
Attaches an action middleware that will throw when any action is started over the node or any of the child nodes, thus effectively making the subtree readonly. * It will return an object with a dispose
function to remove the middleware and an allowWrite
function that will allow actions to be started inside the provided code block.
Example:
// given a model instance named `todo`
const { dispose, allowWrite } = readonlyMiddleware(todo)
// this will throw
todo.setDone(false)
await todo.setDoneAsync(false)
// this will work
allowWrite(() => todo.setDone(false))
// note: for async always use one action invocation per `allowWrite`!
await allowWrite(() => todo.setDoneAsync(false))