refactor: move import to module level and extract event handler
- Move ProgressType import to top-level in auth.py - Extract suggestion link click handler into attachSuggestionLinkEvents() function - Reuse handler after search results load
This commit is contained in:
@@ -665,6 +665,60 @@
|
||||
}
|
||||
}
|
||||
|
||||
function attachSuggestionLinkEvents() {
|
||||
document.querySelectorAll('.suggestion-link').forEach(link => {
|
||||
link.addEventListener('click', async (e) => {
|
||||
e.preventDefault();
|
||||
const providerKey = e.target.dataset.providerKey;
|
||||
const folder = e.target.dataset.folder;
|
||||
|
||||
if (!providerKey) {
|
||||
showToast('No provider key available for this suggestion', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
const input = document.querySelector(`.folder-input[data-folder="${folder}"]`);
|
||||
const resolveBtn = document.querySelector(`.resolve-btn[data-folder="${folder}"]`);
|
||||
const item = document.querySelector(`.folder-item[data-folder="${folder}"]`);
|
||||
const errEl = document.querySelector(`.folder-error[data-folder="${folder}"]`);
|
||||
|
||||
if (!input || !resolveBtn || !item) return;
|
||||
|
||||
input.value = providerKey;
|
||||
resolveBtn.disabled = false;
|
||||
|
||||
item.classList.add('resolving');
|
||||
resolveBtn.disabled = true;
|
||||
resolveBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
|
||||
|
||||
try {
|
||||
const result = await resolveFolder(folder, providerKey);
|
||||
|
||||
if (result.status === 'success') {
|
||||
showToast(`Added: ${result.message.replace('Successfully resolved and added series: ', '')}`, 'success');
|
||||
item.classList.add('resolved');
|
||||
setTimeout(() => {
|
||||
item.remove();
|
||||
checkEmptyList();
|
||||
}, 400);
|
||||
} else {
|
||||
errEl.textContent = result.detail || result.message || 'Failed to resolve';
|
||||
errEl.classList.add('visible');
|
||||
resolveBtn.disabled = false;
|
||||
resolveBtn.innerHTML = 'Resolve';
|
||||
}
|
||||
} catch (err) {
|
||||
errEl.textContent = 'Server error. Please try again.';
|
||||
errEl.classList.add('visible');
|
||||
resolveBtn.disabled = false;
|
||||
resolveBtn.innerHTML = 'Resolve';
|
||||
} finally {
|
||||
item.classList.remove('resolving');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function attachFolderEvents() {
|
||||
// Input enable/disable resolve button
|
||||
document.querySelectorAll('.folder-input').forEach(input => {
|
||||
@@ -779,6 +833,7 @@
|
||||
// Keep search row visible for additional searches
|
||||
btn.classList.remove('searching');
|
||||
btn.innerHTML = '<i class="fas fa-search"></i> Search Again';
|
||||
attachSuggestionLinkEvents();
|
||||
} catch (err) {
|
||||
showToast('Search failed', 'error');
|
||||
btn.classList.remove('searching');
|
||||
@@ -790,59 +845,7 @@
|
||||
});
|
||||
|
||||
// Suggestion link click - populate input and resolve
|
||||
document.querySelectorAll('.suggestion-link').forEach(link => {
|
||||
link.addEventListener('click', async (e) => {
|
||||
e.preventDefault();
|
||||
const providerKey = e.target.dataset.providerKey;
|
||||
const folder = e.target.dataset.folder;
|
||||
|
||||
if (!providerKey) {
|
||||
showToast('No provider key available for this suggestion', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
const input = document.querySelector(`.folder-input[data-folder="${folder}"]`);
|
||||
const resolveBtn = document.querySelector(`.resolve-btn[data-folder="${folder}"]`);
|
||||
const item = document.querySelector(`.folder-item[data-folder="${folder}"]`);
|
||||
const errEl = document.querySelector(`.folder-error[data-folder="${folder}"]`);
|
||||
|
||||
if (!input || !resolveBtn || !item) return;
|
||||
|
||||
// Populate input and enable button
|
||||
input.value = providerKey;
|
||||
resolveBtn.disabled = false;
|
||||
|
||||
// Trigger resolve
|
||||
item.classList.add('resolving');
|
||||
resolveBtn.disabled = true;
|
||||
resolveBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
|
||||
|
||||
try {
|
||||
const result = await resolveFolder(folder, providerKey);
|
||||
|
||||
if (result.status === 'success') {
|
||||
showToast(`Added: ${result.message.replace('Successfully resolved and added series: ', '')}`, 'success');
|
||||
item.classList.add('resolved');
|
||||
setTimeout(() => {
|
||||
item.remove();
|
||||
checkEmptyList();
|
||||
}, 400);
|
||||
} else {
|
||||
errEl.textContent = result.detail || result.message || 'Failed to resolve';
|
||||
errEl.classList.add('visible');
|
||||
resolveBtn.disabled = false;
|
||||
resolveBtn.innerHTML = 'Resolve';
|
||||
}
|
||||
} catch (err) {
|
||||
errEl.textContent = 'Server error. Please try again.';
|
||||
errEl.classList.add('visible');
|
||||
resolveBtn.disabled = false;
|
||||
resolveBtn.innerHTML = 'Resolve';
|
||||
} finally {
|
||||
item.classList.remove('resolving');
|
||||
}
|
||||
});
|
||||
});
|
||||
attachSuggestionLinkEvents();
|
||||
}
|
||||
|
||||
function checkEmptyList() {
|
||||
|
||||
Reference in New Issue
Block a user