mirror of
https://github.com/appwrite/console.git
synced 2026-06-06 19:27:48 +00:00
fix: menu and submenu state management.
This commit is contained in:
@@ -1,23 +1,39 @@
|
||||
<script lang="ts">
|
||||
import { setContext, onMount } from 'svelte';
|
||||
import { Card } from '@appwrite.io/pink-svelte';
|
||||
import { createMenubar, melt } from '@melt-ui/svelte';
|
||||
import { menuOpen } from '$lib/components/menu/store';
|
||||
import { activeMenuId, menuOpen } from '$lib/components/menu/store';
|
||||
|
||||
const menuId = Math.random().toString(36).slice(2);
|
||||
const {
|
||||
elements: { menubar },
|
||||
builders: { createMenu }
|
||||
} = createMenubar();
|
||||
|
||||
const {
|
||||
elements: { trigger: trigger, menu: menu, separator: separator },
|
||||
states: { open }
|
||||
elements: { trigger, menu, separator },
|
||||
states: { open },
|
||||
builders // for submenu for same toggle state
|
||||
} = createMenu();
|
||||
|
||||
function toggle() {
|
||||
open.update((state) => !state);
|
||||
}
|
||||
|
||||
open.subscribe((state) => {
|
||||
if (state) activeMenuId.set(menuId);
|
||||
else activeMenuId.update((current) => (current === menuId ? null : current));
|
||||
});
|
||||
|
||||
onMount(() => {
|
||||
return activeMenuId.subscribe((id) => {
|
||||
if (id !== menuId) open.set(false);
|
||||
});
|
||||
});
|
||||
|
||||
$: menuOpen.set($open);
|
||||
|
||||
setContext('menuBuilder', builders);
|
||||
</script>
|
||||
|
||||
<div use:melt={$menubar}>
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { writable } from 'svelte/store';
|
||||
|
||||
export const menuOpen = writable(false);
|
||||
|
||||
export const activeMenuId = writable<string | null>(null);
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { getContext } from 'svelte';
|
||||
import { melt } from '@melt-ui/svelte';
|
||||
import { Card } from '@appwrite.io/pink-svelte';
|
||||
import { createMenubar, melt } from '@melt-ui/svelte';
|
||||
|
||||
const {
|
||||
builders: { createMenu }
|
||||
} = createMenubar();
|
||||
|
||||
const {
|
||||
elements: { separator: separator },
|
||||
builders: { createSubmenu: createSubmenu }
|
||||
} = createMenu();
|
||||
// get parent builder for toggle state!
|
||||
const builders = getContext('menuBuilder');
|
||||
const { createSubmenu, separator } = builders;
|
||||
|
||||
const {
|
||||
elements: { subMenu: subMenu, subTrigger: subTrigger }
|
||||
|
||||
Reference in New Issue
Block a user