-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Canvas] Fix: lose element selection on page flip #32111
Conversation
Pinging @elastic/kibana-canvas |
💚 Build Succeeded |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @w33ble, looking into it |
f91b840
to
6ba1b3d
Compare
💔 Build Failed |
retest |
💚 Build Succeeded |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionality looks good. Code looks good, except for the one part I pointed out.
@@ -320,6 +322,14 @@ export const aeroelastic = ({ dispatch, getState }) => { | |||
aero.removeStore(action.payload); | |||
} | |||
|
|||
if (pageChangerActions.indexOf(action.type) >= 0) { | |||
if (getSelectedElement(getState())) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't this the same as prevPage
from above (which you're also using in the else condition)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
prevPage
is bound to the result of getSelectedPage
, not getSelectedElement
to which the comment seems attached.
In any case, the overall point about common subexpression elimination is true. I had a provisional commit, which extracts out all the getState()
etc. calls in this file, in some cases, reused like 10 times. I ended up not pushing it because this middleware file is mostly going away if the local (workpadPage
) state based approach proves solid, and there is no notable perf difference.
Also, my mental model is slightly hazy if there are middleware statements that dispatch Redux actions: the dispatched action will re-execute the middleware part (I believe synchronously), and coming back from that dispatch to the original middleware call, what you have in getState
and what you might have originally bound getState
to might deviate. Ideally it's not the case (ie. calling getState
from within the same execution of the middleware function should yield the snapshot) but again, I'm lacking a clear model, and I don't currently see how either way can be semantically clear (getState()
giving old results, or giving new results both have their problems), so I'd be glad to hear or read info on this.
* Fix: lose element selection on page flip * Fix: remove selection in Redux too (PR feedback from Joe)
* Fix: lose element selection on page flip * Fix: remove selection in Redux too (PR feedback from Joe)
* Fix: lose element selection on page flip * Fix: remove selection in Redux too (PR feedback from Joe)
Fixes #31839 - thanks Joe for the report