UNPKG

svelte-ux

Version:

- Increment version in `package.json` and commit as `Version bump to x.y.z` - `npm run publish`

63 lines (62 loc) 2.2 kB
import { derived, writable } from 'svelte/store'; import uniqueStore from './uniqueStore'; export default function selectionStore(props = {}) { var _a, _b, _c; const selected = uniqueStore((_a = props.initial) !== null && _a !== void 0 ? _a : []); const all = writable((_b = props.all) !== null && _b !== void 0 ? _b : []); const single = (_c = props.single) !== null && _c !== void 0 ? _c : false; return derived([selected, all], ([$selected, $all]) => { var _a; function isSelected(value) { return $selected.has(value); } function toggleSelected(value) { selected.update(($selected) => { if ($selected.has(value)) { // Remove return new Set([...$selected].filter((v) => v != value)); } else if (single) { // Replace return new Set([value]); } else { // Add return $selected.add(value); } }); } function isAllSelected() { return $all.every((v) => $selected.has(v)); } function isAnySelected() { return $all.some((v) => $selected.has(v)); } function toggleAll() { let values; if (isAllSelected()) { // Deselect all (within current `all`, for example page/filtered result) values = [...$selected].filter((v) => !$all.includes(v)); } else { // Select all (`new Set()` will dedupe) values = [...$selected, ...$all]; } selected.set(new Set(values)); } function clear() { selected.set(new Set()); } const selectedArr = [...$selected.values()]; return { selected: single ? (_a = selectedArr[0]) !== null && _a !== void 0 ? _a : null : selectedArr, toggleSelected, isSelected, toggleAll, isAllSelected, isAnySelected, clear, all, }; }); }