diff --git a/src/app/components/calendar-month/calendar-month.html b/src/app/components/calendar-month/calendar-month.html index 33d41a9..795a658 100644 --- a/src/app/components/calendar-month/calendar-month.html +++ b/src/app/components/calendar-month/calendar-month.html @@ -2,7 +2,7 @@

{{ getMonthName() }} {{ year }}

- @if (calendarSettingsService.showWeekNumbers()) { + @if (calendarSettingsService.get('showWeekNumbers')()) {

}

L

@@ -16,7 +16,7 @@
@for (week of weeksInAMonth; track $index) {
- @if (calendarSettingsService.showWeekNumbers()) { + @if (calendarSettingsService.get('showWeekNumbers')()) {

{ this.selectedDates = this.calendarService.getSelectedDatesForYear(); const vacationData = this.userInput.vacationNumberSignal(); - const c = this.calendarSettingsService.samediMalin(); + const c = this.calendarSettingsService.get('samediMalin')(); console.log('Samedi Malin setting:', c); console.log('Optimizing vacations with data:', vacationData); this.isLoading.set(true); diff --git a/src/app/components/dialog/calendar-settings-dialog/calendar-settings-dialog.html b/src/app/components/dialog/calendar-settings-dialog/calendar-settings-dialog.html index 24a0b00..4021c9d 100644 --- a/src/app/components/dialog/calendar-settings-dialog/calendar-settings-dialog.html +++ b/src/app/components/dialog/calendar-settings-dialog/calendar-settings-dialog.html @@ -4,15 +4,15 @@

Configure your calendar settings here.

- @for (signal of calendarSettingsService.settings; track signal.id) { + @for (setting of calendarSettingsService.settingsArray; track setting.id) {
- {{ signal.description }} + {{ setting.description }}
} diff --git a/src/app/services/calendar-service.ts b/src/app/services/calendar-service.ts index 8c1d2a3..f4a3141 100644 --- a/src/app/services/calendar-service.ts +++ b/src/app/services/calendar-service.ts @@ -540,7 +540,7 @@ export class SelectedDates implements SelectedDateInterface { calendarSettingsService: CalendarSettingsService, calendarService: CalendarService, ): void { - if (calendarSettingsService.samediMalin()) this.samediMalin(vacationsNumber); + if (calendarSettingsService.get('samediMalin')()) this.samediMalin(vacationsNumber); while (vacationsNumber.cp > 0) { const result = this.lookForVacation(DayType.CP, calendarService); if (result.heuristic === SelectedDates.NO_VALID_STRATEGY_HEURISTIC) { diff --git a/src/app/services/calendar-settings-service.spec.ts b/src/app/services/calendar-settings-service.spec.ts index 33dc540..e116ab4 100644 --- a/src/app/services/calendar-settings-service.spec.ts +++ b/src/app/services/calendar-settings-service.spec.ts @@ -17,17 +17,29 @@ describe('CalendarSettingsService', () => { }); it('should initialize with default values', () => { - expect(service.showWeekNumbers()).toBe(false); - expect(service.samediMalin()).toBe(true); + expect(service.get('showWeekNumbers')()).toBe(false); + expect(service.get('samediMalin')()).toBe(true); }); it('should allow updating showWeekNumbers', () => { - service.showWeekNumbers.set(true); - expect(service.showWeekNumbers()).toBe(true); + service.get('showWeekNumbers').set(true); + expect(service.get('showWeekNumbers')()).toBe(true); }); it('should allow updating samediMalin', () => { - service.samediMalin.set(false); - expect(service.samediMalin()).toBe(false); + service.get('samediMalin').set(false); + expect(service.get('samediMalin')()).toBe(false); + }); + + it('should provide settings array for UI iteration', () => { + const settingsArray = service.settingsArray; + expect(settingsArray.length).toBe(2); + expect(settingsArray[0].id).toBe('showWeekNumbers'); + expect(settingsArray[1].id).toBe('samediMalin'); + }); + + it('should return correct descriptions', () => { + expect(service.getDescription('showWeekNumbers')).toBe('Afficher les numéros de semaine'); + expect(service.getDescription('samediMalin')).toBe('Activer le Samedi Malin'); }); }); diff --git a/src/app/services/calendar-settings-service.ts b/src/app/services/calendar-settings-service.ts index 9295eb8..4364fdb 100644 --- a/src/app/services/calendar-settings-service.ts +++ b/src/app/services/calendar-settings-service.ts @@ -1,9 +1,8 @@ import { storedSignal } from '../shared/utils/stored-signal.'; import { Injectable, WritableSignal } from '@angular/core'; -interface CalendarSetting { - signal: WritableSignal; - id: string; +interface SettingDefinition { + defaultValue: boolean; description: string; } @@ -11,19 +10,45 @@ interface CalendarSetting { providedIn: 'root', }) export class CalendarSettingsService { - readonly showWeekNumbers = storedSignal('calendarSettings.showWeekNumbers', false); - readonly samediMalin = storedSignal('calendarSettings.samediMalin', true); + private readonly definitions = new Map([ + [ + 'showWeekNumbers', + { + defaultValue: false, + description: 'Afficher les numéros de semaine', + }, + ], + [ + 'samediMalin', + { + defaultValue: true, + description: 'Activer le Samedi Malin', + }, + ], + ]); - readonly settings: readonly CalendarSetting[] = [ - { - signal: this.showWeekNumbers, - id: 'showWeekNumbers', - description: 'Afficher les numéros de semaine', - }, - { - signal: this.samediMalin, - id: 'samediMalin', - description: 'Activer le Samedi Malin', - }, - ]; + private readonly signals = new Map>(); + + constructor() { + for (const [id, def] of this.definitions) { + const storageKey = `calendarSettings.${id}`; + this.signals.set(id, storedSignal(storageKey, def.defaultValue)); + } + } + + get(id: string): WritableSignal { + return this.signals.get(id)!; + } + + get settingsArray() { + return Array.from(this.definitions.entries()).map(([id, def]) => ({ + id, + signal: this.signals.get(id)!, + description: def.description, + })); + } + + getDescription(id: string): string { + return this.definitions.get(id)?.description ?? ''; + } }