Completed menu component

This commit is contained in:
Conor Mack 2020-03-02 14:43:06 +00:00
parent 80a71ff671
commit eb9e7c02fc
6 changed files with 31 additions and 41 deletions

View File

@ -17,33 +17,24 @@
export let onSelect = selectedItems => {}
export let singleSelection = false
export let variant = "two-line"
export let variant = "one-line"
export let inputElement = null
let selectedItemsStore
let role = "listbox"
function createOrAcceptItemStore() {
let store = _bb.getContext("BBMD:list:selectItemStore")
if (!!store) {
selectedItemsStore = store
} else {
onMount(() => {
let ctx = getContext("BBMD:list:context")
selectedItemsStore = createItemsStore(() => onSelect($selectedItemsStore))
_bb.setContext("BBMD:list:selectItemStore", selectedItemsStore)
}
}
onMount(() => {
createOrAcceptItemStore()
if (!_bb.getContext("BBMD:list:props")) {
_bb.setContext("BBMD:list:props", {
inputElement,
variant,
singleSelection,
})
}
if (!!list) {
if (!inputElement) {

View File

@ -7,8 +7,6 @@
const cb = new ClassBuilder("list-item")
export let onClick = item => {}
let _id
let listProps = null
@ -24,6 +22,7 @@
export let trailingIcon = ""
export let selected = false
export let disabled = false
export let dividerAfter = false
let role = "option"
@ -110,3 +109,6 @@
</span>
{/if}
</li>
{#if dividerAfter}
<li class="mdc-list-divider" role="separator" />
{/if}

View File

@ -6,7 +6,6 @@
export let onSelect = selectedItems => {}
export let singleSelection = true
export let width = "400px"
export let open = true
export let useFixedPosition = false
@ -17,21 +16,16 @@
export let _bb
let menu = null
let menuList = null
let instance = null
let selectedItemsStore
function createOrAcceptItemStore() {
let store = _bb.getContext("BBMD:list:selectItemStore")
if (!!store) {
selectedItemsStore = store
} else {
onMount(() => {
_bb.setContext("BBMD:list:context", "menu")
_bb.setContext("BBMD:list:props", { singleSelection: true })
selectedItemsStore = createItemsStore(() => onSelect($selectedItemsStore))
_bb.setContext("BBMD:list:selectItemStore", selectedItemsStore)
}
}
onMount(() => {
createOrAcceptItemStore()
if (!!menu) {
instance = new MDCMenu(menu)
@ -43,8 +37,9 @@
instance.setAbsolutePosition(x | 0, y | 0)
}
}
setContext("BBMD:list:context", "menu")
})
$: menuList && _bb.attachChildren(menuList)
</script>
{#if useFixedPosition || useAbsolutePosition}
@ -52,17 +47,17 @@
bind:this={menu}
class="mdc-menu mdc-menu-surface"
style={`width: ${width}`}>
<List {singleSelection} {_bb} />
<ul bind:this={menuList} class="mdc-list" role="menu" />
</div>
{:else}
<div class="mdc-menu-surface--anchor">
<!-- Will automatically anchor to slotted element -->
<!--TODO: Will automatically anchor to slotted element. Not sure how this would be achieved with Budibase though -->
<slot />
<div
bind:this={menu}
class="mdc-menu mdc-menu-surface"
style={`width: ${width}`}>
<List {singleSelection} {_bb} />
<ul bind:this={menuList} class="mdc-list" role="menu" />
</div>
</div>
{/if}

View File

@ -1,2 +1,3 @@
@import "@material/list/mdc-list.scss";
@import "@material/menu-surface/mdc-menu-surface.scss";
@import "@material/menu/mdc-menu.scss";

View File

@ -14,9 +14,9 @@
Radiobuttongroup,
Datatable,
CustomersIndexTable,
List,
Icon,
Menu,
List,
} = props
let currentComponent
@ -36,8 +36,8 @@
Icon,
Datatable,
CustomersIndexTable,
List,
Menu,
List,
],
},
}

View File

@ -119,7 +119,7 @@ export const props = {
_component: "@budibase/materialdesign-components/List",
variant: "two-line",
singleSelection: false,
onSelect: selected => console.log(selected),
onSelect: selected => console.log("LIST SELECT", selected),
_children: [
{
_component: "@budibase/materialdesign-components/ListItem",
@ -148,6 +148,7 @@ export const props = {
},
Menu: {
_component: "@budibase/materialdesign-components/Menu",
onSelect: items => console.log("MENU SELECT", items),
_children: [
{
_component: "@budibase/materialdesign-components/ListItem",
@ -168,5 +169,5 @@ export const props = {
value: 2,
},
],
}
},
}