Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 573d5c12e5 |
@@ -2,8 +2,8 @@
|
|||||||
<div class="select-filters">
|
<div class="select-filters">
|
||||||
<div class="widget-select category">
|
<div class="widget-select category">
|
||||||
<label for="tag-filter" class="visually-hidden">Kategorie wählen</label>
|
<label for="tag-filter" class="visually-hidden">Kategorie wählen</label>
|
||||||
<select id="tag-filter">
|
<select id="tag-filter" placeholder="Kategorie wählen" autocomplete="off">
|
||||||
<option value="all" data-placeholder="true">Kategorie wählen</option>
|
<option value="">Kategorie wählen</option>
|
||||||
{% for tag in tagButtons|default([]) %}
|
{% for tag in tagButtons|default([]) %}
|
||||||
<option value="tag-{{ tag.id }}">{{ tag.title }} ({{ tag.count }})</option>
|
<option value="tag-{{ tag.id }}">{{ tag.title }} ({{ tag.count }})</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
<div class="widget-select places">
|
<div class="widget-select places">
|
||||||
<label for="location-filter" class="visually-hidden">Ort wählen</label>
|
<label for="location-filter" class="visually-hidden">Ort wählen</label>
|
||||||
<select id="location-filter">
|
<select id="location-filter" placeholder="Ort wählen" autocomplete="off">
|
||||||
<option value="all" data-placeholder="true">Ort wählen</option>
|
<option value="">Ort wählen</option>
|
||||||
{% for location in locations|default([]) %}
|
{% for location in locations|default([]) %}
|
||||||
<option value="location-{{ location.id }}">{{ location.title }} ({{ location.count }})</option>
|
<option value="location-{{ location.id }}">{{ location.title }} ({{ location.count }})</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
|
|
||||||
<div class="widget-select org">
|
<div class="widget-select org">
|
||||||
<label for="org-filter" class="visually-hidden">Veranstalter wählen</label>
|
<label for="org-filter" class="visually-hidden">Veranstalter wählen</label>
|
||||||
<select id="org-filter">
|
<select id="org-filter" placeholder="Veranstalter wählen" autocomplete="off">
|
||||||
<option value="all" data-placeholder="true">Veranstalter wählen</option>
|
<option value="">Veranstalter wählen</option>
|
||||||
{% for organization in organizations|default([]) %}
|
{% for organization in organizations|default([]) %}
|
||||||
<option value="org-{{ organization.id }}">{{ organization.title }} ({{ organization.count }})</option>
|
<option value="org-{{ organization.id }}">{{ organization.title }} ({{ organization.count }})</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
|
|
||||||
const animationMs = 220;
|
const animationMs = 220;
|
||||||
let hideTimers = new WeakMap();
|
let hideTimers = new WeakMap();
|
||||||
let currentFilter = { type: 'all', value: 'all' };
|
let currentFilter = { type: 'all', value: '' };
|
||||||
let suppressedChangeEvents = 0;
|
let suppressedChangeEvents = 0;
|
||||||
|
|
||||||
const initTomSelect = (selectElement) => {
|
const initTomSelect = (selectElement) => {
|
||||||
@@ -123,7 +123,13 @@
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new window.TomSelect(selectElement);
|
return new window.TomSelect(selectElement, {
|
||||||
|
create: true,
|
||||||
|
sortField: {
|
||||||
|
field: 'text',
|
||||||
|
direction: 'asc',
|
||||||
|
},
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const tagTom = initTomSelect(tagSelect);
|
const tagTom = initTomSelect(tagSelect);
|
||||||
@@ -185,9 +191,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const setActiveControl = ({ type, value }) => {
|
const setActiveControl = ({ type, value }) => {
|
||||||
const hasActiveTag = type === 'tag' && value !== 'all';
|
const hasActiveTag = type === 'tag' && Boolean(value);
|
||||||
const hasActiveLocation = type === 'location' && value !== 'all';
|
const hasActiveLocation = type === 'location' && Boolean(value);
|
||||||
const hasActiveOrg = type === 'org' && value !== 'all';
|
const hasActiveOrg = type === 'org' && Boolean(value);
|
||||||
|
|
||||||
tagWidget?.classList.toggle('active', hasActiveTag);
|
tagWidget?.classList.toggle('active', hasActiveTag);
|
||||||
locationWidget?.classList.toggle('active', hasActiveLocation);
|
locationWidget?.classList.toggle('active', hasActiveLocation);
|
||||||
@@ -204,7 +210,7 @@
|
|||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
const matches = (eventItem, filterState) => {
|
const matches = (eventItem, filterState) => {
|
||||||
if (filterState.value === 'all') {
|
if (!filterState.value || filterState.type === 'all') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,10 +226,6 @@
|
|||||||
return parseIdList(eventItem.dataset.org).includes(filterState.value);
|
return parseIdList(eventItem.dataset.org).includes(filterState.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filterState.type === 'all') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -275,12 +277,12 @@
|
|||||||
|
|
||||||
const selectedValue = tagSelect.value;
|
const selectedValue = tagSelect.value;
|
||||||
|
|
||||||
setSelectValue(locationSelect, locationTom, 'all');
|
setSelectValue(locationSelect, locationTom, '');
|
||||||
setSelectValue(orgSelect, orgTom, 'all');
|
setSelectValue(orgSelect, orgTom, '');
|
||||||
|
|
||||||
applyFilter(
|
applyFilter(
|
||||||
selectedValue === 'all'
|
!selectedValue
|
||||||
? { type: 'all', value: 'all' }
|
? { type: 'all', value: '' }
|
||||||
: { type: 'tag', value: selectedValue.replace('tag-', '') },
|
: { type: 'tag', value: selectedValue.replace('tag-', '') },
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -292,12 +294,12 @@
|
|||||||
|
|
||||||
const selectedValue = locationSelect.value;
|
const selectedValue = locationSelect.value;
|
||||||
|
|
||||||
setSelectValue(tagSelect, tagTom, 'all');
|
setSelectValue(tagSelect, tagTom, '');
|
||||||
setSelectValue(orgSelect, orgTom, 'all');
|
setSelectValue(orgSelect, orgTom, '');
|
||||||
|
|
||||||
applyFilter(
|
applyFilter(
|
||||||
selectedValue === 'all'
|
!selectedValue
|
||||||
? { type: 'all', value: 'all' }
|
? { type: 'all', value: '' }
|
||||||
: { type: 'location', value: selectedValue.replace('location-', '') },
|
: { type: 'location', value: selectedValue.replace('location-', '') },
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -309,22 +311,22 @@
|
|||||||
|
|
||||||
const selectedValue = orgSelect.value;
|
const selectedValue = orgSelect.value;
|
||||||
|
|
||||||
setSelectValue(tagSelect, tagTom, 'all');
|
setSelectValue(tagSelect, tagTom, '');
|
||||||
setSelectValue(locationSelect, locationTom, 'all');
|
setSelectValue(locationSelect, locationTom, '');
|
||||||
|
|
||||||
applyFilter(
|
applyFilter(
|
||||||
selectedValue === 'all'
|
!selectedValue
|
||||||
? { type: 'all', value: 'all' }
|
? { type: 'all', value: '' }
|
||||||
: { type: 'org', value: selectedValue.replace('org-', '') },
|
: { type: 'org', value: selectedValue.replace('org-', '') },
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
resetButton?.addEventListener('click', () => {
|
resetButton?.addEventListener('click', () => {
|
||||||
setSelectValue(tagSelect, tagTom, 'all');
|
setSelectValue(tagSelect, tagTom, '');
|
||||||
setSelectValue(locationSelect, locationTom, 'all');
|
setSelectValue(locationSelect, locationTom, '');
|
||||||
setSelectValue(orgSelect, orgTom, 'all');
|
setSelectValue(orgSelect, orgTom, '');
|
||||||
|
|
||||||
applyFilter({ type: 'all', value: 'all' });
|
applyFilter({ type: 'all', value: '' });
|
||||||
});
|
});
|
||||||
|
|
||||||
applyFilter(currentFilter);
|
applyFilter(currentFilter);
|
||||||
|
|||||||
Reference in New Issue
Block a user