feat(tournament-suggestions): implement save functionality for tournament suggestions
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 8m44s

This commit is contained in:
Torsten Schulz (local)
2026-09-04 12:47:25 +02:00
parent 6aeff309cd
commit c16883f381
4 changed files with 52 additions and 2 deletions

View File

@@ -32,7 +32,7 @@
</div>
<p v-if="suggestionError" class="suggestion-error">{{ suggestionError }}</p>
<ul v-if="filteredSuggestions.length" class="event-list suggestion-list">
<li v-for="suggestion in filteredSuggestions" :key="suggestion.id" class="event-item"><div class="suggestion-main"><strong>{{ suggestion.title }}</strong><span>{{ suggestion.eventDate || 'Termin offen' }}<template v-if="suggestion.location"> · {{ suggestion.location }}</template></span></div><a class="btn-secondary" :href="suggestion.sourceUrl" target="_blank" rel="noopener">Öffnen</a><template v-if="suggestion.status === 'dismissed'"><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, 'new')">Einblenden</button></template><template v-else><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, suggestion.status === 'reviewed' ? 'new' : 'reviewed')">{{ suggestion.status === 'reviewed' ? 'Als neu markieren' : 'Geprüft' }}</button><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, 'dismissed')">Ausblenden</button></template></li>
<li v-for="suggestion in filteredSuggestions" :key="suggestion.id" class="event-item"><div class="suggestion-main"><strong>{{ suggestion.title }}</strong><span>{{ suggestion.eventDate || 'Termin offen' }}<template v-if="suggestion.location"> · {{ suggestion.location }}</template></span></div><a class="btn-secondary" :href="suggestion.sourceUrl" target="_blank" rel="noopener">Öffnen</a><template v-if="suggestion.status === 'dismissed'"><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, 'new')">Einblenden</button></template><template v-else><button class="btn-secondary" @click="saveSuggestion(suggestion)">{{ suggestion.status === 'reviewed' ? 'Speichern' : 'Geprüft & speichern' }}</button><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, suggestion.status === 'reviewed' ? 'new' : 'reviewed')">{{ suggestion.status === 'reviewed' ? 'Als neu markieren' : 'Nur geprüft' }}</button><button class="btn-secondary" @click="updateSuggestionStatus(suggestion, 'dismissed')">Ausblenden</button></template></li>
</ul>
<p v-else class="empty-state compact">{{ suggestionSearch ? 'Keine passenden Turniervorschläge gefunden.' : 'Keine Turniervorschläge in dieser Ansicht. „Jetzt abrufen“ aktualisiert den Kalender.' }}</p>
</section>
@@ -1642,6 +1642,15 @@ export default {
try { await apiClient.patch(`/official-tournaments/${this.currentClub}/suggestions/${suggestion.id}`, { status }); await this.loadSuggestions(); }
catch (error) { this.suggestionError = getSafeErrorMessage(error, 'Der Vorschlag konnte nicht aktualisiert werden.'); }
},
async saveSuggestion(suggestion) {
this.suggestionError = '';
try {
const response = await apiClient.post(`/official-tournaments/${this.currentClub}/suggestions/${suggestion.id}/save`);
await Promise.all([this.loadSuggestions(), this.loadList()]);
this.uploadedId = String(response.data.id);
this.workspaceTab = 'saved';
} catch (error) { this.suggestionError = getSafeErrorMessage(error, 'Der Vorschlag konnte nicht gespeichert werden.'); }
},
buildParticipationMap(entries) {
const map = {};
for (const e of entries) {