Adds workweek settings and dynamic view configuration
Introduces settings service for managing tenant-specific calendar configurations Enables dynamic workweek presets with configurable work days Improves view switching with enhanced UI components Adds flexible calendar rendering based on tenant settings Extends DateService to support workweek date generation
This commit is contained in:
parent
58cedb9fad
commit
ad2df353b5
13 changed files with 751 additions and 38 deletions
|
|
@ -13,12 +13,15 @@ import { ResizeManager } from '../managers/ResizeManager';
|
|||
import { EventPersistenceManager } from '../managers/EventPersistenceManager';
|
||||
import { HeaderDrawerRenderer } from '../features/headerdrawer/HeaderDrawerRenderer';
|
||||
import { AuditService } from '../storage/audit/AuditService';
|
||||
import { SettingsService } from '../storage/settings/SettingsService';
|
||||
import { IWorkweekPreset } from '../types/SettingsTypes';
|
||||
|
||||
export class DemoApp {
|
||||
private animator!: NavigationAnimator;
|
||||
private container!: HTMLElement;
|
||||
private weekOffset = 0;
|
||||
private currentView: 'day' | 'simple' | 'resource' | 'team' | 'department' = 'simple';
|
||||
private workweekPreset: IWorkweekPreset | null = null;
|
||||
|
||||
constructor(
|
||||
private orchestrator: CalendarOrchestrator,
|
||||
|
|
@ -33,7 +36,8 @@ export class DemoApp {
|
|||
private resizeManager: ResizeManager,
|
||||
private headerDrawerRenderer: HeaderDrawerRenderer,
|
||||
private eventPersistenceManager: EventPersistenceManager,
|
||||
private auditService: AuditService
|
||||
private auditService: AuditService,
|
||||
private settingsService: SettingsService
|
||||
) {}
|
||||
|
||||
async init(): Promise<void> {
|
||||
|
|
@ -48,6 +52,10 @@ export class DemoApp {
|
|||
await this.dataSeeder.seedIfEmpty();
|
||||
console.log('[DemoApp] Data seeding complete');
|
||||
|
||||
// Load default workweek preset from settings
|
||||
this.workweekPreset = await this.settingsService.getDefaultWorkweekPreset();
|
||||
console.log('[DemoApp] Workweek preset loaded:', this.workweekPreset?.id);
|
||||
|
||||
this.container = document.querySelector('swp-calendar-container') as HTMLElement;
|
||||
|
||||
// NavigationAnimator har DOM-dependencies - tilladt med new
|
||||
|
|
@ -90,7 +98,9 @@ export class DemoApp {
|
|||
}
|
||||
|
||||
private buildViewConfig(): ViewConfig {
|
||||
const dates = this.dateService.getWeekDates(this.weekOffset, 3);
|
||||
// Use workweek preset to determine which days to show
|
||||
const workDays = this.workweekPreset?.workDays || [1, 2, 3, 4, 5]; // Fallback to Mon-Fri
|
||||
const dates = this.dateService.getWorkWeekDates(this.weekOffset, workDays);
|
||||
const today = this.dateService.getWeekDates(this.weekOffset, 1);
|
||||
|
||||
switch (this.currentView) {
|
||||
|
|
@ -155,29 +165,32 @@ export class DemoApp {
|
|||
}
|
||||
|
||||
private setupViewSwitching(): void {
|
||||
document.getElementById('btn-day')?.addEventListener('click', () => {
|
||||
this.currentView = 'day';
|
||||
this.render();
|
||||
// View chip buttons
|
||||
const chips = document.querySelectorAll('.view-chip');
|
||||
chips.forEach(chip => {
|
||||
chip.addEventListener('click', () => {
|
||||
// Update active state
|
||||
chips.forEach(c => c.classList.remove('active'));
|
||||
chip.classList.add('active');
|
||||
|
||||
// Switch view
|
||||
const view = (chip as HTMLElement).dataset.view as typeof this.currentView;
|
||||
if (view) {
|
||||
this.currentView = view;
|
||||
this.render();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('btn-simple')?.addEventListener('click', () => {
|
||||
this.currentView = 'simple';
|
||||
this.render();
|
||||
});
|
||||
|
||||
document.getElementById('btn-resource')?.addEventListener('click', () => {
|
||||
this.currentView = 'resource';
|
||||
this.render();
|
||||
});
|
||||
|
||||
document.getElementById('btn-team')?.addEventListener('click', () => {
|
||||
this.currentView = 'team';
|
||||
this.render();
|
||||
});
|
||||
|
||||
document.getElementById('btn-department')?.addEventListener('click', () => {
|
||||
this.currentView = 'department';
|
||||
this.render();
|
||||
// Workweek preset dropdown
|
||||
const workweekSelect = document.getElementById('workweek-select') as HTMLSelectElement;
|
||||
workweekSelect?.addEventListener('change', async () => {
|
||||
const presetId = workweekSelect.value;
|
||||
const preset = await this.settingsService.getWorkweekPreset(presetId);
|
||||
if (preset) {
|
||||
this.workweekPreset = preset;
|
||||
this.render();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue