Calendar/src/v2/V2CompositionRoot.ts

98 lines
3.8 KiB
TypeScript
Raw Normal View History

import { Container } from '@novadi/core';
import { IGroupingRenderer } from './core/IGroupingRenderer';
import { IGroupingStore } from './core/IGroupingStore';
import { DateRenderer } from './features/date/DateRenderer';
import { DateService } from './core/DateService';
import { ITimeFormatConfig } from './core/ITimeFormatConfig';
import { ResourceRenderer } from './features/resource/ResourceRenderer';
import { TeamRenderer } from './features/team/TeamRenderer';
import { CalendarOrchestrator } from './core/CalendarOrchestrator';
import { TimeAxisRenderer } from './features/timeaxis/TimeAxisRenderer';
import { ScrollManager } from './core/ScrollManager';
2025-12-07 17:44:52 +01:00
import { HeaderDrawerManager } from './core/HeaderDrawerManager';
import { MockTeamStore, MockResourceStore } from './demo/MockStores';
import { DemoApp } from './demo/DemoApp';
// Event system
import { EventBus } from './core/EventBus';
import { IEventBus, ICalendarEvent, ISync } from './types/CalendarTypes';
// Storage
import { IndexedDBContext } from './storage/IndexedDBContext';
import { IStore } from './storage/IStore';
import { IEntityService } from './storage/IEntityService';
import { EventStore } from './storage/events/EventStore';
import { EventService } from './storage/events/EventService';
// Repositories
import { IApiRepository } from './repositories/IApiRepository';
import { MockEventRepository } from './repositories/MockEventRepository';
// Workers
import { DataSeeder } from './workers/DataSeeder';
2025-12-08 20:05:32 +01:00
// Features
import { EventRenderer } from './features/event/EventRenderer';
const defaultTimeFormatConfig: ITimeFormatConfig = {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
use24HourFormat: true,
locale: 'da-DK',
dateFormat: 'locale',
showSeconds: false
};
export function createV2Container(): Container {
const container = new Container();
const builder = container.builder();
// Config
builder.registerInstance(defaultTimeFormatConfig).as<ITimeFormatConfig>();
// Core - EventBus
builder.registerType(EventBus).as<EventBus>();
builder.registerType(EventBus).as<IEventBus>();
// Services
builder.registerType(DateService).as<DateService>();
// Storage infrastructure
builder.registerType(IndexedDBContext).as<IndexedDBContext>();
builder.registerType(EventStore).as<IStore>();
// Entity services
builder.registerType(EventService).as<IEntityService<ICalendarEvent>>();
builder.registerType(EventService).as<IEntityService<ISync>>();
builder.registerType(EventService).as<EventService>();
// Repositories
builder.registerType(MockEventRepository).as<IApiRepository<ICalendarEvent>>();
builder.registerType(MockEventRepository).as<IApiRepository<ISync>>();
// Workers
builder.registerType(DataSeeder).as<DataSeeder>();
2025-12-08 20:05:32 +01:00
// Features
builder.registerType(EventRenderer).as<EventRenderer>();
// Renderers - registreres som IGroupingRenderer (array injection til CalendarOrchestrator)
builder.registerType(DateRenderer).as<IGroupingRenderer>();
builder.registerType(ResourceRenderer).as<IGroupingRenderer>();
builder.registerType(TeamRenderer).as<IGroupingRenderer>();
// Stores - registreres som IGroupingStore
builder.registerType(MockTeamStore).as<IGroupingStore>();
builder.registerType(MockResourceStore).as<IGroupingStore>();
// CalendarOrchestrator modtager IGroupingStore[] automatisk (array injection)
builder.registerType(CalendarOrchestrator).as<CalendarOrchestrator>();
builder.registerType(TimeAxisRenderer).as<TimeAxisRenderer>();
builder.registerType(ScrollManager).as<ScrollManager>();
2025-12-07 17:44:52 +01:00
builder.registerType(HeaderDrawerManager).as<HeaderDrawerManager>();
// Demo app
builder.registerType(DemoApp).as<DemoApp>();
return builder.build();
}