Adds hierarchical grouping and entity resolution support

Enhances calendar rendering with dynamic parent-child relationships between entities

Introduces EntityResolver for dot-notation references
Supports belongsTo configuration in grouping
Implements flexible filtering across hierarchical entities

Improves rendering flexibility for complex organizational structures
This commit is contained in:
Janus C. H. Knudsen 2025-12-15 17:10:43 +01:00
parent dd647acab8
commit d4249eecfb
17 changed files with 403 additions and 44 deletions

View file

@ -16,7 +16,7 @@ import { DemoApp } from './demo/DemoApp';
// Event system
import { EventBus } from './core/EventBus';
import { IEventBus, ICalendarEvent, ISync, IResource, IBooking, ICustomer } from './types/CalendarTypes';
import { IEventBus, ICalendarEvent, ISync, IResource, IBooking, ICustomer, ITeam } from './types/CalendarTypes';
// Storage
import { IndexedDBContext } from './storage/IndexedDBContext';
@ -30,6 +30,8 @@ import { BookingStore } from './storage/bookings/BookingStore';
import { BookingService } from './storage/bookings/BookingService';
import { CustomerStore } from './storage/customers/CustomerStore';
import { CustomerService } from './storage/customers/CustomerService';
import { TeamStore } from './storage/teams/TeamStore';
import { TeamService } from './storage/teams/TeamService';
// Audit
import { AuditStore } from './storage/audit/AuditStore';
@ -43,6 +45,7 @@ import { MockResourceRepository } from './repositories/MockResourceRepository';
import { MockBookingRepository } from './repositories/MockBookingRepository';
import { MockCustomerRepository } from './repositories/MockCustomerRepository';
import { MockAuditRepository } from './repositories/MockAuditRepository';
import { MockTeamRepository } from './repositories/MockTeamRepository';
// Workers
import { DataSeeder } from './workers/DataSeeder';
@ -102,6 +105,7 @@ export function createV2Container(): Container {
builder.registerType(ResourceStore).as<IStore>();
builder.registerType(BookingStore).as<IStore>();
builder.registerType(CustomerStore).as<IStore>();
builder.registerType(TeamStore).as<IStore>();
builder.registerType(ScheduleOverrideStore).as<IStore>();
builder.registerType(AuditStore).as<IStore>();
@ -122,6 +126,10 @@ export function createV2Container(): Container {
builder.registerType(CustomerService).as<IEntityService<ISync>>();
builder.registerType(CustomerService).as<CustomerService>();
builder.registerType(TeamService).as<IEntityService<ITeam>>();
builder.registerType(TeamService).as<IEntityService<ISync>>();
builder.registerType(TeamService).as<TeamService>();
// Repositories (for DataSeeder polymorphic array)
builder.registerType(MockEventRepository).as<IApiRepository<ICalendarEvent>>();
builder.registerType(MockEventRepository).as<IApiRepository<ISync>>();
@ -138,6 +146,9 @@ export function createV2Container(): Container {
builder.registerType(MockAuditRepository).as<IApiRepository<IAuditEntry>>();
builder.registerType(MockAuditRepository).as<IApiRepository<ISync>>();
builder.registerType(MockTeamRepository).as<IApiRepository<ITeam>>();
builder.registerType(MockTeamRepository).as<IApiRepository<ISync>>();
// Audit service (listens to ENTITY_SAVED/DELETED events automatically)
builder.registerType(AuditService).as<AuditService>();