This commit is contained in:
nessar committed 2026-10-04 23:19:21 +02:00
1 parent 578aafbf91
commit b0ba4227ac
5 files changed
+426 -8

No files matched your search

+57 -1
View File
@@ -6,6 +6,60 @@ import dayjs from 'dayjs';
providedIn: 'root',
})
export class UserInputService {
private restoreDate(value: unknown): Date {
if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(value)) {
const date = new Date(`${value}T00:00:00`);
if (dayjs(date).format('YYYY-MM-DD') === value) return date;
}
throw new Error('Unsupported saved balance date.');
}
private getSavedValues(): VacDay[] | undefined {
let stored: string | null = null;
try {
if (typeof localStorage === 'undefined') return;
stored = localStorage.getItem('leaveBalances');
if (stored === null) return;
const saved: unknown = JSON.parse(stored);
if (!Array.isArray(saved)) throw new Error('Saved leave balances must be a list.');
return saved.map((value: unknown) => {
if (typeof value !== 'object' || value === null)
throw new Error('Unsupported saved balance record.');
const { id, type, numberOfDays, availableDate, expiryDate } = value as Record<
string,
unknown
>;
if (
typeof id !== 'string' ||
typeof numberOfDays !== 'number' ||
!Number.isFinite(numberOfDays) ||
(type !== SelectableDayType.CP &&
type !== SelectableDayType.RTT &&
type !== SelectableDayType.OTHER)
)
throw new Error('Unsupported saved balance record.');
return {
id,
type,
numberOfDays,
availableDate:
availableDate === undefined ? undefined : this.restoreDate(availableDate),
expiryDate: this.restoreDate(expiryDate),
};
});
} catch (error) {
console.warn('Failed to restore leave balances from localStorage.', error);
if (stored !== null) {
try {
localStorage.removeItem('leaveBalances');
} catch {
// Keep the random fallback usable when browser storage is unavailable.
}
}
}
return undefined;
}
private getRandomNumber(): number {
return Math.floor(Math.random() * 11) + 10;
}
@@ -48,7 +102,9 @@ export class UserInputService {
};
}
readonly vacationNumberSignal = signal<VacDay[]>(this.getInitialValues());
readonly vacationNumberSignal = signal<VacDay[]>(
this.getSavedValues() ?? this.getInitialValues(),
);
readonly remainingVacationDaysSignal = signal<VacDay[]>([]);
readonly computeTriggerSignal = signal(0);