Improves all-day event overflow handling
Ensures correct display of all-day events when collapsed or expanded. Improves the transition between collapsed and expanded states by adjusting the overflow event visibility.
This commit is contained in:
parent
0bf369907b
commit
496be2f7ce
2 changed files with 47 additions and 42 deletions
|
|
@ -462,7 +462,10 @@ export class AllDayManager {
|
||||||
element.style.gridColumn = `${layout.startColumn} / ${layout.endColumn + 1}`;
|
element.style.gridColumn = `${layout.startColumn} / ${layout.endColumn + 1}`;
|
||||||
|
|
||||||
if (layout.row > ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS)
|
if (layout.row > ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS)
|
||||||
element.classList.add('max-event-overflow-hide');
|
if (!this.isExpanded)
|
||||||
|
element.classList.add('max-event-overflow-hide');
|
||||||
|
else
|
||||||
|
element.classList.add('max-event-overflow-show');
|
||||||
|
|
||||||
// Remove transition class after animation
|
// Remove transition class after animation
|
||||||
setTimeout(() => element.classList.remove('transitioning'), 200);
|
setTimeout(() => element.classList.remove('transitioning'), 200);
|
||||||
|
|
@ -539,62 +542,62 @@ export class AllDayManager {
|
||||||
* Count number of events in a specific column using ColumnBounds
|
* Count number of events in a specific column using ColumnBounds
|
||||||
*/
|
*/
|
||||||
private countEventsInColumn(columnBounds: ColumnBounds): number {
|
private countEventsInColumn(columnBounds: ColumnBounds): number {
|
||||||
let columnIndex = columnBounds.index;
|
let columnIndex = columnBounds.index;
|
||||||
let count = 0;
|
let count = 0;
|
||||||
|
|
||||||
this.currentLayouts.forEach((layout) => {
|
this.currentLayouts.forEach((layout) => {
|
||||||
// Check if event spans this column
|
// Check if event spans this column
|
||||||
if (layout.startColumn <= columnIndex && layout.endColumn >= columnIndex) {
|
if (layout.startColumn <= columnIndex && layout.endColumn >= columnIndex) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update overflow indicators for collapsed state
|
* Update overflow indicators for collapsed state
|
||||||
*/
|
*/
|
||||||
private updateOverflowIndicators(): void {
|
private updateOverflowIndicators(): void {
|
||||||
const container = this.getAllDayContainer();
|
const container = this.getAllDayContainer();
|
||||||
if(!container) return;
|
if (!container) return;
|
||||||
|
|
||||||
// Create overflow indicators for each column that needs them
|
// Create overflow indicators for each column that needs them
|
||||||
let columns = ColumnDetectionUtils.getColumns();
|
let columns = ColumnDetectionUtils.getColumns();
|
||||||
|
|
||||||
columns.forEach((columnBounds) => {
|
columns.forEach((columnBounds) => {
|
||||||
let totalEventsInColumn = this.countEventsInColumn(columnBounds);
|
let totalEventsInColumn = this.countEventsInColumn(columnBounds);
|
||||||
let overflowCount = totalEventsInColumn - ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS
|
let overflowCount = totalEventsInColumn - ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS
|
||||||
|
|
||||||
if (overflowCount > 0) {
|
if (overflowCount > 0) {
|
||||||
// Create new overflow indicator element
|
// Create new overflow indicator element
|
||||||
let overflowElement = document.createElement('swp-event');
|
let overflowElement = document.createElement('swp-event');
|
||||||
overflowElement.className = 'max-event-indicator';
|
overflowElement.className = 'max-event-indicator';
|
||||||
overflowElement.style.gridRow = ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS.toString();
|
overflowElement.style.gridRow = ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS.toString();
|
||||||
overflowElement.style.gridColumn = columnBounds.index.toString();
|
overflowElement.style.gridColumn = columnBounds.index.toString();
|
||||||
overflowElement.innerHTML = `<span>+${overflowCount + 1} more</span>`;
|
overflowElement.innerHTML = `<span>+${overflowCount + 1} more</span>`;
|
||||||
overflowElement.onclick = (e) => {
|
overflowElement.onclick = (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this.toggleExpanded();
|
this.toggleExpanded();
|
||||||
};
|
};
|
||||||
|
|
||||||
container.appendChild(overflowElement);
|
container.appendChild(overflowElement);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear overflow indicators and restore normal state
|
* Clear overflow indicators and restore normal state
|
||||||
*/
|
*/
|
||||||
private clearOverflowIndicators(): void {
|
private clearOverflowIndicators(): void {
|
||||||
const container = this.getAllDayContainer();
|
const container = this.getAllDayContainer();
|
||||||
if(!container) return;
|
if (!container) return;
|
||||||
|
|
||||||
// Remove all overflow indicator elements
|
// Remove all overflow indicator elements
|
||||||
container.querySelectorAll('.max-event-indicator').forEach((element) => {
|
container.querySelectorAll('.max-event-indicator').forEach((element) => {
|
||||||
element.remove();
|
element.remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -379,11 +379,13 @@ swp-allday-container swp-event.max-event-indicator span {
|
||||||
}
|
}
|
||||||
|
|
||||||
swp-allday-container swp-event.max-event-overflow-show {
|
swp-allday-container swp-event.max-event-overflow-show {
|
||||||
display: block;
|
opacity: 1;
|
||||||
|
transition: opacity 0.3s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
swp-allday-container swp-event.max-event-overflow-hide {
|
swp-allday-container swp-event.max-event-overflow-hide {
|
||||||
display: none;
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide time element for all-day styled events */
|
/* Hide time element for all-day styled events */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue