Refactor calendar V2 core with DI and new features
Introduces dependency injection container and composition root Adds core services like DateService and NavigationAnimator Simplifies CalendarOrchestrator with improved store handling Implements mock stores and demo application for V2 calendar
This commit is contained in:
parent
1ad7d10266
commit
a0c0ef9e8d
17 changed files with 331 additions and 134 deletions
53
src/v2/V2CompositionRoot.ts
Normal file
53
src/v2/V2CompositionRoot.ts
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
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 { RendererRegistry } from './core/RendererRegistry';
|
||||
import { CalendarOrchestrator } from './core/CalendarOrchestrator';
|
||||
import { TimeAxisRenderer } from './features/timeaxis/TimeAxisRenderer';
|
||||
import { MockTeamStore, MockResourceStore } from './demo/MockStores';
|
||||
import { DemoApp } from './demo/DemoApp';
|
||||
|
||||
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>();
|
||||
|
||||
// Services
|
||||
builder.registerType(DateService).as<DateService>();
|
||||
|
||||
// Renderers - registreres som IGroupingRenderer
|
||||
builder.registerType(DateRenderer).as<IGroupingRenderer>();
|
||||
builder.registerType(ResourceRenderer).as<IGroupingRenderer>();
|
||||
builder.registerType(TeamRenderer).as<IGroupingRenderer>();
|
||||
|
||||
// RendererRegistry modtager IGroupingRenderer[] automatisk (array injection)
|
||||
builder.registerType(RendererRegistry).as<RendererRegistry>();
|
||||
|
||||
// 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>();
|
||||
|
||||
// Demo app
|
||||
builder.registerType(DemoApp).as<DemoApp>();
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue