feat(side-nav): dispatch open, close, click:overlay events

This commit is contained in:
Eric Y Liu 2021-05-02 15:23:34 -07:00
commit 6d805e73a8
4 changed files with 27 additions and 4 deletions

View file

@ -3216,7 +3216,11 @@ None.
### Events ### Events
None. | Event name | Type | Detail |
| :------------ | :--------- | :--------------- |
| open | dispatched | <code>any</code> |
| close | dispatched | <code>any</code> |
| click:overlay | dispatched | <code>any</code> |
## `SideNavDivider` ## `SideNavDivider`

View file

@ -8401,7 +8401,11 @@
} }
], ],
"slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }], "slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
"events": [], "events": [
{ "type": "dispatched", "name": "open", "detail": "any" },
{ "type": "dispatched", "name": "close", "detail": "any" },
{ "type": "dispatched", "name": "click:overlay", "detail": "any" }
],
"typedefs": [], "typedefs": [],
"rest_props": { "type": "Element", "name": "nav" } "rest_props": { "type": "Element", "name": "nav" }
}, },

View file

@ -1,4 +1,10 @@
<script> <script>
/**
* @event {any} open
* @event {any} close
* @event {any} click:overlay
*/
/** Set to `true` to use the fixed variant */ /** Set to `true` to use the fixed variant */
export let fixed = false; export let fixed = false;
@ -11,9 +17,13 @@
/** Set to `true` to toggle the expanded state */ /** Set to `true` to toggle the expanded state */
export let isOpen = false; export let isOpen = false;
import { onMount } from "svelte"; import { onMount, createEventDispatcher } from "svelte";
import { shouldRenderHamburgerMenu } from "../navStore"; import { shouldRenderHamburgerMenu } from "../navStore";
const dispatch = createEventDispatcher();
$: dispatch(isOpen ? "open" : "close");
onMount(() => { onMount(() => {
shouldRenderHamburgerMenu.set(true); shouldRenderHamburgerMenu.set(true);
return () => shouldRenderHamburgerMenu.set(false); return () => shouldRenderHamburgerMenu.set(false);
@ -23,6 +33,7 @@
{#if !fixed} {#if !fixed}
<div <div
on:click="{() => { on:click="{() => {
dispatch('click:overlay');
isOpen = false; isOpen = false;
}}" }}"
class:bx--side-nav__overlay="{true}" class:bx--side-nav__overlay="{true}"

View file

@ -23,6 +23,10 @@ export interface SideNavProps
export default class SideNav extends SvelteComponentTyped< export default class SideNav extends SvelteComponentTyped<
SideNavProps, SideNavProps,
{}, {
open: CustomEvent<any>;
close: CustomEvent<any>;
["click:overlay"]: CustomEvent<any>;
},
{ default: {} } { default: {} }
> {} > {}