The application timezone is now only ever set by an admin saving it: - API: drop adopt_reported_timezone; the panel household clock reads the stored settings only and ignores any timezone request header. - Integration: stop reporting Home Assistant's time_zone in an X-NestQuest-Timezone header (snapshot, completion and SSE requests). - Admin app: remove the browser-zone detection and the automatic PATCH on load; the timezone field stays a manual control. - Remove the timezone_configured marker from the core settings, the settings store and the admin settings API. A stored document that still carries the key loads harmlessly (unknown keys are ignored). Tests replace the adoption expectations with proofs that a panel timezone header never changes the stored settings, a fresh install's empty zone stays empty with no settings write, the admin settings carry no timezone_configured, and a manual admin timezone PATCH persists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
/**
|
|
* Typed client for the admin household-settings routes
|
|
* (/api/v1/admin/settings).
|
|
*/
|
|
import { apiFetch } from "./client";
|
|
import { readJson } from "./definitions";
|
|
|
|
export interface HouseholdSettings {
|
|
horizon_days: number;
|
|
/** Local wall-clock "HH:MM", as are the other *_time fields. */
|
|
day_rollover_time: string;
|
|
notify_target: string;
|
|
morning_summary_time: string;
|
|
afternoon_reminder_time: string;
|
|
end_of_day_report_time: string;
|
|
morning_summary_enabled: boolean;
|
|
afternoon_reminder_enabled: boolean;
|
|
end_of_day_report_enabled: boolean;
|
|
celebration_enabled: boolean;
|
|
/** IANA zone name (e.g. "America/New_York"); "" means the API host's local time. */
|
|
timezone: string;
|
|
}
|
|
|
|
/** Only the supplied fields are updated; the API answers with all of them. */
|
|
export type SettingsChanges = Partial<HouseholdSettings>;
|
|
|
|
export const SETTINGS_PATH = "/api/v1/admin/settings";
|
|
|
|
export async function fetchSettings(): Promise<HouseholdSettings> {
|
|
return readJson<HouseholdSettings>(await apiFetch(SETTINGS_PATH));
|
|
}
|
|
|
|
export async function updateSettings(changes: SettingsChanges): Promise<HouseholdSettings> {
|
|
return readJson<HouseholdSettings>(
|
|
await apiFetch(SETTINGS_PATH, {
|
|
method: "PATCH",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(changes),
|
|
}),
|
|
);
|
|
}
|