zmiany uxowe w panelu
This commit is contained in:
43
static/js/categories_autosave.js
Normal file
43
static/js/categories_autosave.js
Normal file
@@ -0,0 +1,43 @@
|
||||
(function () {
|
||||
const $$ = (sel, ctx = document) => Array.from(ctx.querySelectorAll(sel));
|
||||
const $ = (sel, ctx = document) => ctx.querySelector(sel);
|
||||
|
||||
const saveCategories = async (listId, ids, names, listTitle) => {
|
||||
try {
|
||||
const res = await fetch(`/admin/edit_categories/${listId}/save`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ category_ids: ids })
|
||||
});
|
||||
const data = await res.json().catch(() => ({}));
|
||||
if (!res.ok || !data.ok) throw new Error(data.error || 'save_failed');
|
||||
|
||||
const cats = names.length ? names.join(', ') : 'brak';
|
||||
showToast(`Zapisano kategorie [${cats}] dla listy <b>${listTitle}</b>`, 'success');
|
||||
} catch (err) {
|
||||
console.error('Autosave error:', err);
|
||||
showToast(`Błąd zapisu kategorii dla listy <b>${listTitle}</b>`, 'danger');
|
||||
}
|
||||
};
|
||||
|
||||
const timers = new Map();
|
||||
const debounce = (key, fn, delay = 300) => {
|
||||
clearTimeout(timers.get(key));
|
||||
timers.set(key, setTimeout(fn, delay));
|
||||
};
|
||||
|
||||
$$('.form-select[name^="categories_"]').forEach(select => {
|
||||
const listId = select.getAttribute('data-list-id') || select.name.replace('categories_', '');
|
||||
const listTitle = select.closest('tr')?.querySelector('td a')?.textContent.trim() || `#${listId}`;
|
||||
|
||||
select.addEventListener('change', () => {
|
||||
const selectedOptions = Array.from(select.options).filter(o => o.selected);
|
||||
const ids = selectedOptions.map(o => o.value); // <-- ID
|
||||
const names = selectedOptions.map(o => o.textContent.trim());
|
||||
debounce(listId, () => saveCategories(listId, ids, names, listTitle));
|
||||
});
|
||||
});
|
||||
|
||||
const fallback = $('#fallback-save-btn');
|
||||
if (fallback) fallback.classList.add('d-none');
|
||||
})();
|
Reference in New Issue
Block a user