You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been using the library for a while and I noticed that I could simplify my code with something like composing of the waiters. For example, given that I have two waiters bar and baz, I would like to have foo waiter that is waiting if one of bar or baz is waiting.
Motivation
Now, first I was thinking about adding array argument support to isWaiting so that I could call isWaiting(["foo", "bar"]) or a bit more explicit convenience function isAnyWaiting(["foo", "bar"]).
But after looking into my code I realized it's not enough. In my case, I have some big component Foo rendering smaller components Bar and Baz that wait on each other. That works fine with current API. It gets more convoluted when you would like to have some other component Qux that doesn't exactly want to know about the lower-level ones but needs to know if Foo or any of it's children waits. So currently in Qux you would need to write
Foo is a waiter, you can check if it's waiting with isWaiting("Foo")
Foo is always waiting if Bar or Baz is waiting.
the open question is should you be able to manually start and end a composed waiter?
Anternative idea
Maybe instead adding a compose method, we could compose Waiter providers? It's just an idea, I don't know if it's possible or makes sense but provier could have an optional name and be a child of another warapper like this?
On second thought, maybe adding support for wildcards to isWaiting would be enough and a lot simpler solution.
With wildcards, you could have your own waiters naming convention, eg. foo_a, foo_b, etc. and then call isWaiting("foo_*") to check if any of them is waiting?
anyWaiting() could be then written as isWaiting("*").
I've been using the library for a while and I noticed that I could simplify my code with something like composing of the waiters. For example, given that I have two waiters
bar
andbaz
, I would like to havefoo
waiter that is waiting if one ofbar
orbaz
is waiting.Motivation
Now, first I was thinking about adding array argument support to
isWaiting
so that I could callisWaiting(["foo", "bar"])
or a bit more explicit convenience functionisAnyWaiting(["foo", "bar"])
.But after looking into my code I realized it's not enough. In my case, I have some big component
Foo
rendering smaller componentsBar
andBaz
that wait on each other. That works fine with current API. It gets more convoluted when you would like to have some other componentQux
that doesn't exactly want to know about the lower-level ones but needs to know ifFoo
or any of it's children waits. So currently inQux
you would need to writeThat's not ideal because
Qux
needs to know too much aboutFoo
internals.Proposal
Create a separate method that will create a new waiter if one of the child waiters is waiting. It could be similar in usage to
createWaitingContext
:Foo
is a waiter, you can check if it's waiting withisWaiting("Foo")
Foo
is always waiting ifBar
orBaz
is waiting.Anternative idea
Maybe instead adding a
compose
method, we could composeWaiter
providers? It's just an idea, I don't know if it's possible or makes sense but provier could have an optional name and be a child of another warapper like this?Then if the inner's
anyWaiting()
istrue
,foo
is waiting in the outer waiter?Again, it's just an idea.
The text was updated successfully, but these errors were encountered: