2025-12-07 14:31:16 +01:00
|
|
|
import { Container } from '@novadi/core';
|
2025-12-09 23:16:13 +01:00
|
|
|
import { IRenderer } from './core/IGroupingRenderer';
|
2025-12-07 14:31:16 +01:00
|
|
|
import { IGroupingStore } from './core/IGroupingStore';
|
|
|
|
|
import { DateRenderer } from './features/date/DateRenderer';
|
|
|
|
|
import { DateService } from './core/DateService';
|
|
|
|
|
import { ITimeFormatConfig } from './core/ITimeFormatConfig';
|
2025-12-10 00:27:19 +01:00
|
|
|
import { IGridConfig } from './core/IGridConfig';
|
2025-12-07 14:31:16 +01:00
|
|
|
import { ResourceRenderer } from './features/resource/ResourceRenderer';
|
|
|
|
|
import { TeamRenderer } from './features/team/TeamRenderer';
|
|
|
|
|
import { CalendarOrchestrator } from './core/CalendarOrchestrator';
|
|
|
|
|
import { TimeAxisRenderer } from './features/timeaxis/TimeAxisRenderer';
|
2025-12-07 15:08:23 +01:00
|
|
|
import { ScrollManager } from './core/ScrollManager';
|
2025-12-07 17:44:52 +01:00
|
|
|
import { HeaderDrawerManager } from './core/HeaderDrawerManager';
|
2025-12-07 14:31:16 +01:00
|
|
|
import { MockTeamStore, MockResourceStore } from './demo/MockStores';
|
|
|
|
|
import { DemoApp } from './demo/DemoApp';
|
|
|
|
|
|
2025-12-08 00:26:16 +01:00
|
|
|
// Event system
|
|
|
|
|
import { EventBus } from './core/EventBus';
|
2025-12-09 22:31:28 +01:00
|
|
|
import { IEventBus, ICalendarEvent, ISync, IResource, IBooking, ICustomer } from './types/CalendarTypes';
|
2025-12-08 00:26:16 +01:00
|
|
|
|
|
|
|
|
// 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';
|
2025-12-09 22:31:28 +01:00
|
|
|
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';
|
2025-12-08 00:26:16 +01:00
|
|
|
|
2025-12-11 18:11:11 +01:00
|
|
|
// Audit
|
|
|
|
|
import { AuditStore } from './storage/audit/AuditStore';
|
|
|
|
|
import { AuditService } from './storage/audit/AuditService';
|
|
|
|
|
import { IAuditEntry } from './types/AuditTypes';
|
|
|
|
|
|
2025-12-08 00:26:16 +01:00
|
|
|
// Repositories
|
|
|
|
|
import { IApiRepository } from './repositories/IApiRepository';
|
|
|
|
|
import { MockEventRepository } from './repositories/MockEventRepository';
|
2025-12-09 22:31:28 +01:00
|
|
|
import { MockResourceRepository } from './repositories/MockResourceRepository';
|
|
|
|
|
import { MockBookingRepository } from './repositories/MockBookingRepository';
|
|
|
|
|
import { MockCustomerRepository } from './repositories/MockCustomerRepository';
|
2025-12-11 18:11:11 +01:00
|
|
|
import { MockAuditRepository } from './repositories/MockAuditRepository';
|
2025-12-08 00:26:16 +01:00
|
|
|
|
|
|
|
|
// Workers
|
|
|
|
|
import { DataSeeder } from './workers/DataSeeder';
|
|
|
|
|
|
2025-12-08 20:05:32 +01:00
|
|
|
// Features
|
|
|
|
|
import { EventRenderer } from './features/event/EventRenderer';
|
2025-12-10 00:27:19 +01:00
|
|
|
import { ScheduleRenderer } from './features/schedule/ScheduleRenderer';
|
2025-12-10 23:11:11 +01:00
|
|
|
import { HeaderDrawerRenderer } from './features/headerdrawer/HeaderDrawerRenderer';
|
2025-12-10 00:27:19 +01:00
|
|
|
|
|
|
|
|
// Schedule
|
|
|
|
|
import { ScheduleOverrideStore } from './storage/schedules/ScheduleOverrideStore';
|
|
|
|
|
import { ScheduleOverrideService } from './storage/schedules/ScheduleOverrideService';
|
|
|
|
|
import { ResourceScheduleService } from './storage/schedules/ResourceScheduleService';
|
2025-12-08 20:05:32 +01:00
|
|
|
|
2025-12-10 17:07:03 +01:00
|
|
|
// Managers
|
|
|
|
|
import { DragDropManager } from './managers/DragDropManager';
|
2025-12-10 19:12:38 +01:00
|
|
|
import { EdgeScrollManager } from './managers/EdgeScrollManager';
|
2025-12-10 22:16:40 +01:00
|
|
|
import { ResizeManager } from './managers/ResizeManager';
|
2025-12-11 18:11:11 +01:00
|
|
|
import { EventPersistenceManager } from './managers/EventPersistenceManager';
|
2025-12-10 17:07:03 +01:00
|
|
|
|
2025-12-07 14:31:16 +01:00
|
|
|
const defaultTimeFormatConfig: ITimeFormatConfig = {
|
|
|
|
|
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
|
|
|
use24HourFormat: true,
|
|
|
|
|
locale: 'da-DK',
|
|
|
|
|
dateFormat: 'locale',
|
|
|
|
|
showSeconds: false
|
|
|
|
|
};
|
|
|
|
|
|
2025-12-10 00:27:19 +01:00
|
|
|
const defaultGridConfig: IGridConfig = {
|
|
|
|
|
hourHeight: 64,
|
|
|
|
|
dayStartHour: 6,
|
|
|
|
|
dayEndHour: 18,
|
2025-12-11 18:11:11 +01:00
|
|
|
snapInterval: 15,
|
|
|
|
|
gridStartThresholdMinutes: 30
|
2025-12-10 00:27:19 +01:00
|
|
|
};
|
|
|
|
|
|
2025-12-07 14:31:16 +01:00
|
|
|
export function createV2Container(): Container {
|
|
|
|
|
const container = new Container();
|
|
|
|
|
const builder = container.builder();
|
|
|
|
|
|
|
|
|
|
// Config
|
|
|
|
|
builder.registerInstance(defaultTimeFormatConfig).as<ITimeFormatConfig>();
|
2025-12-10 00:27:19 +01:00
|
|
|
builder.registerInstance(defaultGridConfig).as<IGridConfig>();
|
2025-12-07 14:31:16 +01:00
|
|
|
|
2025-12-08 00:26:16 +01:00
|
|
|
// Core - EventBus
|
|
|
|
|
builder.registerType(EventBus).as<EventBus>();
|
|
|
|
|
builder.registerType(EventBus).as<IEventBus>();
|
|
|
|
|
|
2025-12-07 14:31:16 +01:00
|
|
|
// Services
|
|
|
|
|
builder.registerType(DateService).as<DateService>();
|
2025-12-08 00:26:16 +01:00
|
|
|
|
|
|
|
|
// Storage infrastructure
|
|
|
|
|
builder.registerType(IndexedDBContext).as<IndexedDBContext>();
|
2025-12-09 22:31:28 +01:00
|
|
|
|
|
|
|
|
// Stores (for IndexedDB schema creation)
|
2025-12-08 00:26:16 +01:00
|
|
|
builder.registerType(EventStore).as<IStore>();
|
2025-12-09 22:31:28 +01:00
|
|
|
builder.registerType(ResourceStore).as<IStore>();
|
|
|
|
|
builder.registerType(BookingStore).as<IStore>();
|
|
|
|
|
builder.registerType(CustomerStore).as<IStore>();
|
2025-12-10 00:27:19 +01:00
|
|
|
builder.registerType(ScheduleOverrideStore).as<IStore>();
|
2025-12-11 18:11:11 +01:00
|
|
|
builder.registerType(AuditStore).as<IStore>();
|
2025-12-08 00:26:16 +01:00
|
|
|
|
2025-12-09 22:31:28 +01:00
|
|
|
// Entity services (for DataSeeder polymorphic array)
|
2025-12-08 00:26:16 +01:00
|
|
|
builder.registerType(EventService).as<IEntityService<ICalendarEvent>>();
|
|
|
|
|
builder.registerType(EventService).as<IEntityService<ISync>>();
|
|
|
|
|
builder.registerType(EventService).as<EventService>();
|
|
|
|
|
|
2025-12-09 22:31:28 +01:00
|
|
|
builder.registerType(ResourceService).as<IEntityService<IResource>>();
|
|
|
|
|
builder.registerType(ResourceService).as<IEntityService<ISync>>();
|
|
|
|
|
builder.registerType(ResourceService).as<ResourceService>();
|
|
|
|
|
|
|
|
|
|
builder.registerType(BookingService).as<IEntityService<IBooking>>();
|
|
|
|
|
builder.registerType(BookingService).as<IEntityService<ISync>>();
|
|
|
|
|
builder.registerType(BookingService).as<BookingService>();
|
|
|
|
|
|
|
|
|
|
builder.registerType(CustomerService).as<IEntityService<ICustomer>>();
|
|
|
|
|
builder.registerType(CustomerService).as<IEntityService<ISync>>();
|
|
|
|
|
builder.registerType(CustomerService).as<CustomerService>();
|
|
|
|
|
|
|
|
|
|
// Repositories (for DataSeeder polymorphic array)
|
2025-12-08 00:26:16 +01:00
|
|
|
builder.registerType(MockEventRepository).as<IApiRepository<ICalendarEvent>>();
|
|
|
|
|
builder.registerType(MockEventRepository).as<IApiRepository<ISync>>();
|
|
|
|
|
|
2025-12-09 22:31:28 +01:00
|
|
|
builder.registerType(MockResourceRepository).as<IApiRepository<IResource>>();
|
|
|
|
|
builder.registerType(MockResourceRepository).as<IApiRepository<ISync>>();
|
|
|
|
|
|
|
|
|
|
builder.registerType(MockBookingRepository).as<IApiRepository<IBooking>>();
|
|
|
|
|
builder.registerType(MockBookingRepository).as<IApiRepository<ISync>>();
|
|
|
|
|
|
|
|
|
|
builder.registerType(MockCustomerRepository).as<IApiRepository<ICustomer>>();
|
|
|
|
|
builder.registerType(MockCustomerRepository).as<IApiRepository<ISync>>();
|
|
|
|
|
|
2025-12-11 18:11:11 +01:00
|
|
|
builder.registerType(MockAuditRepository).as<IApiRepository<IAuditEntry>>();
|
|
|
|
|
builder.registerType(MockAuditRepository).as<IApiRepository<ISync>>();
|
|
|
|
|
|
|
|
|
|
// Audit service (listens to ENTITY_SAVED/DELETED events automatically)
|
|
|
|
|
builder.registerType(AuditService).as<AuditService>();
|
|
|
|
|
|
2025-12-08 00:26:16 +01:00
|
|
|
// Workers
|
|
|
|
|
builder.registerType(DataSeeder).as<DataSeeder>();
|
2025-12-07 14:31:16 +01:00
|
|
|
|
2025-12-10 00:27:19 +01:00
|
|
|
// Schedule services
|
|
|
|
|
builder.registerType(ScheduleOverrideService).as<ScheduleOverrideService>();
|
|
|
|
|
builder.registerType(ResourceScheduleService).as<ResourceScheduleService>();
|
|
|
|
|
|
2025-12-08 20:05:32 +01:00
|
|
|
// Features
|
|
|
|
|
builder.registerType(EventRenderer).as<EventRenderer>();
|
2025-12-10 00:27:19 +01:00
|
|
|
builder.registerType(ScheduleRenderer).as<ScheduleRenderer>();
|
2025-12-10 23:11:11 +01:00
|
|
|
builder.registerType(HeaderDrawerRenderer).as<HeaderDrawerRenderer>();
|
2025-12-08 20:05:32 +01:00
|
|
|
|
2025-12-09 21:02:44 +01:00
|
|
|
// Renderers - registreres som Renderer (array injection til CalendarOrchestrator)
|
2025-12-09 23:16:13 +01:00
|
|
|
builder.registerType(DateRenderer).as<IRenderer>();
|
|
|
|
|
builder.registerType(ResourceRenderer).as<IRenderer>();
|
|
|
|
|
builder.registerType(TeamRenderer).as<IRenderer>();
|
2025-12-07 14:31:16 +01:00
|
|
|
|
|
|
|
|
// 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>();
|
2025-12-07 15:08:23 +01:00
|
|
|
builder.registerType(ScrollManager).as<ScrollManager>();
|
2025-12-07 17:44:52 +01:00
|
|
|
builder.registerType(HeaderDrawerManager).as<HeaderDrawerManager>();
|
2025-12-10 17:07:03 +01:00
|
|
|
builder.registerType(DragDropManager).as<DragDropManager>();
|
2025-12-10 19:12:38 +01:00
|
|
|
builder.registerType(EdgeScrollManager).as<EdgeScrollManager>();
|
2025-12-10 22:16:40 +01:00
|
|
|
builder.registerType(ResizeManager).as<ResizeManager>();
|
2025-12-11 18:11:11 +01:00
|
|
|
builder.registerType(EventPersistenceManager).as<EventPersistenceManager>();
|
2025-12-07 14:31:16 +01:00
|
|
|
|
|
|
|
|
// Demo app
|
|
|
|
|
builder.registerType(DemoApp).as<DemoApp>();
|
|
|
|
|
|
|
|
|
|
return builder.build();
|
|
|
|
|
}
|