|
34 | 34 | <Skeleton v-for="i in 21" :key="i" class="h-[260px] w-full rounded-lg" /> |
35 | 35 | </div> |
36 | 36 |
|
37 | | - <div v-else-if="!companies.length && !companiesLoading" class="text-center"> |
| 37 | + <div |
| 38 | + v-else-if="!membersWithParticipations.length && !companiesLoading" |
| 39 | + class="text-center" |
| 40 | + > |
38 | 41 | <p>No companies found</p> |
39 | 42 | </div> |
40 | 43 |
|
41 | | - <DynamicScroller |
42 | | - v-else |
43 | | - :key="selectedTeamId" |
44 | | - :items="membersSorted" |
45 | | - page-mode |
46 | | - :min-item-size="1" |
47 | | - > |
48 | | - <template #default="{ item }"> |
49 | | - <div class="w-full border-b border-muted-foreground/10 pb-4 mb-4"> |
50 | | - <div class="flex items-center justify-between w-full py-2"> |
51 | | - <RouterLink |
52 | | - :to="{ name: 'member', params: { memberId: item.id } }" |
53 | | - class="flex items-center gap-3 no-underline" |
54 | | - > |
55 | | - <MemberWithAvatar :member="item" with-separator /> |
56 | | - </RouterLink> |
57 | | - <button |
58 | | - type="button" |
59 | | - class="p-2 rounded-md hover:bg-slate-100" |
60 | | - :aria-expanded="isExpanded(item.id)" |
61 | | - @click="toggleExpanded(item.id)" |
62 | | - > |
63 | | - <ChevronDown |
64 | | - :class="[ |
65 | | - 'transition-transform', |
66 | | - isExpanded(item.id) ? 'rotate-180' : '', |
67 | | - ]" |
68 | | - class="w-5 h-5 text-muted-foreground" |
69 | | - /> |
70 | | - </button> |
71 | | - </div> |
72 | | - |
73 | | - <div |
74 | | - v-if="isExpanded(item.id)" |
75 | | - class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-7 gap-4 mt-3" |
| 44 | + <div v-else> |
| 45 | + <div |
| 46 | + v-for="item in membersWithParticipations" |
| 47 | + :key="item.id" |
| 48 | + class="w-full border-b border-muted-foreground/10 pb-4 mb-4" |
| 49 | + > |
| 50 | + <div class="flex items-center justify-between w-full py-2"> |
| 51 | + <RouterLink |
| 52 | + :to="{ name: 'member', params: { memberId: item.id } }" |
| 53 | + class="flex items-center gap-3 no-underline" |
76 | 54 | > |
77 | | - <CompanyWorkflowCard |
78 | | - v-for="company in participationsFiltered?.get(item.id) || []" |
79 | | - :key="company.id" |
80 | | - :company="company" |
| 55 | + <MemberWithAvatar :member="item" with-separator /> |
| 56 | + </RouterLink> |
| 57 | + <button |
| 58 | + type="button" |
| 59 | + class="p-2 rounded-md hover:bg-slate-100" |
| 60 | + :aria-expanded="isExpanded(item.id)" |
| 61 | + @click="toggleExpanded(item.id)" |
| 62 | + > |
| 63 | + <ChevronDown |
| 64 | + :class="[ |
| 65 | + 'transition-transform', |
| 66 | + isExpanded(item.id) ? 'rotate-180' : '', |
| 67 | + ]" |
| 68 | + class="w-5 h-5 text-muted-foreground" |
81 | 69 | /> |
82 | | - </div> |
| 70 | + </button> |
| 71 | + </div> |
| 72 | + |
| 73 | + <div |
| 74 | + v-if="isExpanded(item.id)" |
| 75 | + class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-7 gap-4 mt-3" |
| 76 | + > |
| 77 | + <CompanyWorkflowCard |
| 78 | + v-for="company in participationsFiltered?.get(item.id) || []" |
| 79 | + :key="company.id" |
| 80 | + :company="company" |
| 81 | + /> |
83 | 82 | </div> |
84 | | - </template> |
85 | | - </DynamicScroller> |
| 83 | + </div> |
| 84 | + </div> |
86 | 85 | </template> |
87 | 86 |
|
88 | 87 | <script setup lang="ts"> |
89 | 88 | import type { Company, CompanyParticipation } from "@/dto/companies"; |
90 | 89 | import type { Member } from "@/dto/members"; |
91 | 90 | import type { CoordinationTeam } from "@/dto/coordinationTeams"; |
92 | 91 | import MemberWithAvatar from "@/components/members/MemberWithAvatar.vue"; |
93 | | -import { DynamicScroller } from "vue-virtual-scroller"; |
94 | 92 | import { useInsertionSort, useSortByParticipationStatus } from "@/lib/utils"; |
95 | 93 | import { Skeleton } from "@/components/ui/skeleton"; |
96 | 94 | import CompanyWorkflowCard from "../cards/CompanyWorkflowCard.vue"; |
@@ -191,6 +189,14 @@ const participationsFiltered = useParticipationFilter<CompanyWithParticipation>( |
191 | 189 | selectedPackage, |
192 | 190 | ); |
193 | 191 |
|
| 192 | +// Only show members that have participations after filtering |
| 193 | +const membersWithParticipations = computed(() => { |
| 194 | + if (!participationsFiltered.value) return []; |
| 195 | + return membersSorted.value.filter((member) => |
| 196 | + participationsFiltered.value.has(member.id), |
| 197 | + ); |
| 198 | +}); |
| 199 | +
|
194 | 200 | // Track expanded/collapsed state per member. Default to expanded (true) |
195 | 201 | const expanded = ref<Record<string, boolean>>({}); |
196 | 202 |
|
|
0 commit comments