diff --git a/src/FilterBar.svelte b/src/FilterBar.svelte index 12efc24..7e90142 100644 --- a/src/FilterBar.svelte +++ b/src/FilterBar.svelte @@ -1,14 +1,19 @@ @@ -23,7 +28,27 @@ placement="start" header="Sélection des calendriers" > + ($generalToggle = !$generalToggle)}> + + Tous les calendriers + + + {#each Object.entries(calendarTree) as [toplevel, subtrees], i} - + {/each} + + diff --git a/src/FilterItem.svelte b/src/FilterItem.svelte index 46e5458..ec401ee 100644 --- a/src/FilterItem.svelte +++ b/src/FilterItem.svelte @@ -8,11 +8,12 @@ export let item = null; export let level = 1; + export let generalToggle = undefined; export let children = []; export let selected = []; - export let filtering = createTriState(CHECKED); - let subfiltering = createTriStates(CHECKED, Object.entries(children).length); + export let filtering = createTriState(UNCHECKED); + let subfiltering = createTriStates(UNCHECKED, Object.entries(children).length); let subselected = Array.from({ length: Object.entries(children).length }, _ => []); function isVal(val) { @@ -68,6 +69,13 @@ dispatch('change', { value: evt.detail.value }); } + if (generalToggle) { + generalToggle.subscribe(value => { + setTimeout(() => (value ? filtering.setChecked() : filtering.setUnchecked()), 0); + dispatch('change', { value: $filtering }); + }); + } + $: selected = $filtering === CHECKED ? [item, ...subselected.flat()] : subselected.flat();