Skip to content

Commit be98be8

Browse files
Merge pull request #44 from grossherzogin-elisabeth/feat/show-all-free-slots-in-event-details
show all free slots in eventdetails
2 parents 913b161 + 45f2d55 commit be98be8

File tree

4 files changed

+8
-22
lines changed

4 files changed

+8
-22
lines changed

frontend/src/application/usecases/EventUseCase.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type {
1111
} from '@/application';
1212
import { saveBlobToFile, saveStringToFile } from '@/common/utils/DownloadUtils.ts';
1313
import type { Event, EventKey, EventService, PositionKey, Registration, RegistrationKey, RegistrationService, UserKey } from '@/domain';
14-
import { EventState, EventType, SlotCriticality } from '@/domain';
14+
import { EventState, EventType } from '@/domain';
1515
import type { ResolvedRegistrationSlot } from '@/domain/aggregates/ResolvedRegistrationSlot';
1616

1717
export class EventUseCase {
@@ -205,18 +205,18 @@ export class EventUseCase {
205205

206206
public filterForWaitingList(event: Event, registrations: ResolvedRegistrationSlot[]): ResolvedRegistrationSlot[] {
207207
if ([EventState.Draft, EventState.OpenForSignup].includes(event.state)) {
208-
// crew is not public yet, so all registrations are on the waiting list-admin
208+
// crew is not public yet, so all registrations are on the waiting list
209209
return registrations.filter((it) => it.registration !== undefined);
210210
}
211211
return registrations.filter((it) => it.registration !== undefined && it.slot === undefined);
212212
}
213213

214214
public filterForCrew(event: Event, registrations: ResolvedRegistrationSlot[]): ResolvedRegistrationSlot[] {
215215
if ([EventState.Draft, EventState.OpenForSignup].includes(event.state)) {
216-
// crew is not public yet, so all registrations are on the waiting list-admin
216+
// crew is not public yet, so all registrations are on the waiting list
217217
return [];
218218
}
219-
return registrations.filter((it) => it.slot && (it.registration || it.slot.criticality >= SlotCriticality.Important));
219+
return registrations.filter((it) => it.slot !== undefined);
220220
}
221221

222222
public async leaveEvents(events: Event[]): Promise<void> {

frontend/src/domain/services/EventService.ts

+1-12
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ export class EventService {
110110
* @param event
111111
*/
112112
private optimizeSlots(event: Event): Event {
113+
console.log('🏎️ Optimizing slots');
113114
// this.debugSlots(event);
114115
for (let i = 0; i < event.slots.length; i++) {
115116
const slot = event.slots[i];
@@ -229,22 +230,10 @@ export class EventService {
229230
return event;
230231
}
231232

232-
public isSlotFilled(event: Event | null | undefined, slotkey: SlotKey): boolean {
233-
if (!event) {
234-
return false;
235-
}
236-
const slot = event.slots.find((it) => it.key === slotkey);
237-
return slot !== undefined && slot.assignedRegistrationKey !== undefined;
238-
}
239-
240233
public hasOpenRequiredSlots(event: Event, positions?: PositionKey[]): boolean {
241234
return this.hasOpenSlots(event, positions, SlotCriticality.Required);
242235
}
243236

244-
public hasOpenImportantSlots(event: Event, positions?: PositionKey[]): boolean {
245-
return this.hasOpenSlots(event, positions, SlotCriticality.Important);
246-
}
247-
248237
public hasOpenSlots(event: Event, positions?: PositionKey[], criticality: number = 0): boolean {
249238
const openSlots = event.slots.filter(
250239
(it) =>

frontend/src/ui/views/events/details/EventDetailsView.vue

+1-4
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@
202202
</RouterLink>
203203
<span v-else-if="it.name" class="truncate">{{ it.name }}</span>
204204
<span v-else-if="it.user?.key" class="italic text-error"> Unbekannter Nutzer </span>
205-
<span v-else class="truncate italic text-error">Noch nicht besetzt</span>
205+
<span v-else class="truncate italic text-error text-opacity-75">Noch nicht besetzt</span>
206206
<span class="flex-grow"></span>
207207
<span :style="{ background: it.position.color }" class="position ml-auto text-xs">
208208
{{ it.position.name }}
@@ -413,9 +413,6 @@ async function fetchTeam(event: Event): Promise<void> {
413413
const registrations = await eventUseCase.resolveRegistrations(event);
414414
team.value = eventUseCase.filterForCrew(event, registrations);
415415
waitingList.value = eventUseCase.filterForWaitingList(event, registrations);
416-
// const slots = await usersUseCase.resolveEventSlots(event);
417-
// team.value = slots.filter((it) => it.criticality >= 1 || it.userName);
418-
// waitingList.value = await usersUseCase.resolveWaitingList(event);
419416
}
420417
421418
async function choosePositionAndJoinEvent(evt: Event): Promise<void> {

frontend/src/ui/views/events/list/EventsListView.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -491,8 +491,8 @@ async function fetchEventsByYear(year: number): Promise<EventTableViewItem[]> {
491491
selected: false,
492492
isPastEvent: evt.start.getTime() < new Date().getTime(),
493493
waitingListCount: evt.registrations.length - evt.assignedUserCount,
494-
hasOpenSlots: eventService.hasOpenSlots(evt, signedInUser.value.positions),
495-
hasOpenRequiredSlots: eventService.hasOpenImportantSlots(evt, signedInUser.value.positions),
494+
hasOpenSlots: eventService.hasOpenSlots(evt),
495+
hasOpenRequiredSlots: eventService.hasOpenRequiredSlots(evt),
496496
stateDetails: {
497497
name: '',
498498
icon: '',

0 commit comments

Comments
 (0)