diff --git a/frontend/src/components/ParticipationChip.vue b/frontend/src/components/ParticipationChip.vue new file mode 100644 index 00000000..e9a7684e --- /dev/null +++ b/frontend/src/components/ParticipationChip.vue @@ -0,0 +1,190 @@ + + + diff --git a/frontend/src/components/companies/MembersCompanies.vue b/frontend/src/components/companies/MembersCompanies.vue index c1b76d20..3bc83bdf 100644 --- a/frontend/src/components/companies/MembersCompanies.vue +++ b/frontend/src/components/companies/MembersCompanies.vue @@ -4,6 +4,8 @@ + +
@@ -38,7 +40,6 @@ diff --git a/frontend/src/components/speakers/MembersSpeakers.vue b/frontend/src/components/speakers/MembersSpeakers.vue index e46414dc..8e14151a 100644 --- a/frontend/src/components/speakers/MembersSpeakers.vue +++ b/frontend/src/components/speakers/MembersSpeakers.vue @@ -4,6 +4,8 @@
+ +
@@ -38,7 +40,6 @@ diff --git a/frontend/src/composables/useParticipationFilter.ts b/frontend/src/composables/useParticipationFilter.ts new file mode 100644 index 00000000..166377a6 --- /dev/null +++ b/frontend/src/composables/useParticipationFilter.ts @@ -0,0 +1,27 @@ +import { computed } from "vue"; +import type { Ref } from "vue"; +import type { ParticipationStatus } from "@/dto"; + +// Generic composable to filter a Map by participation.status +export function useParticipationFilter< + T extends { participation?: { status?: ParticipationStatus } }, +>( + participations: Ref | undefined>, + selectedStatus: Ref, +) { + return computed(() => { + if (!participations.value) return new Map(); + + if (!selectedStatus.value) return participations.value; + + const map = new Map(); + for (const [memberId, items] of participations.value.entries()) { + const filtered = items.filter( + (it) => it.participation?.status === selectedStatus.value, + ); + if (filtered.length) map.set(memberId, filtered); + } + + return map; + }); +}