diff --git a/src/UIShell/GlobalHeader/HeaderNavItem.svelte b/src/UIShell/GlobalHeader/HeaderNavItem.svelte index d8219efc..60376fcf 100644 --- a/src/UIShell/GlobalHeader/HeaderNavItem.svelte +++ b/src/UIShell/GlobalHeader/HeaderNavItem.svelte @@ -20,9 +20,10 @@ import { getContext } from "svelte"; const id = "ccs-" + Math.random().toString(36); - const ctx = getContext("HeaderNavMenu"); + const { selectedItems, updateSelectedItems, closeMenu } = + getContext("HeaderNavMenu"); - $: if (ctx) ctx.updateSelectedItems({ id, isSelected }); + $: updateSelectedItems({ id, isSelected });
  • @@ -43,6 +44,10 @@ on:keydown on:focus on:blur + on:blur="{() => { + const ids = Object.keys($selectedItems); + if (ids.indexOf(id) === ids.length - 1) closeMenu(); + }}" > {text} diff --git a/src/UIShell/GlobalHeader/HeaderNavMenu.svelte b/src/UIShell/GlobalHeader/HeaderNavMenu.svelte index 78c94858..67e1f9b2 100644 --- a/src/UIShell/GlobalHeader/HeaderNavMenu.svelte +++ b/src/UIShell/GlobalHeader/HeaderNavMenu.svelte @@ -14,19 +14,29 @@ /** Obtain a reference to the HTML anchor element */ export let ref = null; + export function toggle() { + expanded = !expanded; + } + import { setContext } from "svelte"; import { writable } from "svelte/store"; import ChevronDown16 from "../../icons/ChevronDown16.svelte"; const selectedItems = writable({}); + let menuRef = null; + setContext("HeaderNavMenu", { + selectedItems, updateSelectedItems(item) { selectedItems.update((_items) => ({ ..._items, [item.id]: item.isSelected, })); }, + closeMenu() { + expanded = false; + }, }); $: isCurrentSubmenu = @@ -34,13 +44,9 @@ { + if (!ref.contains(target)) { + expanded = false; } }}" /> @@ -48,10 +54,21 @@
  • { + if (e.key === 'Enter' || e.key === ' ') { expanded = !expanded; } }}" @@ -78,7 +95,12 @@ {text} -