Initial microslots implementation

This commit is contained in:
Vencislav Atanasov 2024-09-26 21:19:27 +03:00
parent 01f29b80c5
commit 277e3a215b
1 changed files with 41 additions and 25 deletions

View File

@ -15,6 +15,10 @@ export default function useScheduleTable({
const days = Array.from(new Set(filteredSlots.map(slot =>
getMidnightTimestamp(slot.starts_at)
))).map(ts => new Date(ts));
const microslots = Array.from(new Set(filteredSlots.flatMap(slot => [
slot.starts_at.getTime(),
slot.ends_at.getTime(),
]))).map(ts => new Date(ts)).sort();
const filteredHallIds = new Set(filteredSlots.map(slot => slot.hall_id));
const filteredHalls = halls.filter(hall => filteredHallIds.has(hall.id));
const hallSlots = Object.fromEntries(filteredHalls.map(hall => [
@ -31,31 +35,43 @@ export default function useScheduleTable({
},
...filteredHalls,
];
const rows = days.flatMap(day => [{
id: 'header-'.concat(day.getTime().toString()),
const rows = microslots.flatMap((date, index, array) => {
const isFirst = index === 0;
const isLast = index === array.length - 1;
const isFirstForTheDay = index > 0 && !isSameDay(date, array[index - 1]);
const isLastForTheDay = array?.[index + 1] && !isSameDay(date, array[index + 1]);
const showHeader = isFirst || isFirstForTheDay;
const showSlot = !isLast && !isLastForTheDay;
return [
...showHeader ? [{
id: 'header-'.concat(date.getTime().toString()),
cells: [{
id: 1,
attributes: {
colSpan: header.length,
},
day,
day: date,
}]
},
...filteredSlots.filter(slot => isSameDay(slot.starts_at, day)).map(slot => ({
id: slot.id,
}] : [],
...showSlot ? [{
id: 'slot-'.concat(date.getTime().toString()),
cells: [{
id: 1,
day, // TODO replace with slot time
day: date, // TODO replace with slot time
}, {
id: 2,
attributes: {
className: 'schedule-'.concat(slot.event.language).concat(' ').concat(slot.event.track?.css_class),
colSpan: 2,
},
event: slot.event,
}],
}))
]);
// attributes: {
// className: 'schedule-'.concat(slot.event.language).concat(' ').concat(slot.event.track?.css_class),
// colSpan: 2,
// },
// event: slot.event,
}] : [],
];
});
return {
header,