This commit is contained in:
Janus C. H. Knudsen 2025-12-09 21:02:44 +01:00
parent c16e432b29
commit 2ec4b93fa5
9 changed files with 187 additions and 249 deletions

View file

@ -1,37 +1,37 @@
import { from, IEnumerable } from 'ts-linq-light';
import { IGroupingRenderer, RenderContext } from '../../core/IGroupingRenderer';
import { NextFunction, RenderData } from '../../core/RenderBuilder';
import { Renderer, RenderContext } from '../../core/IGroupingRenderer';
interface Resource {
id: string;
name?: string;
name: string;
}
export class ResourceRenderer implements IGroupingRenderer<Resource> {
export class ResourceRenderer implements Renderer {
readonly type = 'resource';
next: Renderer | null = null;
render(
resources: IEnumerable<Resource>,
data: RenderData,
next: NextFunction,
context: RenderContext
): void {
const dates = data.dates || from([]);
// Hardcoded data
private resources: Resource[] = [
{ id: 'res1', name: 'Anders' },
{ id: 'res2', name: 'Bente' },
{ id: 'res3', name: 'Carsten' }
];
for (const resource of resources) {
const colspan = next.count(dates);
render(context: RenderContext): void {
const allowedIds = context.filter['resource'] || [];
const filteredResources = this.resources.filter(r => allowedIds.includes(r.id));
const cell = document.createElement('swp-resource-header');
cell.dataset.resourceId = resource.id;
cell.textContent = resource.name || resource.id;
const dateCount = context.filter['date']?.length || 1;
if (colspan > 1) {
cell.style.gridColumn = `span ${colspan}`;
}
context.headerContainer.appendChild(cell);
next.render(dates);
// Render ALLE resource headers
for (const resource of filteredResources) {
const header = document.createElement('swp-resource-header');
header.dataset.resourceId = resource.id;
header.textContent = resource.name;
header.style.gridColumn = `span ${dateCount}`;
context.headerContainer.appendChild(header);
}
// Derefter kald next ÉN gang
if (this.next) this.next.render(context);
}
}