refactor(tournament): streamline participant filtering logic in TournamentParticipantsTab and TournamentTab
- Simplified the filtering logic for club members in TournamentParticipantsTab by removing redundant checks, as the parent component already handles class-based filtering. - Updated the clubMembersForParticipantAdd method in TournamentTab to clarify conditions for returning all members, ensuring consistency in participant eligibility checks.
This commit is contained in:
@@ -447,51 +447,9 @@ export default {
|
||||
],
|
||||
computed: {
|
||||
filteredClubMembers() {
|
||||
// Wenn keine Klasse ausgewählt ist, zeige alle Mitglieder
|
||||
if (!this.selectedViewClass || this.selectedViewClass === '__none__' || this.selectedViewClass === null) {
|
||||
return this.clubMembers;
|
||||
}
|
||||
|
||||
// Finde die ausgewählte Klasse
|
||||
const selectedClassId = Number(this.selectedViewClass);
|
||||
const selectedClass = this.tournamentClasses.find(c => c.id === selectedClassId);
|
||||
|
||||
// Wenn keine Klasse gefunden, zeige alle Mitglieder
|
||||
if (!selectedClass) {
|
||||
return this.clubMembers;
|
||||
}
|
||||
|
||||
// Filtere basierend auf Geschlecht und Geburtsjahr (minBirthYear/maxBirthYear)
|
||||
const classGender = selectedClass.gender;
|
||||
const minBirthYear = selectedClass.minBirthYear;
|
||||
const maxBirthYear = selectedClass.maxBirthYear;
|
||||
|
||||
return this.clubMembers.filter(member => {
|
||||
const memberGender = (member.gender || 'unknown').toLowerCase();
|
||||
let genderMatch = true;
|
||||
if (classGender && classGender !== 'mixed') {
|
||||
if (classGender === 'male') genderMatch = memberGender === 'male';
|
||||
else if (classGender === 'female') genderMatch = memberGender === 'female';
|
||||
}
|
||||
|
||||
let birthYearMatch = true;
|
||||
if (member.birthDate) {
|
||||
let birthYear = null;
|
||||
const bd = String(member.birthDate);
|
||||
if (bd.includes('-')) {
|
||||
birthYear = parseInt(bd.split('-')[0], 10);
|
||||
} else if (bd.includes('.')) {
|
||||
const parts = bd.split('.');
|
||||
if (parts.length >= 3) birthYear = parseInt(parts[2], 10);
|
||||
}
|
||||
if (birthYear != null && !isNaN(birthYear)) {
|
||||
if (minBirthYear != null && birthYear < minBirthYear) birthYearMatch = false;
|
||||
if (maxBirthYear != null && birthYear > maxBirthYear) birthYearMatch = false;
|
||||
}
|
||||
}
|
||||
|
||||
return genderMatch && birthYearMatch;
|
||||
});
|
||||
// Parent (TournamentTab) filtert bereits nach Klasse (Geschlecht, min/maxBirthYear)
|
||||
// Wir geben die Liste direkt zurück
|
||||
return this.clubMembers;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -535,14 +535,17 @@ export default {
|
||||
return `${groupId}-${classId ?? 'null'}`;
|
||||
},
|
||||
clubMembersForParticipantAdd() {
|
||||
if (!this.isMiniChampionship || !this.selectedViewClass || this.selectedViewClass === '__none__' || !this.tournamentClasses?.length) {
|
||||
// Keine Klasse ausgewählt oder keine Klassen vorhanden: alle Mitglieder
|
||||
if (!this.selectedViewClass || this.selectedViewClass === '__none__' || !this.tournamentClasses?.length) {
|
||||
return this.clubMembers;
|
||||
}
|
||||
const classItem = this.tournamentClasses.find(c => String(c.id) === String(this.selectedViewClass));
|
||||
// Klasse nicht gefunden oder keine Filter gesetzt: alle Mitglieder
|
||||
if (!classItem || (classItem.minBirthYear == null && classItem.maxBirthYear == null && !classItem.gender)) {
|
||||
return this.clubMembers;
|
||||
}
|
||||
return this.clubMembers.filter(m => this.memberEligibleForMiniClass(m, classItem));
|
||||
// Filtere nach Geschlecht und Geburtsjahr (min/max)
|
||||
return this.clubMembers.filter(m => this.memberEligibleForClass(m, classItem));
|
||||
},
|
||||
|
||||
// Mapping von groupId zu groupNumber für die Teilnehmer-Auswahl
|
||||
@@ -1657,14 +1660,16 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
memberEligibleForMiniClass(member, classItem) {
|
||||
memberEligibleForClass(member, classItem) {
|
||||
// Geschlechtsfilter
|
||||
if (classItem.gender && classItem.gender !== 'mixed') {
|
||||
const g = (member.gender || 'unknown').toLowerCase();
|
||||
if (classItem.gender === 'male' && g !== 'male') return false;
|
||||
if (classItem.gender === 'female' && g !== 'female') return false;
|
||||
}
|
||||
// Geburtsjahr-Filter
|
||||
const bd = member.birthDate;
|
||||
if (!bd) return true;
|
||||
if (!bd) return true; // Kein Geburtsdatum = erlaubt
|
||||
let birthYear = null;
|
||||
if (typeof bd === 'string' && bd.includes('-')) {
|
||||
birthYear = parseInt(bd.split('-')[0], 10);
|
||||
|
||||
Reference in New Issue
Block a user