From fa199bdacf9d895912fef186176a6c35c1dc4424 Mon Sep 17 00:00:00 2001 From: Conor Mack Date: Thu, 27 Feb 2020 15:45:28 +0000 Subject: [PATCH] Updated way of handling selected items by using writable store and context --- .../src/Checkbox/Checkbox.svelte | 8 +-- .../src/Common/ItemStore.js | 54 ++++++++++++++++++ .../src/List/List.svelte | 47 +++++++-------- .../src/List/ListItem.svelte | 57 ++++++++++++------- .../src/Radiobutton/Radiobutton.svelte | 5 +- .../src/Test/props.js | 3 +- 6 files changed, 120 insertions(+), 54 deletions(-) create mode 100644 packages/materialdesign-components/src/Common/ItemStore.js diff --git a/packages/materialdesign-components/src/Checkbox/Checkbox.svelte b/packages/materialdesign-components/src/Checkbox/Checkbox.svelte index d02f2e83ad..2f8b55bcf2 100644 --- a/packages/materialdesign-components/src/Checkbox/Checkbox.svelte +++ b/packages/materialdesign-components/src/Checkbox/Checkbox.svelte @@ -18,18 +18,16 @@ let instance = null let checkbox = null - let context = null + let context = _bb.getContext("BBMD:input:context") onMount(() => { - context = _bb.getContext("BBMD:input:context") - if (!!checkbox) { instance = new MDCCheckbox(checkbox) instance.indeterminate = indeterminate if (context !== "list-item") { //TODO: Fix this connected to Formfield context issue - // let fieldStore = _bb.getContext("BBMD:field-element") - // fieldStore.setInput(instance) + let fieldStore = _bb.getContext("BBMD:field-element") + fieldStore.setInput(instance) } } }) diff --git a/packages/materialdesign-components/src/Common/ItemStore.js b/packages/materialdesign-components/src/Common/ItemStore.js new file mode 100644 index 0000000000..c523405dad --- /dev/null +++ b/packages/materialdesign-components/src/Common/ItemStore.js @@ -0,0 +1,54 @@ +import { writable } from "svelte/store"; + +function createItemsStore(componentOnSelect) { + const { subscribe, set, update } = writable([]); + + function addItem(item) { + update(items => { + return [...items, item] + }) + if (componentOnSelect) { + componentOnSelect(); + } + } + + function addSingleItem(item) { + set([item]) + if (componentOnSelect) { + componentOnSelect(); + } + } + + function removeItem(itemId) { + update(items => { + let index = getItemIdx(items, itemId) + items.splice(index, 1); + return items; + }) + if (componentOnSelect) { + componentOnSelect(); + } + } + + function clearItems() { + set([]); + if (componentOnSelect) { + componentOnSelect(); + } + } + + function getItemIdx(items, itemId) { + return items.findIndex(i => i._id === itemId); + } + + return { + subscribe, + addItem, + addSingleItem, + removeItem, + clearItems, + getItemIdx + } +} + +export default createItemsStore diff --git a/packages/materialdesign-components/src/List/List.svelte b/packages/materialdesign-components/src/List/List.svelte index 7f192348af..21cecbeada 100644 --- a/packages/materialdesign-components/src/List/List.svelte +++ b/packages/materialdesign-components/src/List/List.svelte @@ -1,10 +1,13 @@