I just integrated toast ui calendar in my web app, but when 2 or more events have the same start ad different end instead of placing both of them side by side, those are overlapped. To make this easier I made some screenshots:
Same start and end:
Same start and differend end in both daily and weekly view: (the events are 3!!, not 2, but the first one is so small that can be barely seen.
This are the start and end times of the 3 events:
1:{start: 15:00, end: 15:05}
2:{start: 15:05, end: 15:10}
3:{start: 15:30, end: 16:15}
Is there anyway to force this behaviour?
Here’s my code:
Calendar creation:
calendar = new tui.Calendar('#calendar', {
defaultView: 'week',
useFormPopup: false,
useDetailPopup: true,
isReadOnly: true,
usageStatistics: false,
height: '100%',
week: {
startDayOfWeek: 1,
dayNames: [ 'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab' ],
hourStart: slotTime.min,
hourEnd: slotTime.max,
eventView: ['time'],
taskView: false,
showNowIndicator: true,
timezone: 'Europe/Rome',
},
month: {
startDayOfWeek: 1,
dayNames: [ 'Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab' ],
showNowIndicator: true,
timezone: 'Europe/Rome',
},
template: {
timegridDisplayPrimaryTime({ time }) {
if(time.getHours() < 10){
if(time.getMinutes() < 10){
return `0${time.getHours()}:0${time.getMinutes()}`;
} else{
return `0${time.getHours()}:${time.getMinutes()}`;
}
} else{
if(time.getMinutes() < 10){
return `${time.getHours()}:0${time.getMinutes()}`;
} else{
return `${time.getHours()}:${time.getMinutes()}`;
}
}
},
popupEdit() {
return 'Modifica';
},
popupDelete() {
return 'Cancella';
},
popupDetailDate({ start, end }) {
let start_Time
if(start.d.d.getHours() < 10){
if(start.d.d.getMinutes() < 10){
start_Time =
`0${start.d.d.getHours()}:0${start.d.d.getMinutes()}`;
} else{
start_Time = `0${start.d.d.getHours()}:
${start.d.d.getMinutes()}`;
}
} else{
if(start.d.d.getMinutes() < 10){
start_Time =
`${start.d.d.getHours()}:0${start.d.d.getMinutes()}`;
} else{
start_Time = `${start.d.d.getHours()}:
${start.d.d.getMinutes()}`;
}
}
let end_Time
if(end.d.d.getHours() < 10){
if(end.d.d.getMinutes() < 10){
end_Time = `0${end.d.d.getHours()}:0${end.d.d.getMinutes()}`;
} else{
end_Time = `0${end.d.d.getHours()}:${end.d.d.getMinutes()}`;
}
} else{
if(end.d.d.getMinutes() < 10){
end_Time = `${end.d.d.getHours()}:0${end.d.d.getMinutes()}`;
} else{
end_Time = `${end.d.d.getHours()}:${end.d.d.getMinutes()}`;
}
}
return `${start_Time} - ${end_Time}`;
},
},
});
events php object:
$title = $patient_c . " " . $patient_n;
$event['title'] = '<span class="calendarVisitLink" style="color: #959595;">'.
$title.'<br> <div><span style="cursor: pointer;" class="visdet text-info"
data-idvisita="'.
$vid.'" data-idpatient="'.$patient_id.'">VIS-'.$vid.'</span> </div></span>';
$event['start'] = $dt_start;
$event['end'] = $dt_end;
switch ($v_status) {
case 0:
$event['backgroundColor'] = '#ffa40f';
break;
case 1:
$event['backgroundColor'] = '#20a1ff';
break;
case 2:
$event['backgroundColor'] = '#bf75db';
break;
case 3:
$event['backgroundColor'] = '#47cc80';
break;
case 4:
$event['backgroundColor'] = '#ff6969';
break;
case 5:
$event['backgroundColor'] = '#817071';
break;
}
$event['category'] = 'time';
$event['attendees'] = [$medic_c . " " . $medic_n];
$event['body'] = "Prestazione: " . $service_name . "<br>Categoria: " .
$service_category_name. "<br>Durata: " . $time . " min";
$event['id'] = $vid;
$event['location'] = $room;
$event['groupId'] = $medic_id;
$event['raw'] = $patient_id;
$event['isAllDay'] = 0;
$event['customStyle'] = [
'borderStyle' => 'solid',
'borderColor' => 'gainsboro',
'borderRadius' => '2px',
'borderWidth' => '2px',
'color' => 'white',
// 'backgroundColor' => '#0D99FF'
];
$event['state'] = 'Free';
If you need more code or something else pls ask me in the comment, I will provide as soon as I can