mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
Research Mode was the opt-in behind the estimated GLP-1 drug-level curve: turn it on, read a disclaimer, get the chart. The chart stopped consulting the flag several releases ago and has painted for every account since, so the switch on Settings → Advanced changed no screen in either position. An inert control that promises to hide a chart is worse than no control. The curve is simply part of the medication page now. Gone with the switch: the acknowledgment dialog, `/api/auth/me/research-mode`, the shared status DTO and its gate helper, the disclaimer-version stamp, the query key, and the three user columns the acknowledgment wrote (migration 0321). The Privacy page's second button pointed at the retired control and goes too. Settings → Advanced is now what it reads as: reset the data, delete the account.
75 lines
3.1 KiB
TypeScript
75 lines
3.1 KiB
TypeScript
/**
|
|
* Query keys — settings + notification surfaces, version/meta reads,
|
|
* gamification, share links, and feature flags.
|
|
* Part of the centralized factory; aggregated in `./index.ts`.
|
|
*/
|
|
export const settingsKeys = {
|
|
gamificationAchievements: () => ["gamification", "achievements"] as const,
|
|
|
|
notificationsPreferences: () => ["notifications", "preferences"] as const,
|
|
notificationsStatus: () => ["notifications", "status"] as const,
|
|
|
|
settingsGlobalServices: () => ["settings", "global-services"] as const,
|
|
settingsNtfy: () => ["settings", "ntfy"] as const,
|
|
/** v1.17.1 — generic-webhook channel config. */
|
|
settingsWebhook: () => ["settings", "webhook"] as const,
|
|
/** v1.17.1 — SMTP / email channel config. */
|
|
settingsEmail: () => ["settings", "email"] as const,
|
|
settingsReminderThresholds: () =>
|
|
["settings", "reminder-thresholds"] as const,
|
|
|
|
/** v1.8.5 — user-level injection-site preferences (global exclusion). */
|
|
injectionSitePrefs: () => ["settings", "injection-site-prefs"] as const,
|
|
|
|
/**
|
|
* The declared diabetes opt-in behind `GET/PATCH /api/auth/me/diabetes`.
|
|
* Selects which reference band glucose readings are judged against, so the
|
|
* toggle also invalidates `insightsTargets()` — the resolved band rides
|
|
* on that payload.
|
|
*/
|
|
diabetesPref: () => ["settings", "diabetes"] as const,
|
|
|
|
/**
|
|
* v1.18.0 — the per-user module enable/disable map behind
|
|
* `GET/PATCH /api/auth/me/modules`. Used as the Module-hub mutation key;
|
|
* the resolved map itself rides on `authMe()` (the `/auth/me` payload),
|
|
* so the toggle mutation invalidates `authMe()` to re-gate the nav,
|
|
* Insights pills, and dashboard tiles in lockstep.
|
|
*/
|
|
modulesPrefs: () => ["settings", "modules"] as const,
|
|
|
|
/**
|
|
* v1.35.0 — which pillars count toward the Health Score, behind
|
|
* `GET/PATCH /api/auth/me/health-score-config`. Its own cell rather than
|
|
* a slice of `authMe()`: the payload carries the optimistic-concurrency
|
|
* token the save echoes, and folding it into the account payload would
|
|
* make every unrelated profile write advance the token.
|
|
*/
|
|
healthScoreConfig: () => ["settings", "health-score-config"] as const,
|
|
|
|
apiVersion: () => ["api", "version"] as const,
|
|
publicVersion: () => ["public", "version"] as const,
|
|
/** v1.15.12 H1 — admin overview "update available" check against the
|
|
* latest GitHub release tag (best-effort, day-stale). */
|
|
versionUpdateCheck: () => ["version", "update-check"] as const,
|
|
|
|
/**
|
|
* v1.23 — the Data & Privacy dashboard's read-only retention + encryption
|
|
* summary behind `GET /api/settings/privacy-summary`.
|
|
*/
|
|
privacySummary: () => ["settings", "privacy-summary"] as const,
|
|
|
|
/** v1.11.0 — owner's clinician share links (Settings → Sharing). */
|
|
shareLinks: () => ["share-links"] as const,
|
|
|
|
featureFlags: () => ["feature-flags"] as const,
|
|
|
|
/**
|
|
* The account's standing AI consent receipt (`GET /api/consent/ai/latest`).
|
|
* Keyed by kind because the endpoint answers per kind and a shared key
|
|
* across kinds would serve one kind's receipt for another.
|
|
*/
|
|
aiConsentReceipt: (kind: string) =>
|
|
["consent", "ai", "latest", kind] as const,
|
|
};
|