diff --git a/src/App.svelte b/src/App.svelte
index 79ffcc8..f4fd723 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -16,7 +16,7 @@
const modal = writable(null);
let calendar;
- let options = {
+ let options = writable({
initialView: 'timeGridWeek',
plugins: [timeGridPlugin, dayGridPlugin, rrulePlugin, listPlugin, adaptivePlugin],
locale: frLocale,
@@ -33,36 +33,44 @@
modal.set(bind(EventDetails, { event: info.event }));
},
events: []
- };
+ });
let selectedCalendars;
+ let updateTimer;
- async function reloadEvents(selectedCalendars, options) {
+ async function reloadEvents(selectedCalendars) {
const evts = await refreshEvents(selectedCalendars);
return evts.flat();
}
+ function updateEvents(calendars) {
+ return reloadEvents(calendars).then(events => {
+ options.update(opts => ({
+ ...opts,
+ events
+ }));
+ });
+ }
+
onMount(async () => {
- options.events = await reloadEvents(selectedCalendars, options);
- options = { ...options };
+ const events = await reloadEvents(selectedCalendars);
+ options.update(opts => ({
+ ...opts,
+ events
+ }));
});
- $: {
- /*reloadEvents(selectedCalendars, options).then(events => {
- options.events = events;
- options = { ...options };
- });*/
- }
+ $: updateEvents(selectedCalendars);
Calendrier de la vie étudiante à l'ENS
diff --git a/src/FilterBar.svelte b/src/FilterBar.svelte
index b979e88..65e7265 100644
--- a/src/FilterBar.svelte
+++ b/src/FilterBar.svelte
@@ -1,14 +1,14 @@
{#each Object.entries(calendarTree) as [toplevel, subtrees], i}
-
+
{/each}
diff --git a/src/FilterItem.svelte b/src/FilterItem.svelte
index b603df8..0e6e60a 100644
--- a/src/FilterItem.svelte
+++ b/src/FilterItem.svelte
@@ -11,6 +11,7 @@
export let selected = [];
export let filtering = createTriState(CHECKED);
let subfiltering = createTriStates(CHECKED, Object.entries(children).length);
+ let subselected = Array.from({length: Object.entries(children).length}, e => []);
function isVal(val) {
return function (other) {
@@ -33,7 +34,6 @@
}
subfiltering.subscribe(subvalues => {
- console.log('new subvalues', subvalues);
if (areAllChecked(subvalues) && $filtering !== CHECKED) {
filtering.setChecked();
} else if (areAllUnchecked(subvalues) && $filtering !== UNCHECKED) {
@@ -45,7 +45,6 @@
if (subfiltering.length > 0) {
filtering.subscribe(value => {
- console.log(item, value);
switch (value) {
case CHECKED:
subfiltering.updateAll(_ => CHECKED);
@@ -63,6 +62,7 @@
dispatch('change', { value: evt.detail.value });
}
+ $: selected = $filtering === CHECKED ? [item, ...subselected.flat()] : subselected.flat();
{#if item != null}
@@ -72,9 +72,9 @@
{#each Object.entries(children) as [toplevel, subchildren], i}
{#if subchildren}
-
+
{:else}
-
+
{/if}
{/each}
diff --git a/src/TriStateCheckbox.svelte b/src/TriStateCheckbox.svelte
index 002d29a..2de88fc 100644
--- a/src/TriStateCheckbox.svelte
+++ b/src/TriStateCheckbox.svelte
@@ -15,7 +15,7 @@
if (node) {
if (state === CHECKED) {
checkedValue = true;
- } else if (state === UNCHECKED) {
+ } else {
checkedValue = false;
}
diff --git a/src/calendar.js b/src/calendar.js
index 4a6570a..e96de0b 100644
--- a/src/calendar.js
+++ b/src/calendar.js
@@ -29,7 +29,13 @@ export const calendarTree = {
"Club réseau": {},
"hackENS": {},
},
- "COF": {},
+ "COF": {
+ "BDA": {
+ "Philharmonie": {},
+ },
+ "AG": {},
+ },
+ "BDS": {},
"Délégation Générale": {},
};