Enhance diary date activity service and diary view with improved drawing data handling

This commit updates the `DiaryDateActivityService` to retrieve all images associated with predefined activities and parse their drawing data, ensuring robust error handling. The `DiaryView` component is also enhanced to support both string and object representations of drawing data, improving the logic for determining activity visuals. These changes streamline the handling of drawing data across the application, enhancing user experience and data integrity.
This commit is contained in:
Torsten Schulz (local)
2025-11-14 23:48:30 +01:00
parent 3a26f10110
commit fd4b47327f
2 changed files with 105 additions and 10 deletions

View File

@@ -953,10 +953,18 @@ export default {
hasActivityVisual(pa) {
if (!pa) return false;
try {
// direktes drawingData am PA
if (pa.drawingData && pa.drawingData !== '') return true;
// direktes drawingData am PA (kann String oder Objekt sein)
if (pa.drawingData) {
if (typeof pa.drawingData === 'string' && pa.drawingData.trim() !== '') return true;
if (typeof pa.drawingData === 'object' && Object.keys(pa.drawingData).length > 0) return true;
}
// Bildliste mit drawingData
if (Array.isArray(pa.images) && pa.images.some(img => img && img.drawingData && img.drawingData !== '')) return true;
if (Array.isArray(pa.images) && pa.images.some(img => {
if (!img || !img.drawingData) return false;
if (typeof img.drawingData === 'string' && img.drawingData.trim() !== '') return true;
if (typeof img.drawingData === 'object' && Object.keys(img.drawingData).length > 0) return true;
return false;
})) return true;
// gerenderter Code / renderSpec
if (pa.renderCode && pa.renderCode.trim() !== '') return true;
if (pa.renderSpec && Object.keys(pa.renderSpec).length) return true;
@@ -2203,8 +2211,28 @@ export default {
let activityToUse;
if (existing) {
// Aktivität existiert bereits - verwende diese
activityToUse = existing;
// Aktivität existiert bereits - aktualisiere drawingData falls vorhanden
if (result.drawingData) {
// Lade die vollständige Aktivität, um alle Felder zu behalten
const fullActivity = await apiClient.get(`/predefined-activities/${existing.id}`).then(r => r.data);
// Aktualisiere die Aktivität mit drawingData
const updateData = {
name: fullActivity.name || result.name || (result.fields && result.fields.name) || '',
code: fullActivity.code || code,
description: fullActivity.description || result.description || (result.fields && result.fields.description) || '',
durationText: fullActivity.durationText || '',
duration: fullActivity.duration || null,
imageLink: fullActivity.imageLink || '',
drawingData: result.drawingData
};
const updateResponse = await apiClient.put(`/predefined-activities/${existing.id}`, updateData);
activityToUse = updateResponse.data;
} else {
// Kein drawingData - verwende die existierende Aktivität
activityToUse = existing;
}
} else {
// Erstelle neue PredefinedActivity
const newActivity = {
@@ -2224,6 +2252,11 @@ export default {
// Erstelle automatisch den Plan-Eintrag
await this.addPlanItem();
// Lade den Trainingsplan neu, damit das Icon sofort angezeigt wird
if (this.date && this.date.id) {
await this.loadTrainingPlan();
}
} catch (error) {
const msg = getSafeErrorMessage(error, 'Fehler beim Erstellen der Aktivität');
this.showInfo('Fehler', msg, '', 'error');