fix: keep search controls visible and enable suggestion click-to-resolve
- Search input and button now stay visible after Search Again for unlimited searches - Clicking a suggestion populates provider key and triggers resolve, card disappears - Added data-provider-key attribute to suggestion links for click handling
This commit is contained in:
@@ -594,13 +594,13 @@
|
||||
? folder.search_suggestions.map(s => `
|
||||
<div class="suggestion-item">
|
||||
<i class="fas fa-link"></i>
|
||||
<a href="${s.link}" class="suggestion-link" target="_blank">${s.name || s.title}</a>
|
||||
<a href="#" class="suggestion-link" data-provider-key="${s.provider_key || s.key || ''}" data-folder="${folder.folder_name}">${s.name || s.title}</a>
|
||||
</div>
|
||||
`).join('')
|
||||
: '<div class="no-suggestions"><i class="fas fa-info-circle"></i> No suggestions found</div>';
|
||||
|
||||
const searchAgainBtn = (folder.search_suggestions && folder.search_suggestions.length === 0)
|
||||
? `<div class="search-again-row">
|
||||
// Always show search row so user can search multiple times
|
||||
const searchAgainBtn = `<div class="search-again-row">
|
||||
<input type="text" class="search-again-input"
|
||||
placeholder="Custom search..."
|
||||
value="${folder.title || ''}"
|
||||
@@ -608,8 +608,7 @@
|
||||
<button class="search-again-btn" data-folder="${folder.folder_name}">
|
||||
<i class="fas fa-search"></i> Search Again
|
||||
</button>
|
||||
</div>`
|
||||
: '';
|
||||
</div>`;
|
||||
|
||||
return `
|
||||
<div class="folder-item" data-folder="${folder.folder_name}">
|
||||
@@ -767,22 +766,79 @@
|
||||
suggestionsEl.innerHTML = result.search_suggestions.map(s => `
|
||||
<div class="suggestion-item">
|
||||
<i class="fas fa-link"></i>
|
||||
<a href="${s.link}" class="suggestion-link" target="_blank">${s.name || s.title}</a>
|
||||
<a href="#" class="suggestion-link" data-provider-key="${s.provider_key || s.key || ''}" data-folder="${folder}">${s.name || s.title}</a>
|
||||
</div>
|
||||
`).join('');
|
||||
} else {
|
||||
suggestionsEl.innerHTML = '<div class="no-suggestions"><i class="fas fa-info-circle"></i> No suggestions found</div>';
|
||||
}
|
||||
// Remove the search row since we now have suggestions (or none)
|
||||
const searchRow = item.querySelector('.search-again-row');
|
||||
if (searchRow) searchRow.remove();
|
||||
// Keep search row visible for additional searches
|
||||
btn.classList.remove('searching');
|
||||
btn.innerHTML = '<i class="fas fa-search"></i> Search Again';
|
||||
} catch (err) {
|
||||
showToast('Search failed', 'error');
|
||||
btn.classList.remove('searching');
|
||||
btn.innerHTML = '<i class="fas fa-search"></i> Search Again';
|
||||
} finally {
|
||||
btn.classList.remove('searching');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 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');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function checkEmptyList() {
|
||||
|
||||
Reference in New Issue
Block a user