Adds resource-based calendar view mode
Introduces new ResourceColumnDataSource and ResourceHeaderRenderer to support column rendering by resources instead of dates Enables dynamic calendar mode switching between date and resource views Updates core managers and services to support async column retrieval Refactors data source interfaces to use Promise-based methods Improves calendar flexibility and resource management capabilities
This commit is contained in:
parent
a7d365b186
commit
eeaeddeef8
19 changed files with 765 additions and 991 deletions
25
src/index.ts
25
src/index.ts
|
|
@ -70,6 +70,9 @@ import { EventStackManager } from './managers/EventStackManager';
|
|||
import { EventLayoutCoordinator } from './managers/EventLayoutCoordinator';
|
||||
import { IColumnDataSource } from './types/ColumnDataSource';
|
||||
import { DateColumnDataSource } from './datasources/DateColumnDataSource';
|
||||
import { ResourceColumnDataSource } from './datasources/ResourceColumnDataSource';
|
||||
import { ResourceHeaderRenderer } from './renderers/ResourceHeaderRenderer';
|
||||
import { ResourceColumnRenderer } from './renderers/ResourceColumnRenderer';
|
||||
import { IBooking } from './types/BookingTypes';
|
||||
import { ICustomer } from './types/CustomerTypes';
|
||||
import { IResource } from './types/ResourceTypes';
|
||||
|
|
@ -137,13 +140,25 @@ async function initializeCalendar(): Promise<void> {
|
|||
builder.registerType(MockResourceRepository).as<IApiRepository<IResource>>();
|
||||
builder.registerType(MockAuditRepository).as<IApiRepository<IAuditEntry>>();
|
||||
|
||||
builder.registerType(DateColumnDataSource).as<IColumnDataSource>();
|
||||
// Calendar mode: 'date' or 'resource' (default to resource)
|
||||
const calendarMode: 'date' | 'resource' = 'resource';
|
||||
|
||||
// Register DataSource and HeaderRenderer based on mode
|
||||
if (calendarMode === 'resource') {
|
||||
builder.registerType(ResourceColumnDataSource).as<IColumnDataSource>();
|
||||
builder.registerType(ResourceHeaderRenderer).as<IHeaderRenderer>();
|
||||
} else {
|
||||
builder.registerType(DateColumnDataSource).as<IColumnDataSource>();
|
||||
builder.registerType(DateHeaderRenderer).as<IHeaderRenderer>();
|
||||
}
|
||||
|
||||
// Register entity services (sync status management)
|
||||
// Open/Closed Principle: Adding new entity only requires adding one line here
|
||||
builder.registerType(EventService).as<IEntityService<ICalendarEvent>>();
|
||||
builder.registerType(BookingService).as<IEntityService<IBooking>>();
|
||||
builder.registerType(CustomerService).as<IEntityService<ICustomer>>();
|
||||
builder.registerType(ResourceService).as<IEntityService<IResource>>();
|
||||
builder.registerType(ResourceService).as<ResourceService>();
|
||||
builder.registerType(AuditService).as<AuditService>();
|
||||
|
||||
// Register workers
|
||||
|
|
@ -151,8 +166,12 @@ async function initializeCalendar(): Promise<void> {
|
|||
builder.registerType(DataSeeder).as<DataSeeder>();
|
||||
|
||||
// Register renderers
|
||||
builder.registerType(DateHeaderRenderer).as<IHeaderRenderer>();
|
||||
builder.registerType(DateColumnRenderer).as<IColumnRenderer>();
|
||||
// Note: IHeaderRenderer and IColumnRenderer are registered above based on calendarMode
|
||||
if (calendarMode === 'resource') {
|
||||
builder.registerType(ResourceColumnRenderer).as<IColumnRenderer>();
|
||||
} else {
|
||||
builder.registerType(DateColumnRenderer).as<IColumnRenderer>();
|
||||
}
|
||||
builder.registerType(DateEventRenderer).as<IEventRenderer>();
|
||||
|
||||
// Register core services and utilities
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue