Skip to content
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

[JENKINS-72745] "Manage Jenkins" nested context menu can stay open when parent menu closes #10251

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions src/main/js/components/dropdowns/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,20 @@ function generateDropdown(element, callback, immediate) {
tippy(
element,
Object.assign({}, Templates.dropdown(), {
hideOnClick: element.dataset["hideOnClick"] !== "false",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Used in

e.dataset["hideOnClick"] = "false";
originally introduced in 3c67676.

I was unable to identify a difference in behavior as a result of this PR (e.g., in the "Copy From" textfield on the new item dialog), so perhaps I'm just missing how this is supposed to work? If it's not needed anymore or compensated for somehow by this new code, the data- attribute should not longer be set.

Pinging @zbynek as the original author who might be able to help with this question.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we no longer read the data- attribute, we can indeed remove the assignment 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zbynek Thanks for confirmation.

Can you think of a widget that would be affected by the attribute, where this change may change behavior? The autocomplete popup of the "Copy from" text field doesn't seem to change behavior when I edit the data- attribute in the DOM. I feel like I'm missing something.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My PR disables Tippy's default hideOnClick only for autocomplete, this PR disables it for all other dropdowns. So PR won't change behavior of autocomplete. It'ts the dropdowns that are not autocomplete that changed behavior in this PR:

For context menus clicking the chevron (downward triangle) the second time no longer closes the context menu. If that's still a desired behavior, the data- attribute is still needed (and should be read in the click handler to decide how to handle clicks in reference element).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zbynek Thanks for clarifying. That seems like a problem.

open.mov

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@daniel-beck I have updated the code to fix this problem. Thank you.

jenkins.mp4

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ridemountainpig Thanks. Unfortunately now the fields where this was previously left open close when they shouldn't:

close.mov

That's what the hideOnClick was used for. Could this behavior be retained, or does the fix for this require that we change one of the previous behaviors (stay open on autocomplete / close in other cases)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@daniel-beck I have updated it. Could you please check it again? Thank you.

jenkins.mp4

hideOnClick: element.dataset["hideOnClick"] !== "false" ? "toggle" : false,
onCreate(instance) {
const onload = () => {
if (instance.loaded) {
return;
}

instance.popper.addEventListener("click", () => {
instance.hide();
document.addEventListener("click", (event) => {
const isClickInAnyDropdown = !!event.target.closest('[data-tippy-root]');
const isClickOnReference = instance.reference.contains(event.target);

if (!isClickInAnyDropdown && !isClickOnReference) {
instance.hide();
}
});

callback(instance);
Expand Down