Files
HealthLog/src/lib/query-keys/illness.ts
T
Marc-André Bombeck a2282a498c fix(encounters): give the visit form's link pickers their own query keys
The visit form's lab and episode pickers fetched with their own page
sizes under the same keys as the Labs list and the illness pages, which
fetch with others. Whichever read landed first served the other: the
picker could see 50 episodes instead of 100, or the Labs list a 200-row
page as the whole list. The picker reads now have keys of their own,
under the lab and illness roots so writes still evict them.
2026-09-24 12:17:56 +02:00

52 lines
2.5 KiB
TypeScript

/**
* Query keys — illness / condition journal (v1.18.1): the episode list,
* a single episode, and a single episode-day day-log.
* Part of the centralized factory; aggregated in `./index.ts`.
*/
export const illnessKeys = {
/**
* v1.18.1 — illness-journal surfaces. `illness()` is the root prefix
* every illness write invalidates through (`illnessDependentKeys` in
* `./index.ts`). The episode list, a single episode read, and a per-day
* day-log each get their own slot; any episode / day-log write evicts
* the whole `["illness"]` prefix so the history list and the open sheet
* repaint in lockstep.
*/
illness: () => ["illness"] as const,
illnessEpisodes: (includeResolved: boolean) =>
["illness", "episodes", includeResolved] as const,
// The visit form's episode picker, with its own page size (the illness
// pages read the route's default); a shared key would serve one to the other.
illnessEpisodesPicker: (limit: number) =>
["illness", "episodes-picker", limit] as const,
illnessEpisode: (id: string) => ["illness", "episode", id] as const,
illnessDayLog: (episodeId: string, date: string) =>
["illness", "day-log", episodeId, date] as const,
/**
* v1.18.3 — the date-less day-log LIST for an episode (full historical
* scroll on the detail timeline + iOS healthlog-iOS#30). Distinct slot from
* the single-day read above; an illness write evicts the whole `["illness"]`
* prefix so both repaint together.
*/
illnessDayLogList: (episodeId: string, sortDir: string) =>
["illness", "day-log-list", episodeId, sortDir] as const,
/**
* v1.18.1 P3 — the per-episode retrospective correlation findings
* (pre-onset scan, nadir, recovery-gap). Server-authoritative; the read
* is gated, so the surface pattern-matches `status` rather than recomputing.
*/
illnessCorrelation: (id: string) => ["illness", "correlation", id] as const,
/**
* v1.18.1 P3 — the cross-episode retrospective summary ("sick N times ·
* typical recovery gap X days") over a trailing window in days.
*
* v1.18.9 — `includeRecoveryGap` is part of the key: the lightweight
* count-only read (list load) and the heavy recovery-gap read (the
* "Analyse" expansion) hit the same endpoint with a different response
* shape, so they MUST cache under distinct keys (same-key + different
* payload silently poisons the cache).
*/
illnessInsights: (windowDays: number, includeRecoveryGap: boolean) =>
["illness", "insights", windowDays, includeRecoveryGap] as const,
};