Adds department view to calendar application

Introduces department-level grouping and rendering in the calendar view

Extends the application to support:
- Department-based resource filtering
- Dynamic department header rendering
- Mock department data infrastructure

Enables more granular organizational views
This commit is contained in:
Janus C. H. Knudsen 2025-12-15 18:23:08 +01:00
parent d4249eecfb
commit 570c91527a
11 changed files with 199 additions and 5 deletions

View file

@ -7,6 +7,7 @@ import { ITimeFormatConfig } from './core/ITimeFormatConfig';
import { IGridConfig } from './core/IGridConfig';
import { ResourceRenderer } from './features/resource/ResourceRenderer';
import { TeamRenderer } from './features/team/TeamRenderer';
import { DepartmentRenderer } from './features/department/DepartmentRenderer';
import { CalendarOrchestrator } from './core/CalendarOrchestrator';
import { TimeAxisRenderer } from './features/timeaxis/TimeAxisRenderer';
import { ScrollManager } from './core/ScrollManager';
@ -16,7 +17,7 @@ import { DemoApp } from './demo/DemoApp';
// Event system
import { EventBus } from './core/EventBus';
import { IEventBus, ICalendarEvent, ISync, IResource, IBooking, ICustomer, ITeam } from './types/CalendarTypes';
import { IEventBus, ICalendarEvent, ISync, IResource, IBooking, ICustomer, ITeam, IDepartment } from './types/CalendarTypes';
// Storage
import { IndexedDBContext } from './storage/IndexedDBContext';
@ -32,6 +33,8 @@ import { CustomerStore } from './storage/customers/CustomerStore';
import { CustomerService } from './storage/customers/CustomerService';
import { TeamStore } from './storage/teams/TeamStore';
import { TeamService } from './storage/teams/TeamService';
import { DepartmentStore } from './storage/departments/DepartmentStore';
import { DepartmentService } from './storage/departments/DepartmentService';
// Audit
import { AuditStore } from './storage/audit/AuditStore';
@ -46,6 +49,7 @@ import { MockBookingRepository } from './repositories/MockBookingRepository';
import { MockCustomerRepository } from './repositories/MockCustomerRepository';
import { MockAuditRepository } from './repositories/MockAuditRepository';
import { MockTeamRepository } from './repositories/MockTeamRepository';
import { MockDepartmentRepository } from './repositories/MockDepartmentRepository';
// Workers
import { DataSeeder } from './workers/DataSeeder';
@ -106,6 +110,7 @@ export function createV2Container(): Container {
builder.registerType(BookingStore).as<IStore>();
builder.registerType(CustomerStore).as<IStore>();
builder.registerType(TeamStore).as<IStore>();
builder.registerType(DepartmentStore).as<IStore>();
builder.registerType(ScheduleOverrideStore).as<IStore>();
builder.registerType(AuditStore).as<IStore>();
@ -130,6 +135,10 @@ export function createV2Container(): Container {
builder.registerType(TeamService).as<IEntityService<ISync>>();
builder.registerType(TeamService).as<TeamService>();
builder.registerType(DepartmentService).as<IEntityService<IDepartment>>();
builder.registerType(DepartmentService).as<IEntityService<ISync>>();
builder.registerType(DepartmentService).as<DepartmentService>();
// Repositories (for DataSeeder polymorphic array)
builder.registerType(MockEventRepository).as<IApiRepository<ICalendarEvent>>();
builder.registerType(MockEventRepository).as<IApiRepository<ISync>>();
@ -149,6 +158,9 @@ export function createV2Container(): Container {
builder.registerType(MockTeamRepository).as<IApiRepository<ITeam>>();
builder.registerType(MockTeamRepository).as<IApiRepository<ISync>>();
builder.registerType(MockDepartmentRepository).as<IApiRepository<IDepartment>>();
builder.registerType(MockDepartmentRepository).as<IApiRepository<ISync>>();
// Audit service (listens to ENTITY_SAVED/DELETED events automatically)
builder.registerType(AuditService).as<AuditService>();
@ -168,6 +180,7 @@ export function createV2Container(): Container {
builder.registerType(DateRenderer).as<IRenderer>();
builder.registerType(ResourceRenderer).as<IRenderer>();
builder.registerType(TeamRenderer).as<IRenderer>();
builder.registerType(DepartmentRenderer).as<IRenderer>();
// Stores - registreres som IGroupingStore
builder.registerType(MockTeamStore).as<IGroupingStore>();