Calendar/src/v2/features/resource/ResourceRenderer.ts
Janus C. H. Knudsen a3a1b9a421 Refactor calendar rendering with RenderBuilder
Simplifies calendar rendering process by introducing a new RenderBuilder pattern

Improves flexibility and modularity of grouping renderer chain
Decouples rendering logic from specific grouping types
Enables dynamic column span calculation and recursive rendering

Reduces complexity in CalendarOrchestrator
Enhances type safety and simplifies renderer interfaces
2025-12-09 00:51:41 +01:00

37 lines
994 B
TypeScript

import { from, IEnumerable } from 'ts-linq-light';
import { IGroupingRenderer, RenderContext } from '../../core/IGroupingRenderer';
import { NextFunction, RenderData } from '../../core/RenderBuilder';
interface Resource {
id: string;
name?: string;
}
export class ResourceRenderer implements IGroupingRenderer<Resource> {
readonly type = 'resource';
render(
resources: IEnumerable<Resource>,
data: RenderData,
next: NextFunction,
context: RenderContext
): void {
const dates = data.dates || from([]);
for (const resource of resources) {
const colspan = next.count(dates);
const cell = document.createElement('swp-resource-header');
cell.dataset.resourceId = resource.id;
cell.textContent = resource.name || resource.id;
if (colspan > 1) {
cell.style.gridColumn = `span ${colspan}`;
}
context.headerContainer.appendChild(cell);
next.render(dates);
}
}
}