From ae133c1e367f4bf44763ce68a8ba32e9427878e4 Mon Sep 17 00:00:00 2001 From: gnezim Date: Mon, 20 Apr 2026 15:21:52 +0300 Subject: [PATCH] useAppSettings: align fallback defaults to Angular AppSettings (1/7 board, 1/330 schedule, 2h flight status) --- src/shared/hooks/useAppSettings.test.ts | 16 +++++++++------- src/shared/hooks/useAppSettings.ts | 18 +++++++++++++----- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/shared/hooks/useAppSettings.test.ts b/src/shared/hooks/useAppSettings.test.ts index db8024f0..a85b7922 100644 --- a/src/shared/hooks/useAppSettings.test.ts +++ b/src/shared/hooks/useAppSettings.test.ts @@ -47,10 +47,11 @@ describe("useAppSettings", () => { const { result } = renderHook(() => useAppSettings()); await waitFor(() => expect(result.current.loading).toBe(false)); - expect(result.current.onlineboardSearchFrom).toBe(2); - expect(result.current.onlineboardSearchTo).toBe(14); - expect(result.current.scheduleSearchFrom).toBe(30); - expect(result.current.scheduleSearchTo).toBe(30); + // Defaults match Angular AppSettings (boardSearch 1/7, scheduleSearch 1/330). + expect(result.current.onlineboardSearchFrom).toBe(1); + expect(result.current.onlineboardSearchTo).toBe(7); + expect(result.current.scheduleSearchFrom).toBe(1); + expect(result.current.scheduleSearchTo).toBe(330); }); it("returns defaults when a specific value does not match /\\d+d/", async () => { @@ -67,7 +68,7 @@ describe("useAppSettings", () => { const { result } = renderHook(() => useAppSettings()); await waitFor(() => expect(result.current.loading).toBe(false)); - expect(result.current.onlineboardSearchFrom).toBe(2); + expect(result.current.onlineboardSearchFrom).toBe(1); // default, blah doesn't parse expect(result.current.onlineboardSearchTo).toBe(14); }); @@ -80,7 +81,7 @@ describe("useAppSettings", () => { expect(result.current.loading).toBe(true); await waitFor(() => expect(result.current.loading).toBe(false)); expect(result.current.error).toBe(err); - expect(result.current.onlineboardSearchFrom).toBe(2); + expect(result.current.onlineboardSearchFrom).toBe(1); }); it("parses buttons config into hour numbers", async () => { @@ -108,7 +109,8 @@ describe("useAppSettings", () => { const { result } = renderHook(() => useAppSettings()); await waitFor(() => expect(result.current.loading).toBe(false)); - expect(result.current.flightStatusAvailableFromHours).toBe(24); + // Defaults match Angular (flightStatusAvailableFrom: 2h, buyPeriod.min: 2h, buyPeriod.max: 72h). + expect(result.current.flightStatusAvailableFromHours).toBe(2); expect(result.current.buyTicketMinHours).toBe(2); expect(result.current.buyTicketMaxHours).toBe(72); }); diff --git a/src/shared/hooks/useAppSettings.ts b/src/shared/hooks/useAppSettings.ts index de3dfb89..34ace7f0 100644 --- a/src/shared/hooks/useAppSettings.ts +++ b/src/shared/hooks/useAppSettings.ts @@ -5,12 +5,20 @@ import { getAppSettings } from "@/shared/api/appSettings.js"; const DAYS_PATTERN = /^(\d+)d$/; const HOURS_PATTERN = /^(\d+)h$/; +// Mirrors Angular's `AppSettings` default payload +// (ClientApp/src/app/shared/models-legacy/app-settings.model.ts): +// boardSearchFrom: 1, boardSearchTo: 7, +// scheduleSearchFrom: 1, scheduleSearchTo: 330, +// flightStatusAvailableFrom: 2 (hours), buyPeriod.min: 2h, buyPeriod.max: 330d +// These are used when the UI-options API fails or is unreachable — +// keeping them aligned with Angular avoids a silent calendar-window +// mismatch in offline / error paths. const DEFAULTS = { - onlineboardSearchFrom: 2, - onlineboardSearchTo: 14, - scheduleSearchFrom: 30, - scheduleSearchTo: 30, - flightStatusAvailableFromHours: 24, + onlineboardSearchFrom: 1, + onlineboardSearchTo: 7, + scheduleSearchFrom: 1, + scheduleSearchTo: 330, + flightStatusAvailableFromHours: 2, buyTicketMinHours: 2, buyTicketMaxHours: 72, } as const;