Update member activity handling to support activity codes and improve display logic

This commit enhances the `getMemberActivities` and `getMemberLastParticipations` functions to utilize activity codes when available, improving the uniqueness of activity identification. The `MemberActivityStatsDialog` component is updated to handle both string and object representations of activities, ensuring a consistent display and tooltip functionality. These changes streamline the activity data structure and enhance the user experience when viewing participation statistics.
This commit is contained in:
Torsten Schulz (local)
2025-11-14 23:38:36 +01:00
parent ce2bda37ac
commit 3a26f10110
3 changed files with 57 additions and 17 deletions

View File

@@ -15,7 +15,7 @@
<div class="participation-date-header">{{ formatDate(dateGroup.date) }}</div>
<div class="participation-activities">
<div v-for="(activity, index) in dateGroup.activities" :key="index" class="participation-item">
<div class="participation-name">{{ activity }}</div>
<div class="participation-name" :title="getActivityTooltip(activity)">{{ getActivityDisplay(activity) }}</div>
</div>
</div>
</div>
@@ -29,8 +29,8 @@
<div class="section">
<h3 class="section-title">Statistik der Übungen</h3>
<div v-if="activityStats && activityStats.length" class="stats-list">
<div v-for="stat in activityStats" :key="stat.name" class="stat-item">
<div class="stat-name">{{ stat.name }}</div>
<div v-for="stat in activityStats" :key="stat.code || stat.name" class="stat-item">
<div class="stat-name" :title="stat.name">{{ stat.code || stat.name }}</div>
<div class="stat-count">{{ stat.count }}x</div>
</div>
</div>
@@ -87,8 +87,19 @@ export default {
}
const dateGroup = grouped.get(date);
// Füge Aktivität nur hinzu, wenn sie noch nicht vorhanden ist
if (!dateGroup.activities.includes(participation.activityName)) {
dateGroup.activities.push(participation.activityName);
// Unterstütze sowohl alte (String) als auch neue (Objekt) Datenstruktur
const activityEntry = participation.activityFullName
? { code: participation.activityName, name: participation.activityFullName }
: participation.activityName;
const exists = typeof activityEntry === 'string'
? dateGroup.activities.includes(activityEntry)
: dateGroup.activities.some(a =>
(typeof a === 'string' ? a === activityEntry.code : (a.code || a.name) === activityEntry.code)
);
if (!exists) {
dateGroup.activities.push(activityEntry);
}
});
@@ -111,6 +122,22 @@ export default {
if (!dateString) return '';
const date = new Date(dateString);
return date.toLocaleDateString('de-DE');
},
getActivityDisplay(activity) {
// Wenn activity ein String ist (alte Datenstruktur), verwende es direkt
if (typeof activity === 'string') {
return activity;
}
// Wenn activity ein Objekt ist, verwende code oder name
return activity.code || activity.name || activity;
},
getActivityTooltip(activity) {
// Wenn activity ein String ist (alte Datenstruktur), kein Tooltip
if (typeof activity === 'string') {
return '';
}
// Wenn activity ein Objekt ist, verwende name als Tooltip
return activity.name || '';
}
}
};