Giter Club home page Giter Club logo

Comments (5)

luisherranz avatar luisherranz commented on September 17, 2024 1

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.

edgesoft avatar edgesoft commented on September 17, 2024

@luisherranz Can you specify more on what you want to achieve? Think Overmind already have the ability to make this happen.

from overmind.

luisherranz avatar luisherranz commented on September 17, 2024

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.

christianalfoni avatar christianalfoni commented on September 17, 2024

@luisherranz

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.

mikecann avatar mikecann commented on September 17, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.