| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // Select unit behavior
- export default function handleListUnitSelect() {
- const checkboxes = Array.from(document.querySelectorAll('.js-unit-checkbox'));
- const units = checkboxes.map((checkbox) => checkbox.closest('.js-unit'));
- const selectAllCheckbox = document.querySelector('.js-toggle-all-checkbox');
- if (checkboxes.length === 0 || !selectAllCheckbox) {
- return;
- }
- let lastCheckedIndex = null;
- checkboxes.forEach((checkbox, index) => {
- checkbox.addEventListener('click', (event) => {
- const isChecked = checkbox.checked;
- updateUnitSelection(units[index], isChecked);
- if (event.shiftKey && lastCheckedIndex !== null) {
- handleMultiSelect(checkboxes, units, index, lastCheckedIndex, isChecked);
- }
- lastCheckedIndex = index;
- });
- });
- selectAllCheckbox.addEventListener('change', () => {
- const isChecked = selectAllCheckbox.checked;
- checkboxes.forEach((checkbox) => (checkbox.checked = isChecked));
- units.forEach((unit) => updateUnitSelection(unit, isChecked));
- });
- }
- function updateUnitSelection(unit, isChecked) {
- unit.classList.toggle('selected', isChecked);
- }
- function handleMultiSelect(checkboxes, units, index, lastCheckedIndex, isChecked) {
- const rangeStart = Math.min(index, lastCheckedIndex);
- const rangeEnd = Math.max(index, lastCheckedIndex);
- for (let i = rangeStart; i <= rangeEnd; i++) {
- checkboxes[i].checked = isChecked;
- updateUnitSelection(units[i], isChecked);
- }
- }
|