bug fix:
Manager ne pouvait pas voir les tryouts. probleme avec discord bot
This commit is contained in:
@@ -280,6 +280,22 @@ for (let h = 8; h <= 22; h++) {
|
||||
const COACH_DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
|
||||
let coachSelectedSlots = {};
|
||||
|
||||
// Drag state for coach grid
|
||||
let coachDragMode = false;
|
||||
let coachDragAction = null;
|
||||
|
||||
function applyCoachSlotAction(dayOfWeek, timeStr, element) {
|
||||
if (!coachSelectedSlots[dayOfWeek]) coachSelectedSlots[dayOfWeek] = [];
|
||||
const index = coachSelectedSlots[dayOfWeek].indexOf(timeStr);
|
||||
if (coachDragAction === 'select' && index === -1) {
|
||||
coachSelectedSlots[dayOfWeek].push(timeStr);
|
||||
element.classList.add('selected');
|
||||
} else if (coachDragAction === 'deselect' && index > -1) {
|
||||
coachSelectedSlots[dayOfWeek].splice(index, 1);
|
||||
element.classList.remove('selected');
|
||||
}
|
||||
}
|
||||
|
||||
function loadCoachAvailability() {
|
||||
{% for av in existing_availability %}
|
||||
if (!coachSelectedSlots[{{ av.day_of_week }}]) coachSelectedSlots[{{ av.day_of_week }}] = [];
|
||||
@@ -296,25 +312,40 @@ function renderCoachGrid() {
|
||||
COACH_TIME_SLOTS.forEach(slot => {
|
||||
const isSelected = coachSelectedSlots[dayIndex] && coachSelectedSlots[dayIndex].includes(slot.time);
|
||||
const cssClass = isSelected ? 'time-slot selected' : 'time-slot';
|
||||
html += '<div class="' + cssClass + '" data-day="' + dayIndex + '" data-time="' + slot.time + '" onclick="toggleCoachSlot(' + dayIndex + ', \'' + slot.time + '\', this)">' + slot.display + '</div>';
|
||||
html += '<div class="' + cssClass + '" data-day="' + dayIndex + '" data-time="' + slot.time + '">' + slot.display + '</div>';
|
||||
});
|
||||
html += '</div>';
|
||||
});
|
||||
grid.innerHTML = html;
|
||||
}
|
||||
|
||||
function toggleCoachSlot(dayOfWeek, timeStr, element) {
|
||||
if (!coachSelectedSlots[dayOfWeek]) coachSelectedSlots[dayOfWeek] = [];
|
||||
const index = coachSelectedSlots[dayOfWeek].indexOf(timeStr);
|
||||
if (index === -1) {
|
||||
coachSelectedSlots[dayOfWeek].push(timeStr);
|
||||
element.classList.add('selected');
|
||||
} else {
|
||||
coachSelectedSlots[dayOfWeek].splice(index, 1);
|
||||
element.classList.remove('selected');
|
||||
}
|
||||
clearTimeout(window._coachSaveTimeout);
|
||||
window._coachSaveTimeout = setTimeout(saveCoachAvailability, 1000);
|
||||
// Drag event listeners
|
||||
grid.addEventListener('mousedown', function(e) {
|
||||
const slot = e.target.closest('.time-slot');
|
||||
if (!slot) return;
|
||||
e.preventDefault();
|
||||
coachDragMode = true;
|
||||
const day = parseInt(slot.dataset.day);
|
||||
const time = slot.dataset.time;
|
||||
if (!coachSelectedSlots[day]) coachSelectedSlots[day] = [];
|
||||
const isSelected = coachSelectedSlots[day].indexOf(time) > -1;
|
||||
coachDragAction = isSelected ? 'deselect' : 'select';
|
||||
applyCoachSlotAction(day, time, slot);
|
||||
});
|
||||
|
||||
grid.addEventListener('mousemove', function(e) {
|
||||
if (!coachDragMode) return;
|
||||
const slot = e.target.closest('.time-slot');
|
||||
if (!slot) return;
|
||||
applyCoachSlotAction(parseInt(slot.dataset.day), slot.dataset.time, slot);
|
||||
});
|
||||
|
||||
document.addEventListener('mouseup', function() {
|
||||
if (coachDragMode) {
|
||||
coachDragMode = false;
|
||||
coachDragAction = null;
|
||||
saveCoachAvailability();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function saveCoachAvailability() {
|
||||
@@ -400,9 +431,27 @@ var DAYS = [
|
||||
// Store selected slots: {day: [time, time, ...]}
|
||||
var selectedSlots = {};
|
||||
|
||||
// Drag state
|
||||
var dispDragMode = false;
|
||||
var dispDragAction = null; // 'select' or 'deselect'
|
||||
|
||||
function applySlotAction(block, action) {
|
||||
var day = parseInt(block.dataset.day);
|
||||
var time = block.dataset.time;
|
||||
if (!selectedSlots[day]) selectedSlots[day] = [];
|
||||
var index = selectedSlots[day].indexOf(time);
|
||||
if (action === 'select' && index === -1) {
|
||||
selectedSlots[day].push(time);
|
||||
block.classList.add('selected');
|
||||
} else if (action === 'deselect' && index > -1) {
|
||||
selectedSlots[day].splice(index, 1);
|
||||
block.classList.remove('selected');
|
||||
}
|
||||
}
|
||||
|
||||
function renderDisponibilityGrid() {
|
||||
var grid = document.getElementById('disponibilities-grid');
|
||||
grid.innerHTML = '<div style="margin-bottom: 10px;"><strong>Click time blocks to select your available hours</strong></div>';
|
||||
grid.innerHTML = '<div style="margin-bottom: 10px;"><strong>Click or click-and-drag to select your available hours</strong></div>';
|
||||
|
||||
var container = document.createElement('div');
|
||||
container.className = 'disponibility-grid';
|
||||
@@ -425,9 +474,6 @@ function renderDisponibilityGrid() {
|
||||
block.dataset.day = day.value;
|
||||
block.dataset.time = slot.time;
|
||||
block.textContent = slot.display;
|
||||
block.onclick = function() {
|
||||
toggleSlot(day.value, slot.time, block);
|
||||
};
|
||||
timeBlocks.appendChild(block);
|
||||
});
|
||||
|
||||
@@ -435,23 +481,39 @@ function renderDisponibilityGrid() {
|
||||
container.appendChild(dayRow);
|
||||
});
|
||||
|
||||
// Drag event listeners on the container
|
||||
container.addEventListener('mousedown', function(e) {
|
||||
var block = e.target.closest('.disponibility-time-block');
|
||||
if (!block) return;
|
||||
e.preventDefault();
|
||||
dispDragMode = true;
|
||||
var day = parseInt(block.dataset.day);
|
||||
var time = block.dataset.time;
|
||||
if (!selectedSlots[day]) selectedSlots[day] = [];
|
||||
var isSelected = selectedSlots[day].indexOf(time) > -1;
|
||||
dispDragAction = isSelected ? 'deselect' : 'select';
|
||||
applySlotAction(block, dispDragAction);
|
||||
});
|
||||
|
||||
container.addEventListener('mousemove', function(e) {
|
||||
if (!dispDragMode) return;
|
||||
var block = e.target.closest('.disponibility-time-block');
|
||||
if (!block) return;
|
||||
applySlotAction(block, dispDragAction);
|
||||
});
|
||||
|
||||
document.addEventListener('mouseup', function() {
|
||||
if (dispDragMode) {
|
||||
dispDragMode = false;
|
||||
dispDragAction = null;
|
||||
saveDisponibilities();
|
||||
}
|
||||
});
|
||||
|
||||
grid.appendChild(container);
|
||||
loadMyDisponibilities();
|
||||
}
|
||||
|
||||
function toggleSlot(day, time, element) {
|
||||
if (!selectedSlots[day]) selectedSlots[day] = [];
|
||||
|
||||
var index = selectedSlots[day].indexOf(time);
|
||||
if (index > -1) {
|
||||
selectedSlots[day].splice(index, 1);
|
||||
element.classList.remove('selected');
|
||||
} else {
|
||||
selectedSlots[day].push(time);
|
||||
element.classList.add('selected');
|
||||
}
|
||||
}
|
||||
|
||||
function loadMyDisponibilities() {
|
||||
fetch('{{ url_for("users.get_my_disponibilities") }}')
|
||||
.then(function(response) { return response.json(); })
|
||||
|
||||
Reference in New Issue
Block a user