import { Container } from '@novadi/core'; import { IRenderer } 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 { 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'; 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, IResource, IBooking, ICustomer, ITeam, IDepartment } 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'; import { ResourceStore } from './storage/resources/ResourceStore'; import { ResourceService } from './storage/resources/ResourceService'; 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'; import { DepartmentStore } from './storage/departments/DepartmentStore'; import { DepartmentService } from './storage/departments/DepartmentService'; import { SettingsStore } from './storage/settings/SettingsStore'; import { SettingsService } from './storage/settings/SettingsService'; import { ITenantSettings } from './types/SettingsTypes'; // Audit import { AuditStore } from './storage/audit/AuditStore'; import { AuditService } from './storage/audit/AuditService'; import { IAuditEntry } from './types/AuditTypes'; // Repositories import { IApiRepository } from './repositories/IApiRepository'; import { MockEventRepository } from './repositories/MockEventRepository'; 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'; import { MockDepartmentRepository } from './repositories/MockDepartmentRepository'; import { MockSettingsRepository } from './repositories/MockSettingsRepository'; // Workers import { DataSeeder } from './workers/DataSeeder'; // Features import { EventRenderer } from './features/event/EventRenderer'; import { ScheduleRenderer } from './features/schedule/ScheduleRenderer'; import { HeaderDrawerRenderer } from './features/headerdrawer/HeaderDrawerRenderer'; // Schedule import { ScheduleOverrideStore } from './storage/schedules/ScheduleOverrideStore'; import { ScheduleOverrideService } from './storage/schedules/ScheduleOverrideService'; import { ResourceScheduleService } from './storage/schedules/ResourceScheduleService'; // Managers import { DragDropManager } from './managers/DragDropManager'; import { EdgeScrollManager } from './managers/EdgeScrollManager'; import { ResizeManager } from './managers/ResizeManager'; import { EventPersistenceManager } from './managers/EventPersistenceManager'; const defaultTimeFormatConfig: ITimeFormatConfig = { timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, use24HourFormat: true, locale: 'da-DK', dateFormat: 'locale', showSeconds: false }; const defaultGridConfig: IGridConfig = { hourHeight: 64, dayStartHour: 6, dayEndHour: 18, snapInterval: 15, gridStartThresholdMinutes: 30 }; export function createV2Container(): Container { const container = new Container(); const builder = container.builder(); // Config builder.registerInstance(defaultTimeFormatConfig).as(); builder.registerInstance(defaultGridConfig).as(); // Core - EventBus builder.registerType(EventBus).as(); builder.registerType(EventBus).as(); // Services builder.registerType(DateService).as(); // Storage infrastructure builder.registerType(IndexedDBContext).as(); // Stores (for IndexedDB schema creation) builder.registerType(EventStore).as(); builder.registerType(ResourceStore).as(); builder.registerType(BookingStore).as(); builder.registerType(CustomerStore).as(); builder.registerType(TeamStore).as(); builder.registerType(DepartmentStore).as(); builder.registerType(ScheduleOverrideStore).as(); builder.registerType(AuditStore).as(); builder.registerType(SettingsStore).as(); // Entity services (for DataSeeder polymorphic array) builder.registerType(EventService).as>(); builder.registerType(EventService).as>(); builder.registerType(EventService).as(); builder.registerType(ResourceService).as>(); builder.registerType(ResourceService).as>(); builder.registerType(ResourceService).as(); builder.registerType(BookingService).as>(); builder.registerType(BookingService).as>(); builder.registerType(BookingService).as(); builder.registerType(CustomerService).as>(); builder.registerType(CustomerService).as>(); builder.registerType(CustomerService).as(); builder.registerType(TeamService).as>(); builder.registerType(TeamService).as>(); builder.registerType(TeamService).as(); builder.registerType(DepartmentService).as>(); builder.registerType(DepartmentService).as>(); builder.registerType(DepartmentService).as(); builder.registerType(SettingsService).as>(); builder.registerType(SettingsService).as>(); builder.registerType(SettingsService).as(); // Repositories (for DataSeeder polymorphic array) builder.registerType(MockEventRepository).as>(); builder.registerType(MockEventRepository).as>(); builder.registerType(MockResourceRepository).as>(); builder.registerType(MockResourceRepository).as>(); builder.registerType(MockBookingRepository).as>(); builder.registerType(MockBookingRepository).as>(); builder.registerType(MockCustomerRepository).as>(); builder.registerType(MockCustomerRepository).as>(); builder.registerType(MockAuditRepository).as>(); builder.registerType(MockAuditRepository).as>(); builder.registerType(MockTeamRepository).as>(); builder.registerType(MockTeamRepository).as>(); builder.registerType(MockDepartmentRepository).as>(); builder.registerType(MockDepartmentRepository).as>(); builder.registerType(MockSettingsRepository).as>(); builder.registerType(MockSettingsRepository).as>(); // Audit service (listens to ENTITY_SAVED/DELETED events automatically) builder.registerType(AuditService).as(); // Workers builder.registerType(DataSeeder).as(); // Schedule services builder.registerType(ScheduleOverrideService).as(); builder.registerType(ResourceScheduleService).as(); // Features builder.registerType(EventRenderer).as(); builder.registerType(ScheduleRenderer).as(); builder.registerType(HeaderDrawerRenderer).as(); // Renderers - registreres som Renderer (array injection til CalendarOrchestrator) builder.registerType(DateRenderer).as(); builder.registerType(ResourceRenderer).as(); builder.registerType(TeamRenderer).as(); builder.registerType(DepartmentRenderer).as(); // Stores - registreres som IGroupingStore builder.registerType(MockTeamStore).as(); builder.registerType(MockResourceStore).as(); // CalendarOrchestrator modtager IGroupingStore[] automatisk (array injection) builder.registerType(CalendarOrchestrator).as(); builder.registerType(TimeAxisRenderer).as(); builder.registerType(ScrollManager).as(); builder.registerType(HeaderDrawerManager).as(); builder.registerType(DragDropManager).as(); builder.registerType(EdgeScrollManager).as(); builder.registerType(ResizeManager).as(); builder.registerType(EventPersistenceManager).as(); // Demo app builder.registerType(DemoApp).as(); return builder.build(); }