update: autocomplete for suggestions too

This commit is contained in:
Nathan FONTEYNE 2026-07-08 15:27:34 +02:00
parent 6d8fe814b0
commit b17715eaff
7 changed files with 141 additions and 93 deletions

View file

@ -192,6 +192,8 @@ async function onAddSuggestion(e) {
try {
await api.post('/api/suggestions', { title, artist, youtubeUrl, description });
form.reset();
document.getElementById('suggestion-link-status').textContent = '';
if (suggestionAutocomplete) suggestionAutocomplete.close();
setAddSuggestionPanelOpen(false);
await loadSuggestions();
} catch (err) {
@ -208,6 +210,28 @@ function showError(message) {
document.getElementById('error').innerHTML = `<div class="error-banner">${escapeHtml(message)}</div>`;
}
let suggestionAutocomplete = null;
async function onSuggestionCandidateSelected(candidate) {
document.getElementById('suggestion-title-input').value = candidate.title;
document.getElementById('suggestion-artist-input').value = candidate.artist;
const statusEl = document.getElementById('suggestion-link-status');
statusEl.textContent = 'Recherche du lien YouTube…';
try {
const links = await api.get(
`/api/music-search/links?title=${encodeURIComponent(candidate.title)}&artist=${encodeURIComponent(candidate.artist)}`
);
const youtubeInput = document.getElementById('suggestion-youtube-input');
if (links.youtubeUrl && !youtubeInput.value) youtubeInput.value = links.youtubeUrl;
statusEl.textContent = links.youtubeUrl
? 'Lien YouTube trouvé automatiquement.'
: 'Aucun lien YouTube trouvé automatiquement — à saisir manuellement.';
} catch (err) {
statusEl.textContent = '';
}
}
(async function init() {
me = await initNav('suggestions');
document.getElementById('add-suggestion-form').addEventListener('submit', onAddSuggestion);
@ -215,5 +239,10 @@ function showError(message) {
const isOpen = document.getElementById('add-suggestion-panel').style.display !== 'none';
setAddSuggestionPanelOpen(!isOpen);
});
suggestionAutocomplete = createTitleAutocomplete({
inputId: 'suggestion-title-input',
dropdownId: 'suggestion-title-dropdown',
onSelect: onSuggestionCandidateSelected,
});
await loadSuggestions();
})();