Implements FilterTemplate system for event matching
Introduces flexible key-based filtering for calendar events across different view configurations Adds new FilterTemplate class to: - Define event matching rules based on view configuration - Support multi-level grouping (team/resource/date) - Handle dynamic key generation for columns and events Enhances view configuration with explicit id properties and derived fields
This commit is contained in:
parent
c2f7564f8e
commit
dd647acab8
8 changed files with 331 additions and 41 deletions
|
|
@ -4,13 +4,16 @@ import { EventRenderer } from '../features/event/EventRenderer';
|
|||
import { ScheduleRenderer } from '../features/schedule/ScheduleRenderer';
|
||||
import { HeaderDrawerRenderer } from '../features/headerdrawer/HeaderDrawerRenderer';
|
||||
import { ViewConfig } from './ViewConfig';
|
||||
import { FilterTemplate } from './FilterTemplate';
|
||||
import { DateService } from './DateService';
|
||||
|
||||
export class CalendarOrchestrator {
|
||||
constructor(
|
||||
private allRenderers: IRenderer[],
|
||||
private eventRenderer: EventRenderer,
|
||||
private scheduleRenderer: ScheduleRenderer,
|
||||
private headerDrawerRenderer: HeaderDrawerRenderer
|
||||
private headerDrawerRenderer: HeaderDrawerRenderer,
|
||||
private dateService: DateService
|
||||
) {}
|
||||
|
||||
async render(viewConfig: ViewConfig, container: HTMLElement): Promise<void> {
|
||||
|
|
@ -26,6 +29,12 @@ export class CalendarOrchestrator {
|
|||
filter[grouping.type] = grouping.values;
|
||||
}
|
||||
|
||||
// Byg FilterTemplate fra viewConfig groupings
|
||||
const filterTemplate = new FilterTemplate(this.dateService);
|
||||
for (const grouping of viewConfig.groupings) {
|
||||
filterTemplate.addField(grouping.idProperty, grouping.derivedFrom);
|
||||
}
|
||||
|
||||
const context: IRenderContext = { headerContainer, columnContainer, filter };
|
||||
|
||||
// Clear
|
||||
|
|
@ -50,11 +59,11 @@ export class CalendarOrchestrator {
|
|||
// Render schedule unavailable zones (før events)
|
||||
await this.scheduleRenderer.render(container, filter);
|
||||
|
||||
// Render timed events in grid
|
||||
await this.eventRenderer.render(container, filter);
|
||||
// Render timed events in grid (med filterTemplate til matching)
|
||||
await this.eventRenderer.render(container, filter, filterTemplate);
|
||||
|
||||
// Render allDay events in header drawer
|
||||
await this.headerDrawerRenderer.render(container, filter);
|
||||
// Render allDay events in header drawer (med filterTemplate til matching)
|
||||
await this.headerDrawerRenderer.render(container, filter, filterTemplate);
|
||||
}
|
||||
|
||||
private selectRenderers(viewConfig: ViewConfig): IRenderer[] {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue