55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
|
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
|