Refactors renderer interfaces and implementations
Converts renderer interfaces to use 'I' prefix for better type clarity Adds async support for rendering pipeline Updates resource rendering to use ResourceService Removes hardcoded resource data Improves type safety and flexibility of rendering system
This commit is contained in:
parent
7f6279a6f3
commit
400de8c9d5
10 changed files with 46 additions and 47 deletions
|
|
@ -1,12 +1,12 @@
|
|||
import { Renderer, RenderContext } from '../../core/IGroupingRenderer';
|
||||
import { IRenderer, IRenderContext } from '../../core/IGroupingRenderer';
|
||||
import { DateService } from '../../core/DateService';
|
||||
|
||||
export class DateRenderer implements Renderer {
|
||||
export class DateRenderer implements IRenderer {
|
||||
readonly type = 'date';
|
||||
|
||||
constructor(private dateService: DateService) {}
|
||||
|
||||
render(context: RenderContext): void {
|
||||
render(context: IRenderContext): void {
|
||||
const dates = context.filter['date'] || [];
|
||||
const resourceIds = context.filter['resource'] || [];
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +1,20 @@
|
|||
import { Renderer, RenderContext } from '../../core/IGroupingRenderer';
|
||||
import { IRenderer, IRenderContext } from '../../core/IGroupingRenderer';
|
||||
import { ResourceService } from '../../storage/resources/ResourceService';
|
||||
|
||||
interface Resource {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export class ResourceRenderer implements Renderer {
|
||||
export class ResourceRenderer implements IRenderer {
|
||||
readonly type = 'resource';
|
||||
|
||||
// Hardcoded data
|
||||
private resources: Resource[] = [
|
||||
{ id: 'res1', name: 'Anders' },
|
||||
{ id: 'res2', name: 'Bente' },
|
||||
{ id: 'res3', name: 'Carsten' }
|
||||
];
|
||||
|
||||
render(context: RenderContext): void {
|
||||
const allowedIds = context.filter['resource'] || [];
|
||||
const filteredResources = this.resources.filter(r => allowedIds.includes(r.id));
|
||||
constructor(private resourceService: ResourceService) {}
|
||||
|
||||
async render(context: IRenderContext): Promise<void> {
|
||||
const resourceIds = context.filter['resource'] || [];
|
||||
const resources = await this.resourceService.getByIds(resourceIds);
|
||||
const dateCount = context.filter['date']?.length || 1;
|
||||
|
||||
// Render ALLE resource headers
|
||||
for (const resource of filteredResources) {
|
||||
for (const resource of resources) {
|
||||
const header = document.createElement('swp-resource-header');
|
||||
header.dataset.resourceId = resource.id;
|
||||
header.textContent = resource.name;
|
||||
header.textContent = resource.displayName;
|
||||
header.style.gridColumn = `span ${dateCount}`;
|
||||
context.headerContainer.appendChild(header);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { Renderer, RenderContext } from '../../core/IGroupingRenderer';
|
||||
import { IRenderer, IRenderContext } from '../../core/IGroupingRenderer';
|
||||
|
||||
interface Team {
|
||||
id: string;
|
||||
|
|
@ -6,7 +6,7 @@ interface Team {
|
|||
resourceIds: string[];
|
||||
}
|
||||
|
||||
export class TeamRenderer implements Renderer {
|
||||
export class TeamRenderer implements IRenderer {
|
||||
readonly type = 'team';
|
||||
|
||||
// Hardcoded data
|
||||
|
|
@ -15,7 +15,7 @@ export class TeamRenderer implements Renderer {
|
|||
{ id: 'team2', name: 'Team Beta', resourceIds: ['res3'] }
|
||||
];
|
||||
|
||||
render(context: RenderContext): void {
|
||||
render(context: IRenderContext): void {
|
||||
const allowedIds = context.filter['team'] || [];
|
||||
const filteredTeams = this.teams.filter(t => allowedIds.includes(t.id));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue