Skip to content

Commit ce1a71c

Browse files
committed
fix #1023 MultiSelect DropDown appears in center and therefore detached from its inputfield if too little space available
1 parent 07df1dd commit ce1a71c

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

domino-ui/src/main/java/org/dominokit/domino/ui/menu/direction/DropDirection.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
*/
1616
package org.dominokit.domino.ui.menu.direction;
1717

18+
import static org.dominokit.domino.ui.menu.MenuStyles.dui_menu;
1819
import static org.dominokit.domino.ui.utils.Domino.elementOf;
1920

2021
import elemental2.dom.Element;
2122
import elemental2.dom.Event;
2223
import org.dominokit.domino.ui.style.CssClass;
24+
import org.dominokit.domino.ui.utils.DominoElement;
2325

2426
/** DropDirection interface. */
2527
public interface DropDirection {
@@ -50,12 +52,19 @@ default void cleanup(Element source) {}
5052
default void cleanSelf(Element source) {}
5153

5254
default DropDirection fallBackPosition(DropDirectionContext context, SpaceChecker spaceChecker) {
53-
elementOf(context.getSource()).setCssProperty(spaceChecker.getMaximumSideSpaceProperty());
54-
elementOf(context.getSource()).setCssProperty(spaceChecker.getMaximumVerticalSpaceProperty());
55+
DominoElement<Element> source = elementOf(context.getSource());
56+
if (dui_menu.isAppliedTo(context.getSource())
57+
&& !source.hasAttribute("dui-position-fallback")) {
58+
source.setCssProperty(spaceChecker.getMaximumSideSpaceProperty());
59+
source.setCssProperty(spaceChecker.getMaximumVerticalSpaceProperty());
5560

56-
context.newSpaceChecker();
61+
context.newSpaceChecker();
5762

58-
return position(context);
63+
DropDirection position = position(context);
64+
source.setAttribute("dui-position-fallback", true);
65+
return position;
66+
}
67+
return MIDDLE_SCREEN.position(context);
5968
}
6069

6170
/** Constant <code>BEST_FIT_SIDE</code> */

domino-ui/src/main/java/org/dominokit/domino/ui/menu/direction/SpaceChecker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,11 @@ public double getSourceBottom() {
226226
}
227227

228228
public double getMaximumSideSpace() {
229-
return Math.max(getAvailableSpaceOnLeft(), getAvailableSpaceOnRight());
229+
return Math.min(sourceWidth, Math.max(getAvailableSpaceOnLeft(), getAvailableSpaceOnRight()));
230230
}
231231

232232
public double getMaximumVerticalSpace() {
233-
return Math.max(getAvailableSpaceOnTop(), getAvailableSpaceOnBottom());
233+
return Math.min(sourceHeight, Math.max(getAvailableSpaceOnTop(), getAvailableSpaceOnBottom()));
234234
}
235235

236236
public CssProperty getMaximumSideSpaceProperty() {

domino-ui/src/main/java/org/dominokit/domino/ui/popover/Popover.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,19 @@ public Popover setModal(boolean modal) {
234234
return this;
235235
}
236236

237+
@Override
238+
public ZIndexLayer getZIndexLayer() {
239+
if (isModal()) {
240+
return ZIndexLayer.Z_LAYER_3;
241+
}
242+
return super.getZIndexLayer();
243+
}
244+
245+
@Override
246+
public boolean incrementsZIndex() {
247+
return isModal();
248+
}
249+
237250
/**
238251
* {@inheritDoc}
239252
*

0 commit comments

Comments
 (0)