From 3308fd4116719c0d9f032fa13e469086bd26f0c1 Mon Sep 17 00:00:00 2001 From: Moritz Bischof Date: Mon, 3 May 2021 19:22:37 +0200 Subject: [PATCH] extract ContextMenuInner.svelte --- src/ContextMenu/ContextMenu.svelte | 121 +++------------------- src/ContextMenu/ContextMenuInner.svelte | 126 +++++++++++++++++++++++ src/ContextMenu/ContextMenuOption.svelte | 9 +- 3 files changed, 146 insertions(+), 110 deletions(-) create mode 100644 src/ContextMenu/ContextMenuInner.svelte diff --git a/src/ContextMenu/ContextMenu.svelte b/src/ContextMenu/ContextMenu.svelte index 73f6e581..7c157c8a 100644 --- a/src/ContextMenu/ContextMenu.svelte +++ b/src/ContextMenu/ContextMenu.svelte @@ -1,4 +1,6 @@ - + diff --git a/src/ContextMenu/ContextMenuInner.svelte b/src/ContextMenu/ContextMenuInner.svelte new file mode 100644 index 00000000..9376100c --- /dev/null +++ b/src/ContextMenu/ContextMenuInner.svelte @@ -0,0 +1,126 @@ + + + diff --git a/src/ContextMenu/ContextMenuOption.svelte b/src/ContextMenu/ContextMenuOption.svelte index 1c9dbd91..f2452a8d 100644 --- a/src/ContextMenu/ContextMenuOption.svelte +++ b/src/ContextMenu/ContextMenuOption.svelte @@ -59,6 +59,7 @@ const ctxRadioGroup = getContext("ContextMenuRadioGroup"); const rootMenuPosition = ctx.position; + const rootMenuDimensions = ctx.dimensions; // "moderate-01" duration (ms) from Carbon motion recommended for small expansion, short distance movements const moderate01 = 150; @@ -120,11 +121,15 @@ $: ctx.setPopup(submenuOpen); $: if (submenuOpen) { const rootMenuX = $rootMenuPosition[0]; + const rootMenuWidth = $rootMenuDimensions[0]; const { width, y } = ref.getBoundingClientRect(); - let x = rootMenuX + width; - if (window.innerWidth - rootMenuX < width) { + let x; + if (window.innerWidth < rootMenuX + rootMenuWidth + width) { + // submenu is too far to the right, so we display it on the left side x = rootMenuX - width; + } else { + x = rootMenuX + width; } submenuPosition = [x, y];