Comments (5)
Sure Christian! Middleware support is the ultimate extensibility tool for libraries like Overmind.
Bear in mind that middleware tools are not for beginners, but for advanced users. It shouldn't complicate the "user" API, and it should not be explained in the "Learn Overmind" tutorials so it shouldn't affect how simple Overmind is.
To get a grasp of what can be done with middleware you can take a look at some of the Redux packages: https://github.com/xgrommx/awesome-redux#react---a-javascript-library-for-building-user-interfaces
You may think that many Redux middleware packages are not needed in Overmind because many things are already addressed by Overmind itself, but the best thing about giving tools to the community is that you never know what they will come up with :)
By the way, MobxStateTree also has middleware support with some interesting packages:
https://github.com/mobxjs/mobx-state-tree/tree/master/packages/mst-middlewares
Both Redux and MobxStateTree implement some "official features" using its own middelware API: reselect
, redux-thunk
or onAction
. In Overmind, for example, the official overmind-devtools could use the middleware API. Not that is crucial, but I think it's a good pattern to follow.
It is certainly an interesting idea, but the Overmind API is locked for now. We have to do this to bring our current plans to life and at the same time make sure we have a stable codebase.
Sure. Let's leave it for now. No problem as this is a tool for advanced users :)
from overmind.
@luisherranz Can you specify more on what you want to achieve? Think Overmind already have the ability to make this happen.
from overmind.
Sure.
Maybe something like this for mutations:
addMutationMiddleware(({ mutation, next, abort }) => {
if (mutation.path === 'state.xxx' && mutation.value === 'aaa' ) {
abort() // abort the mutation
} else if (mutation.path === 'state.xxx' && mutation.value === 'bbb' )
mutation.value = 'ccc' // change the value of the mutation
next(); // and keep executing other middlewares
} else {
next(); // do nothing, but keep executing other middlewares
})
And something like this for actions:
addActionMiddleware(({ action, next, abort }) => {
if (action.path === 'actions.someAction' && action.args === 'aaa' ) {
abort() // abort the action
} else if (action.path === 'actions.someAction' && action.args === 'bbb' )
action.args = 'ccc' // change the action args
next(); // and keep executing other middlewares
} else {
next(); // do nothing, but keep executing other middlewares
})
from overmind.
Thanks for suggesting features! :)
It is certainly an interesting idea, but the Overmind API is locked for now. We have to do this to bring our current plans to life and at the same time make sure we have a stable codebase.
What would help here, further down the road, is concrete examples of existing scenarios you think would be solved with this feature. Adding APIs has quite a big cost and we want to make sure that we are solving real scenarios that is impossible to solve with current API :)
Hope I was not discouraging here, really appreciate suggestions!
Please reopen if you want to discuss and iterate it more :)
from overmind.
I know this issue is closed but I too would like Middleware. I am currently using MobXStateTree because of the support for middleware.
The usecase is chrome extensions. You want to have a single state object in your background page, then in your child pages you want to intercept actions and send them to the background. Visa-versa you want to send state changes from your background pages back to your child pages.
There is a popular Redux middleware library that does this too which I hope will demonstrate better than my description: https://github.com/tshaddix/webext-redux
from overmind.
Related Issues (20)
- Is there any way to change states outside component? HOT 10
- [BUG] State mutation error HOT 3
- Svelte + Overmind : Function called outside component initialization
- [BUG] Statemachine errors on send(), possible documentation issue HOT 2
- Devtools: add the option to fail silently if port wasn't found HOT 2
- [BUG] Vue State Hooks loses reactivity once using in nested components. HOT 4
- [BUG] States changes are not reflecting in the UI but dev tool shows the value changed HOT 1
- [BUG] Typo in "ensureMutationTrackingIsEnabled" function HOT 3
- Error: While trying to resolve module `phoenix` HOT 1
- [BUG] TypeError with webpack 5 HOT 1
- [BUG] proxy-state-tree - You are mutating the path HOT 1
- Does the graphql package work with any subscriptions on a graphql server or is it specific to the phoenix framework?
- [BUG] svelte reactivity broken on subsequent state changes cross-components HOT 4
- [Question] Is the project dead? Is so, what are options to migrate to? HOT 5
- [BUG] Incompatible with React 18 with Strict Mode HOT 13
- Page doesn't re-render after navigation in Next 13 HOT 12
- [BUG] `overmind-react` - multiple overmind named instances HOT 1
- [BUG] Overmind JS Not working in Next JS 13 HOT 1
- [BUG] Usage of 'useSyncExternalStore' causes errors with react below version 18 HOT 3
- [BUG] Can't mock overmind for jest snapshots HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from overmind.