68 lines
No EOL
2.7 KiB
JavaScript
68 lines
No EOL
2.7 KiB
JavaScript
import { CoreEvents } from '../constants/CoreEvents';
|
|
/**
|
|
* NavigationRenderer - Handles DOM rendering for navigation containers
|
|
* Separated from NavigationManager to follow Single Responsibility Principle
|
|
*/
|
|
export class NavigationRenderer {
|
|
constructor(eventBus, eventRenderer) {
|
|
this.eventBus = eventBus;
|
|
this.setupEventListeners();
|
|
}
|
|
/**
|
|
* Setup event listeners for DOM updates
|
|
*/
|
|
setupEventListeners() {
|
|
this.eventBus.on(CoreEvents.PERIOD_INFO_UPDATE, (event) => {
|
|
const customEvent = event;
|
|
const { weekNumber, dateRange } = customEvent.detail;
|
|
this.updateWeekInfoInDOM(weekNumber, dateRange);
|
|
});
|
|
}
|
|
updateWeekInfoInDOM(weekNumber, dateRange) {
|
|
const weekNumberElement = document.querySelector('swp-week-number');
|
|
const dateRangeElement = document.querySelector('swp-date-range');
|
|
if (weekNumberElement) {
|
|
weekNumberElement.textContent = `Week ${weekNumber}`;
|
|
}
|
|
if (dateRangeElement) {
|
|
dateRangeElement.textContent = dateRange;
|
|
}
|
|
}
|
|
/**
|
|
* Apply filter state to pre-rendered grids
|
|
*/
|
|
applyFilterToPreRenderedGrids(filterState) {
|
|
// Find all grid containers (including pre-rendered ones)
|
|
const allGridContainers = document.querySelectorAll('swp-grid-container');
|
|
allGridContainers.forEach(container => {
|
|
const eventsLayers = container.querySelectorAll('swp-events-layer');
|
|
eventsLayers.forEach(layer => {
|
|
if (filterState.active) {
|
|
// Apply filter active state
|
|
layer.setAttribute('data-filter-active', 'true');
|
|
// Mark matching events in this layer
|
|
const events = layer.querySelectorAll('swp-event');
|
|
events.forEach(event => {
|
|
const eventId = event.getAttribute('data-event-id');
|
|
if (eventId && filterState.matchingIds.includes(eventId)) {
|
|
event.setAttribute('data-matches', 'true');
|
|
}
|
|
else {
|
|
event.removeAttribute('data-matches');
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
// Remove filter state
|
|
layer.removeAttribute('data-filter-active');
|
|
// Remove all match attributes
|
|
const events = layer.querySelectorAll('swp-event');
|
|
events.forEach(event => {
|
|
event.removeAttribute('data-matches');
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
//# sourceMappingURL=NavigationRenderer.js.map
|