feat(calendar): add explained period feature and update translations

This commit is contained in:
nessar committed 2026-10-03 17:40:42 +02:00
1 parent 01c87d1e44
commit dd16db8c87
12 files changed
+134 -123

No files matched your search

@@ -260,13 +260,22 @@ export class CalendarYear {
});
protected readonly currentPlacementDate = computed(() => {
if (this.counterfactual())
return this.selectedCounterfactualDate() ?? this.counterfactual()!.placement.date;
if (this.traceReplay())
return this.selectedTraceDate() ?? this.selectedTraceDecision()?.dates[0] ?? null;
return this.selectedExplanation()?.placement.date ?? null;
return (
this.selectedCounterfactualDate() ??
this.selectedTraceDate() ??
this.selectedTraceDecision()?.dates[0] ??
null
);
return this.planDetailsOpen() ? (this.selectedExplanation()?.placement.date ?? null) : null;
});
protected readonly explainedPeriod = computed(() =>
this.planDetailsOpen() && !this.traceReplay()
? this.selectedExplanation()?.timeOffPeriod
: undefined,
);
protected readonly dateStatuses = computed<Readonly<Record<string, CalendarDayStatus>>>(() => {
const statuses: Record<string, CalendarDayStatus> = {};
const trace = this.planningTrace();
@@ -543,7 +552,7 @@ export class CalendarYear {
this.planningExplanation.set(explanation ?? null);
if (explanation?.kind === 'PlanExplanation') {
this.planDetailsOpen.set(true);
this.selectPlacement(0, false, false);
this.selectPlacement(0, false);
this.liveMessage.set(
`${this.planningOutcome() ? this.outcomeLabel(this.planningOutcome()!) : ''} ${this.placementAnnouncement()}`.trim(),
);
@@ -621,7 +630,7 @@ export class CalendarYear {
this.userInput.remainingVacationDaysSignal.set([]);
}
protected selectPlacement(index: number, analyze = true, announce = true): void {
protected selectPlacement(index: number, announce = true): void {
const explanation = this.planExplanation();
if (!explanation?.placements.length) return;
const selected = Math.max(0, Math.min(index, explanation.placements.length - 1));
@@ -630,7 +639,6 @@ export class CalendarYear {
this.clearCounterfactual();
this.selectedCounterfactualDate.set(explanation.placements[selected].placement.date);
if (announce) this.liveMessage.set(this.placementAnnouncement());
if (analyze) void this.analyzeSelection(explanation.placements[selected].placement);
}
protected compareDates(): void {