From 20fe562cd8d5678cab9c34f250b4260e109892b8 Mon Sep 17 00:00:00 2001 From: fy59 Date: Mon, 21 Sep 2026 16:19:39 +0200 Subject: [PATCH] fix(web): refresh sleep agenda from persisted revisions --- CHANGELOG.md | 11 + docs/current_state.md | 2 +- .../sleep-diary-live-agenda-firefox.png | Bin 0 -> 150292 bytes .../sleep_diary_capture_ux_v1_evidence.md | 27 ++ docs/tests.md | 10 + tests/test_web_sleep_browser.py | 340 +++++++++++++++ web/src/api/sleepDiary.ts | 12 +- web/src/routes/SleepDiaryWorkspace.test.tsx | 320 +++++++++++++- web/src/routes/SleepDiaryWorkspace.tsx | 402 ++++++++++++------ web/src/routes/sleepDiaryFacts.test.ts | 84 ++++ web/src/routes/sleepDiaryFacts.ts | 64 +++ web/src/theme/app.css | 54 ++- 12 files changed, 1186 insertions(+), 140 deletions(-) create mode 100644 docs/reviews/evidence/sleep-diary-live-agenda-firefox.png create mode 100644 tests/test_web_sleep_browser.py create mode 100644 web/src/routes/sleepDiaryFacts.test.ts create mode 100644 web/src/routes/sleepDiaryFacts.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 893dba4..5146d6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## Unreleased — 0.1.4 +- Made the Sleep Diary Agenda a live projection of the latest locally + persisted entry revision. Event and intake mutations now re-read and adopt + the canonical Core snapshot, serialized autosaves carry the returned + revision forward, and stale asynchronous reads cannot regress the visible + state. The Agenda shows factual bedtime, final get-up, declared-sleep and + time-in-bed durations, long awakenings, naps, sleepiness and grouped + medication markers without requiring reload or publication. Medication + catalog entries and selectors now include their usual localized dose and + unit, keep same-name/different-dose records distinct, and prefill editable + intake doses. Schemas, domain semantics, synchronization and PDF generation + are unchanged. - Fixed the Sleep Diary Web workspace becoming entirely blank after adding an event or medication intake on the loopback-routed HTTP origin. Sleep event and intake UUIDv4 identities now use secure random bytes without depending diff --git a/docs/current_state.md b/docs/current_state.md index 5d572d9..f953a05 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -138,7 +138,7 @@ parallel implementation of its rules. | Web Dashboard tiles | `WEB_DASHBOARD_TILES_V1=PASS/FROZEN` | | Web Dashboard visualizations | `WEB_DASHBOARD_VISUALIZATIONS_V1=PASS/FROZEN` | | Web Dashboard V1 | `WEB_DASHBOARD_V1=PASS/FROZEN` | -| Sleep Diary V1 | Implemented on the 0.1.4 review branch: timestamped causal diary, stable Web/Android capture, full-generation companion and local vector PDF; the Web capture workspace has real-Firefox mutation/reload coverage and a section-local error boundary | +| Sleep Diary V1 | Implemented on the 0.1.4 review branch: timestamped causal diary, stable Web/Android capture, full-generation companion and local vector PDF; the Web Agenda, Chronology and factual summary adopt the latest persisted revision without reload, medication choices expose dose/unit, and real-Firefox mutation/reload coverage plus a section-local error boundary protect capture | | Web Sessions V1 | `TRAINLOG_WEB_SESSIONS_V1=PASS/FROZEN` (controlled desktop/Android deployment validated) | | Web Sessions deletion and Programs V1 | `TRAINLOG_WEB_SESSIONS_DELETE_AND_PROGRAMS_V1=PASS` (private grouped rollout validated) | | Programs presentation, Android projection, and deletion | `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=PASS` (private coordinated deployment and restart/replay validated) | diff --git a/docs/reviews/evidence/sleep-diary-live-agenda-firefox.png b/docs/reviews/evidence/sleep-diary-live-agenda-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..c5631d48beaa4d7594549188cd48a994d445c513 GIT binary patch literal 150292 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

y$3T5Sy)g~oa6N`N{fD6Fo>u9q?s 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 window.__trainlogErrors.push(String(event.error || event.message))); + addEventListener('unhandledrejection', event => window.__trainlogErrors.push(String(event.reason))); + const originalFetch = window.fetch; + window.fetch = async (...args) => { + try { + const response = await originalFetch(...args); + window.__trainlogFetches.push({url: String(args[0]), method: args[1]?.method || 'GET', status: response.status}); + return response; + } catch (error) { + window.__trainlogErrors.push(String(error)); + throw error; + } + }; + """ + ) + + def set_value(test_id: str, value: str): + element = driver.find_element( + By.CSS_SELECTOR, f"[data-testid='{test_id}']" + ) + driver.execute_script( + "Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set.call(arguments[0],arguments[1]);" + "arguments[0].dispatchEvent(new Event('input',{bubbles:true}));" + "arguments[0].dispatchEvent(new Event('change',{bubbles:true}));", + element, + value, + ) + + def click(element): + driver.execute_script( + "arguments[0].scrollIntoView({block:'center'}); arguments[0].click();", + element, + ) + + def post_count() -> int: + return driver.execute_script( + "return window.__trainlogFetches.filter(item => item.method === 'POST').length" + ) + + def await_persisted(previous_posts: int): + wait.until(lambda current: post_count() > previous_posts) + wait.until( + lambda current: current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-save-state']" + ).text + == "Enregistré localement" + ) + + def add_medication(dose: str): + click(driver.find_element( + By.XPATH, + "//button[normalize-space()='+ Ajouter un médicament']", + )) + set_value("sleep-medication-name", "venlafaxine") + set_value("sleep-medication-dose", dose) + before = post_count() + click(driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-add-medication']" + )) + wait.until(lambda current: post_count() > before) + wait.until( + lambda current: not current.find_elements( + By.CSS_SELECTOR, "[data-testid='sleep-medication-name']" + ) + ) + + add_medication("75") + add_medication("37.5") + medication_select = Select( + driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-intake-medication']" + ) + ) + option_labels = [option.text for option in medication_select.options] + self.assertIn("venlafaxine — 75 mg", option_labels) + self.assertIn("venlafaxine — 37,5 mg", option_labels) + + for label, dose in ( + ("venlafaxine — 75 mg", "75"), + ("venlafaxine — 37,5 mg", "37.5"), + ): + medication_select.select_by_visible_text(label) + wait.until( + lambda current: current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-intake-dose']" + ).get_attribute("value") + == dose + ) + before = post_count() + click(driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-add-intake']" + )) + await_persisted(before) + wait.until( + lambda current: current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-medication']" + ).text + == "M ×2" + ) + + def add_event(kind: str, start: str, end: str | None, assertion): + Select( + driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-event-type']" + ) + ).select_by_value(kind) + set_value("sleep-event-start", start) + if end is not None: + set_value("sleep-event-end", end) + before = post_count() + click(driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-add-event']" + )) + await_persisted(before) + wait.until(assertion) + + add_event( + "bed_time", + "22:45", + None, + lambda current: current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-bed-time']" + ).text.endswith("22:45"), + ) + add_event( + "sleep", + "23:15", + "03:00", + lambda current: "3 h 45 min" + in current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-sleep-duration']" + ).text, + ) + add_event( + "long_awake", + "03:00", + "03:30", + lambda current: "1 · 30 min" + in current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-long-awake']" + ).text, + ) + add_event( + "sleep", + "03:30", + "06:45", + lambda current: "7 h 00 min" + in current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-sleep-duration']" + ).text, + ) + add_event( + "final_get_up", + "07:10", + None, + lambda current: "8 h 25 min" + in current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-time-in-bed']" + ).text, + ) + + expected = driver.find_element( + By.CSS_SELECTOR, "[data-testid^='sleep-agenda-row-']" + ).text + mutation_errors = driver.execute_script( + "return window.__trainlogErrors" + ) + mutation_fetches = driver.execute_script( + "return window.__trainlogFetches" + ) + self.assertEqual([], mutation_errors) + self.assertTrue(mutation_fetches) + self.assertTrue( + all(item["status"] == 200 for item in mutation_fetches) + ) + driver.refresh() + wait.until( + lambda current: "8 h 25 min" + in current.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-agenda-time-in-bed']" + ).text + ) + actual = driver.find_element( + By.CSS_SELECTOR, "[data-testid^='sleep-agenda-row-']" + ).text + self.assertEqual(expected, actual) + self.assertTrue( + driver.find_element( + By.CSS_SELECTOR, "[data-testid='sleep-workspace']" + ).is_displayed() + ) + self.assertLessEqual( + driver.execute_script("return document.documentElement.scrollWidth"), + driver.execute_script("return document.documentElement.clientWidth"), + ) + bidi = websocket.create_connection( + driver.capabilities["webSocketUrl"], suppress_origin=True + ) + bidi.send( + json.dumps( + {"id": 1, "method": "browsingContext.getTree", "params": {}} + ) + ) + tree = json.loads(bidi.recv()) + context = tree["result"]["contexts"][0]["context"] + bidi.send( + json.dumps( + { + "id": 2, + "method": "browsingContext.setViewport", + "params": { + "context": context, + "viewport": {"width": 390, "height": 844}, + "devicePixelRatio": 1, + }, + } + ) + ) + response = json.loads(bidi.recv()) + self.assertEqual("success", response["type"]) + wait.until(lambda current: current.execute_script("return innerWidth") == 390) + self.assertLessEqual( + driver.execute_script("return document.documentElement.scrollWidth"), + driver.execute_script("return document.documentElement.clientWidth"), + ) + bidi.send( + json.dumps( + { + "id": 3, + "method": "browsingContext.setViewport", + "params": { + "context": context, + "viewport": {"width": 1440, "height": 1100}, + "devicePixelRatio": 1, + }, + } + ) + ) + self.assertEqual("success", json.loads(bidi.recv())["type"]) + bidi.close() + EVIDENCE.mkdir(parents=True, exist_ok=True) + self.assertTrue( + driver.save_screenshot( + str(EVIDENCE / "sleep-diary-live-agenda-firefox.png") + ) + ) + finally: + if driver is not None: + driver.quit() + try: + os.killpg(server.pid, signal.SIGTERM) + except ProcessLookupError: + pass + server.wait(timeout=10) + + +if __name__ == "__main__": + unittest.main() diff --git a/web/src/api/sleepDiary.ts b/web/src/api/sleepDiary.ts index 66ea7af..b63e6b1 100644 --- a/web/src/api/sleepDiary.ts +++ b/web/src/api/sleepDiary.ts @@ -284,7 +284,7 @@ export async function saveSleepMedication( created_at: string; updated_at: string; }, -): Promise { +): Promise<{ medication_id: string; revision_id: string }> { const csrf = await mutationCsrfToken(); const response = await fetch("/api/v1/sleep-medications", { method: "POST", @@ -295,5 +295,13 @@ export async function saveSleepMedication( }, body: JSON.stringify(input), }); - if (!response.ok) throw new Error("sleep_medication_mutation_failed"); + const value: unknown = await response.json(); + if ( + !response.ok || + !object(value) || + typeof value.medication_id !== "string" || + typeof value.revision_id !== "string" + ) + throw new Error("sleep_medication_mutation_failed"); + return value as { medication_id: string; revision_id: string }; } diff --git a/web/src/routes/SleepDiaryWorkspace.test.tsx b/web/src/routes/SleepDiaryWorkspace.test.tsx index ee5139d..06ef3d4 100644 --- a/web/src/routes/SleepDiaryWorkspace.test.tsx +++ b/web/src/routes/SleepDiaryWorkspace.test.tsx @@ -6,7 +6,12 @@ import { within, } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { SleepMedication, SleepSnapshot } from "../api/sleepDiary"; +import type { + SleepEntry, + SleepEntryInput, + SleepMedication, + SleepSnapshot, +} from "../api/sleepDiary"; import { SleepDiaryWorkspace } from "./SleepDiaryWorkspace"; const api = vi.hoisted(() => ({ @@ -62,6 +67,55 @@ const medication: SleepMedication = { active: true, }; +const snapshotWith = (entries: SleepEntry[]): SleepSnapshot => { + const duration = (start: string, end: string | null) => + end === null ? 0 : (Date.parse(end) - Date.parse(start)) / 1000; + const events = entries.flatMap((entry) => entry.events); + const selected = (type: string) => + events.filter((event) => event.type === type); + return { + api_version: 1, + entries, + summary: { + nights: entries.length, + long_awake_count: selected("long_awake").length, + nap_count: selected("nap").length, + sleepiness_count: selected("daytime_sleepiness").length, + intake_count: entries.reduce( + (total, entry) => total + entry.intakes.length, + 0, + ), + sleep_duration_seconds: selected("sleep").reduce( + (total, event) => total + duration(event.start_at, event.end_at), + 0, + ), + long_awake_duration_seconds: selected("long_awake").reduce( + (total, event) => total + duration(event.start_at, event.end_at), + 0, + ), + nap_duration_seconds: selected("nap").reduce( + (total, event) => total + duration(event.start_at, event.end_at), + 0, + ), + average_bed_minute: null, + average_get_up_minute: null, + }, + }; +}; + +const persistedEntry = ( + input: SleepEntryInput, + entryId: string, + revisionId: string, +): SleepEntry => ({ + ...input, + entry_id: entryId, + revision_id: revisionId, + publication_status: "draft", + events: input.events.map((event) => ({ ...event })), + intakes: input.intakes.map((intake) => ({ ...intake })), +}); + describe("SleepDiaryWorkspace", () => { beforeEach(() => { vi.clearAllMocks(); @@ -185,4 +239,268 @@ describe("SleepDiaryWorkspace", () => { expect(screen.getByTestId("sleep-workspace")).toBeInTheDocument(); expect(screen.getByTestId("sleep-add-event")).toBeEnabled(); }); + + it("projects every persisted revision live and keeps distinct medication doses", async () => { + let persisted: SleepEntry[] = []; + let catalog: SleepMedication[] = []; + let revision = 0; + api.fetchSleepDiary.mockImplementation(async () => snapshotWith(persisted)); + api.fetchSleepMedications.mockImplementation(async () => catalog); + api.saveSleepEntry.mockImplementation(async (input: SleepEntryInput) => { + const entryId = + input.entry_id || "sd_00000000-0000-4000-8000-000000000001"; + const revisionId = `sdr_00000000-0000-4000-8000-${String(++revision).padStart(12, "0")}`; + persisted = [persistedEntry(input, entryId, revisionId)]; + return { entry_id: entryId, revision_id: revisionId }; + }); + api.saveSleepMedication.mockImplementation(async (input) => { + const index = catalog.length + 1; + const saved: SleepMedication = { + ...input, + medication_id: `med_00000000-0000-4000-8000-${String(index).padStart(12, "0")}`, + revision_id: `mr_00000000-0000-4000-8000-${String(index).padStart(12, "0")}`, + }; + catalog = [...catalog, saved]; + return { + medication_id: saved.medication_id, + revision_id: saved.revision_id, + }; + }); + + render(); + await screen.findByText("Aucun médicament enregistré."); + + const addMedication = async (dose: string) => { + fireEvent.click( + screen.getByRole("button", { name: "+ Ajouter un médicament" }), + ); + fireEvent.change(screen.getByTestId("sleep-medication-name"), { + target: { value: "venlafaxine" }, + }); + fireEvent.change(screen.getByTestId("sleep-medication-dose"), { + target: { value: dose }, + }); + fireEvent.click(screen.getByTestId("sleep-add-medication")); + await waitFor(() => + expect(screen.queryByTestId("sleep-medication-name")).toBeNull(), + ); + }; + await addMedication("75"); + await addMedication("37.5"); + + const medicationSelect = screen.getByTestId("sleep-intake-medication"); + expect(medicationSelect).toHaveTextContent("venlafaxine — 75 mg"); + expect(medicationSelect).toHaveTextContent("venlafaxine — 37,5 mg"); + expect(screen.getAllByText("venlafaxine")).toHaveLength(2); + + const addIntake = async (medicationId: string, expectedDose: string) => { + const calls = api.saveSleepEntry.mock.calls.length; + fireEvent.change(medicationSelect, { target: { value: medicationId } }); + expect(screen.getByTestId("sleep-intake-dose")).toHaveValue( + Number(expectedDose), + ); + fireEvent.click(screen.getByTestId("sleep-add-intake")); + await waitFor(() => + expect(api.saveSleepEntry).toHaveBeenCalledTimes(calls + 1), + ); + await waitFor(() => + expect(screen.getByTestId("sleep-save-state")).toHaveTextContent( + "Enregistré localement", + ), + ); + }; + await addIntake(catalog[0].medication_id, "75"); + await addIntake(catalog[1].medication_id, "37.5"); + expect(screen.getByTestId("sleep-agenda-medication")).toHaveTextContent( + "M ×2", + ); + expect(screen.getByTestId("sleep-agenda-medication")).toHaveAttribute( + "title", + expect.stringContaining("venlafaxine — 37,5 mg"), + ); + + const addEvent = async (type: string, start: string, end?: string) => { + const calls = api.saveSleepEntry.mock.calls.length; + fireEvent.change(screen.getByTestId("sleep-event-type"), { + target: { value: type }, + }); + fireEvent.change(screen.getByTestId("sleep-event-start"), { + target: { value: start }, + }); + if (end !== undefined) + fireEvent.change(screen.getByTestId("sleep-event-end"), { + target: { value: end }, + }); + fireEvent.click(screen.getByTestId("sleep-add-event")); + await waitFor(() => + expect(api.saveSleepEntry).toHaveBeenCalledTimes(calls + 1), + ); + await waitFor(() => + expect(screen.getByTestId("sleep-save-state")).toHaveTextContent( + "Enregistré localement", + ), + ); + }; + await addEvent("bed_time", "22:45"); + expect(screen.getByTestId("sleep-agenda-bed-time")).toHaveTextContent( + "22:45", + ); + await addEvent("sleep", "23:15", "03:00"); + expect(screen.getByTestId("sleep-agenda-sleep-duration")).toHaveTextContent( + "3 h 45 min", + ); + await addEvent("long_awake", "03:00", "03:30"); + expect(screen.getByTestId("sleep-agenda-long-awake")).toHaveTextContent( + "1 · 30 min", + ); + await addEvent("sleep", "03:30", "06:45"); + expect(screen.getByTestId("sleep-agenda-sleep-duration")).toHaveTextContent( + "7 h 00 min", + ); + await addEvent("final_get_up", "07:10"); + expect(screen.getByTestId("sleep-agenda-final-get-up")).toHaveTextContent( + "07:10", + ); + expect(screen.getByTestId("sleep-agenda-time-in-bed")).toHaveTextContent( + "8 h 25 min", + ); + + const getUpRow = screen.getByTestId("sleep-event-final_get_up"); + fireEvent.change(within(getUpRow).getByLabelText("Heure"), { + target: { value: "07:30" }, + }); + await waitFor(() => + expect(screen.getByTestId("sleep-agenda-time-in-bed")).toHaveTextContent( + "8 h 45 min", + ), + ); + + const sleepRows = screen.getAllByTestId("sleep-event-sleep"); + fireEvent.change(within(sleepRows[1]).getByLabelText("Fin"), { + target: { value: "07:00" }, + }); + await waitFor(() => + expect( + screen.getByTestId("sleep-agenda-sleep-duration"), + ).toHaveTextContent("7 h 15 min"), + ); + + fireEvent.click( + within(screen.getByTestId("sleep-event-long_awake")).getByRole("button", { + name: "Supprimer Long réveil", + }), + ); + await waitFor(() => + expect(screen.queryByTestId("sleep-agenda-long-awake")).toBeNull(), + ); + expect(screen.queryByTestId("sleep-event-long_awake")).toBeNull(); + await addEvent("nap", "14:00", "14:35"); + expect(screen.getByTestId("sleep-agenda-naps")).toHaveTextContent( + "1 · 35 min", + ); + await addEvent("daytime_sleepiness", "15:00"); + expect(screen.getByTestId("sleep-agenda-sleepiness")).toHaveTextContent( + "1 occurrence", + ); + expect(screen.getByTestId("sleep-workspace")).toBeInTheDocument(); + }); + + it("ignores a stale diary read that finishes after a newer persisted revision", async () => { + let resolveInitial: ((value: SleepSnapshot) => void) | undefined; + const initial = new Promise((resolve) => { + resolveInitial = resolve; + }); + let persisted: SleepEntry[] = []; + api.fetchSleepDiary + .mockImplementationOnce(async () => initial) + .mockImplementation(async () => snapshotWith(persisted)); + api.saveSleepEntry.mockImplementation(async (input: SleepEntryInput) => { + const result = { + entry_id: "sd_00000000-0000-4000-8000-000000000001", + revision_id: "sdr_00000000-0000-4000-8000-000000000099", + }; + persisted = [persistedEntry(input, result.entry_id, result.revision_id)]; + return result; + }); + + render(); + fireEvent.change(screen.getByTestId("sleep-event-type"), { + target: { value: "bed_time" }, + }); + fireEvent.change(screen.getByTestId("sleep-event-start"), { + target: { value: "22:45" }, + }); + fireEvent.click(screen.getByTestId("sleep-add-event")); + expect( + await screen.findByTestId("sleep-agenda-event-bed_time"), + ).toBeInTheDocument(); + + resolveInitial?.(emptySnapshot); + await Promise.resolve(); + expect(screen.getByTestId("sleep-agenda-bed-time")).toHaveTextContent( + "22:45", + ); + }); + + it("serializes autosaves so the next mutation uses the returned revision", async () => { + let resolveFirst: + ((value: { entry_id: string; revision_id: string }) => void) | undefined; + let persisted: SleepEntry[] = []; + const first = new Promise<{ entry_id: string; revision_id: string }>( + (resolve) => { + resolveFirst = resolve; + }, + ); + api.fetchSleepDiary.mockImplementation(async () => snapshotWith(persisted)); + api.saveSleepEntry + .mockImplementationOnce(async () => first) + .mockImplementationOnce(async (input: SleepEntryInput) => { + const result = { + entry_id: input.entry_id, + revision_id: "sdr_00000000-0000-4000-8000-000000000002", + }; + persisted = [ + persistedEntry(input, result.entry_id, result.revision_id), + ]; + return result; + }); + + render(); + await screen.findByTestId("sleep-workspace"); + fireEvent.change(screen.getByTestId("sleep-event-type"), { + target: { value: "bed_time" }, + }); + fireEvent.click(screen.getByTestId("sleep-add-event")); + fireEvent.change(screen.getByTestId("sleep-event-type"), { + target: { value: "sleep" }, + }); + fireEvent.click(screen.getByTestId("sleep-add-event")); + await waitFor(() => expect(api.saveSleepEntry).toHaveBeenCalledTimes(1)); + expect(api.saveSleepEntry).toHaveBeenCalledTimes(1); + + const firstInput = api.saveSleepEntry.mock.calls[0][0] as SleepEntryInput; + const firstResult = { + entry_id: "sd_00000000-0000-4000-8000-000000000001", + revision_id: "sdr_00000000-0000-4000-8000-000000000001", + }; + persisted = [ + persistedEntry(firstInput, firstResult.entry_id, firstResult.revision_id), + ]; + resolveFirst?.(firstResult); + + await waitFor(() => expect(api.saveSleepEntry).toHaveBeenCalledTimes(2)); + expect(api.saveSleepEntry.mock.calls[1][0]).toMatchObject({ + entry_id: firstResult.entry_id, + expected_revision: firstResult.revision_id, + }); + await waitFor(() => + expect(screen.getByTestId("sleep-save-state")).toHaveTextContent( + "Enregistré localement", + ), + ); + expect( + screen.getByTestId("sleep-agenda-event-bed_time"), + ).toBeInTheDocument(); + expect(screen.getByTestId("sleep-agenda-event-sleep")).toBeInTheDocument(); + }); }); diff --git a/web/src/routes/SleepDiaryWorkspace.tsx b/web/src/routes/SleepDiaryWorkspace.tsx index 6582c26..71cadeb 100644 --- a/web/src/routes/SleepDiaryWorkspace.tsx +++ b/web/src/routes/SleepDiaryWorkspace.tsx @@ -21,6 +21,8 @@ import { buildSleepDiaryPdf, presentSleepDiaryPdf, } from "../report/sleepDiaryPdf"; +import { formatDose, formatDuration } from "../dashboard/dashboardFormat"; +import { sleepEntryFacts } from "./sleepDiaryFacts"; type Language = "fr" | "en"; const q: readonly SleepQuality[] = ["TB", "B", "Moy", "M", "TM"]; @@ -152,6 +154,23 @@ const copy = { } as const; const clock = (iso: string) => (iso ? iso.slice(11, 16) : ""); +const medicationLabel = (medication: SleepMedication) => + medication.default_dose_value === null + ? medication.name + : `${medication.name} — ${formatDose(medication.default_dose_value)} ${medication.default_dose_unit ?? ""}`.trim(); +const intakeLabel = (intake: MedicationIntake) => + intake.dose_value === null + ? intake.medication_name + : `${intake.medication_name} — ${formatDose(intake.dose_value)} ${intake.dose_unit ?? ""}`.trim(); +const countAndDuration = (count: number, seconds: number) => + `${count} · ${formatDuration(seconds)}`; + +const canonicalInput = (entry: SleepEntry): SleepEntryInput => ({ + ...entry, + expected_revision: entry.revision_id, + events: entry.events.map((event) => ({ ...event })), + intakes: entry.intakes.map((intake) => ({ ...intake })), +}); const atClock = (value: string, startDate: string, endDate: string) => { if (!/^([01]\d|2[0-3]):[0-5]\d$/.test(value)) return ""; const hour = Number(value.slice(0, 2)); @@ -264,6 +283,9 @@ export function SleepDiaryWorkspace({ null, ); const persistence = useRef>(Promise.resolve()); + const mutationSequence = useRef(0); + const diaryReadSequence = useRef(0); + const medicationReadSequence = useRef(0); const range = useMemo(() => { if (period === "all") return {}; const days = Number(period.slice(0, -1)); @@ -275,37 +297,48 @@ export function SleepDiaryWorkspace({ endDate: end.toLocaleDateString("en-CA"), }; }, [period]); - const reload = () => - Promise.all([ - fetchSleepDiary(range.startDate, range.endDate), - fetchSleepMedications(), - ]) - .then(([diary, catalog]) => { - setSnapshot(diary); - setMedications(catalog); - if (identity.current === null) { - const resume = - diary.entries.find( - (entry) => - entry.publication_status === "draft" || - entry.publication_status === "modified", - ) ?? diary.entries[0]; - if (resume) { - identity.current = { - entry_id: resume.entry_id, - revision_id: resume.revision_id, - }; - setPublicationStatus(resume.publication_status); - setDraft({ - ...resume, - expected_revision: resume.revision_id, - events: resume.events.map((event) => ({ ...event })), - intakes: resume.intakes.map((intake) => ({ ...intake })), - }); - } - } - }) - .catch(() => setError("sleep_diary_unavailable")); + const readDiary = async () => { + const read = ++diaryReadSequence.current; + const diary = await fetchSleepDiary(range.startDate, range.endDate); + // INVARIANT: an older GET may finish after a newer mutation/reload GET; + // only the newest requested snapshot can replace the visible projection. + if (read === diaryReadSequence.current) setSnapshot(diary); + return diary; + }; + const readMedications = async () => { + const read = ++medicationReadSequence.current; + const catalog = await fetchSleepMedications(); + if (read === medicationReadSequence.current) setMedications(catalog); + return catalog; + }; + const adoptEntry = (entry: SleepEntry) => { + identity.current = { + entry_id: entry.entry_id, + revision_id: entry.revision_id, + }; + setPublicationStatus(entry.publication_status); + setDraft(canonicalInput(entry)); + }; + const reload = async () => { + try { + const [diary] = await Promise.all([readDiary(), readMedications()]); + const current = identity.current; + const resume = current + ? diary.entries.find( + (entry) => + entry.entry_id === current.entry_id && + entry.revision_id === current.revision_id, + ) + : (diary.entries.find( + (entry) => + entry.publication_status === "draft" || + entry.publication_status === "modified", + ) ?? diary.entries[0]); + if (resume) adoptEntry(resume); + } catch { + setError("sleep_diary_unavailable"); + } + }; useEffect(() => { void reload(); }, [period]); @@ -314,18 +347,13 @@ export function SleepDiaryWorkspace({ entry_id: entry.entry_id, revision_id: entry.revision_id, }; - setPublicationStatus(entry.publication_status); - setDraft({ - ...entry, - expected_revision: entry.revision_id, - events: entry.events.map((event) => ({ ...event })), - intakes: entry.intakes.map((intake) => ({ ...intake })), - }); + adoptEntry(entry); }; const persist = (next: SleepEntryInput) => { + const sequence = ++mutationSequence.current; setSaveState("saving"); - persistence.current = persistence.current - .then(async () => { + persistence.current = persistence.current.then(async () => { + try { const current = identity.current; const result = await saveSleepEntry({ ...next, @@ -334,26 +362,43 @@ export function SleepDiaryWorkspace({ updated_at: sleepTimestamp(), }); identity.current = result; - setPublicationStatus((status) => - status === "synchronized" || status === "modified" - ? "modified" - : "draft", + const diary = await readDiary(); + const persisted = diary.entries.find( + (entry) => + entry.entry_id === result.entry_id && + entry.revision_id === result.revision_id, ); - setSaveState("saved"); - setDraft((value) => ({ - ...value, - entry_id: result.entry_id, - expected_revision: result.revision_id, - })); - }) - .catch((reason: unknown) => { + if (!persisted) throw new TypeError("sleep_diary_revision_unavailable"); + if (sequence === mutationSequence.current) { + adoptEntry(persisted); + setError(""); + setSaveState("saved"); + } + } catch (reason: unknown) { + if (sequence !== mutationSequence.current) return; + try { + const diary = await readDiary(); + const current = identity.current; + const persisted = current + ? diary.entries.find( + (entry) => + entry.entry_id === current.entry_id && + entry.revision_id === current.revision_id, + ) + : undefined; + if (persisted) adoptEntry(persisted); + } catch { + // Preserve the original mutation diagnostic when reconciliation also + // fails; the stale Agenda remains visibly distinct from the draft. + } setSaveState("error"); setError( reason instanceof Error ? reason.message : "sleep_diary_mutation_failed", ); - }); + } + }); }; const mutate = (transform: (current: SleepEntryInput) => SleepEntryInput) => setDraft((current) => { @@ -444,11 +489,10 @@ export function SleepDiaryWorkspace({ const addMedication = async () => { if (!medName.trim()) return; const now = sleepTimestamp(); - const savedName = medName.trim(); setPending(true); setError(""); try { - await saveSleepMedication({ + const result = await saveSleepMedication({ medication_id: editingMedication?.medication_id ?? "", expected_revision: editingMedication?.revision_id ?? null, created_at: now, @@ -460,12 +504,10 @@ export function SleepDiaryWorkspace({ note: editingMedication?.note ?? "", active: editingMedication?.active ?? true, }); - const catalog = await fetchSleepMedications(); - setMedications(catalog); - const saved = - catalog.find( - (item) => item.medication_id === editingMedication?.medication_id, - ) ?? catalog.find((item) => item.name === savedName); + const catalog = await readMedications(); + const saved = catalog.find( + (item) => item.medication_id === result.medication_id, + ); if (saved) { setIntakeMedication(saved.medication_id); setIntakeDose(saved.default_dose_value?.toString() ?? ""); @@ -606,69 +648,164 @@ export function SleepDiaryWorkspace({ {(18 + index) % 24} ))} - {entries.map((entry) => ( - - ))} + ))} + + + + + {t.bed_time} + {facts.bedTime ?? "—"} + + + {t.final_get_up} + {facts.finalGetUp ?? "—"} + + + {t.sleep} + + {facts.sleepSeconds > 0 + ? formatDuration(facts.sleepSeconds) + : "—"} + + + + + {language === "fr" ? "Temps au lit" : "Time in bed"} + + + {facts.timeInBedSeconds === null + ? "—" + : formatDuration(facts.timeInBedSeconds)} + + + {facts.longAwakeCount > 0 && ( + + + {language === "fr" ? "Réveils" : "Awakenings"} + + + {countAndDuration( + facts.longAwakeCount, + facts.longAwakeSeconds, + )} + + + )} + {facts.napCount > 0 && ( + + {t.nap} + + {countAndDuration( + facts.napCount, + facts.napSeconds, + )} + + + )} + {facts.sleepinessCount > 0 && ( + + {t.daytime_sleepiness} + + {facts.sleepinessCount}{" "} + {language === "fr" + ? facts.sleepinessCount === 1 + ? "occurrence" + : "occurrences" + : facts.sleepinessCount === 1 + ? "occurrence" + : "occurrences"} + + + )} + + + + {t.sleep} + {entry.sleep_quality ?? "—"} + + + {language === "fr" ? "Réveil" : "Wake"} + {entry.wake_quality ?? "—"} + + + {language === "fr" ? "Journée" : "Day"} + {entry.day_form ?? "—"} + + + + + ); + })} )} @@ -984,7 +1121,7 @@ export function SleepDiaryWorkspace({ .filter((item) => item.active) .map((item) => ( ))} @@ -1156,7 +1293,7 @@ export function SleepDiaryWorkspace({ {item.default_dose_value === null ? "—" - : `${item.default_dose_value} ${item.default_dose_unit ?? ""}`}{" "} + : `${formatDose(item.default_dose_value)} ${item.default_dose_unit ?? ""}`}{" "} {language === "fr" ? "habituel" : "usual"} @@ -1223,19 +1360,26 @@ export function SleepDiaryWorkspace({ {language === "fr" ? "Sommeil déclaré" : "Declared sleep"}
- {Math.round( - (snapshot?.summary.sleep_duration_seconds ?? 0) / 60, - )}{" "} - min + {formatDuration(snapshot?.summary.sleep_duration_seconds ?? 0)}
{language === "fr" ? "Longs réveils" : "Long awakenings"}
-
{snapshot?.summary.long_awake_count ?? 0}
+
+ {countAndDuration( + snapshot?.summary.long_awake_count ?? 0, + snapshot?.summary.long_awake_duration_seconds ?? 0, + )} +
{language === "fr" ? "Siestes" : "Naps"}
-
{snapshot?.summary.nap_count ?? 0}
+
+ {countAndDuration( + snapshot?.summary.nap_count ?? 0, + snapshot?.summary.nap_duration_seconds ?? 0, + )} +
diff --git a/web/src/routes/sleepDiaryFacts.test.ts b/web/src/routes/sleepDiaryFacts.test.ts new file mode 100644 index 0000000..173aa44 --- /dev/null +++ b/web/src/routes/sleepDiaryFacts.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it } from "vitest"; +import type { SleepEntry } from "../api/sleepDiary"; +import { sleepEntryFacts } from "./sleepDiaryFacts"; + +const entry: SleepEntry = { + entry_id: "sl_00000000-0000-4000-8000-000000000001", + revision_id: "slr_00000000-0000-4000-8000-000000000001", + night_start_date: "2026-09-20", + night_end_date: "2026-09-21", + created_at: "2026-09-21T08:00:00Z", + updated_at: "2026-09-21T08:00:00Z", + publication_status: "draft", + sleep_quality: null, + wake_quality: null, + day_form: null, + treatment_and_notes: "", + events: [ + { + event_id: "bed", + type: "bed_time", + start_at: "2026-09-20T22:45:00+02:00", + end_at: null, + }, + { + event_id: "sleep-1", + type: "sleep", + start_at: "2026-09-20T23:15:00+02:00", + end_at: "2026-09-21T03:00:00+02:00", + }, + { + event_id: "awake", + type: "long_awake", + start_at: "2026-09-21T03:00:00+02:00", + end_at: "2026-09-21T03:30:00+02:00", + }, + { + event_id: "half", + type: "half_sleep", + start_at: "2026-09-21T03:20:00+02:00", + end_at: "2026-09-21T03:30:00+02:00", + }, + { + event_id: "sleep-2", + type: "sleep", + start_at: "2026-09-21T03:30:00+02:00", + end_at: "2026-09-21T06:45:00+02:00", + }, + { + event_id: "nap", + type: "nap", + start_at: "2026-09-21T14:00:00+02:00", + end_at: "2026-09-21T14:35:00+02:00", + }, + { + event_id: "sleepy", + type: "daytime_sleepiness", + start_at: "2026-09-21T15:00:00+02:00", + end_at: null, + }, + { + event_id: "up", + type: "final_get_up", + start_at: "2026-09-21T07:10:00+02:00", + end_at: null, + }, + ], + intakes: [], +}; + +describe("sleepEntryFacts", () => { + it("keeps declared sleep, half-sleep, naps and time in bed factually distinct", () => { + expect(sleepEntryFacts(entry)).toEqual({ + bedTime: "22:45", + finalGetUp: "07:10", + sleepSeconds: 7 * 3600, + timeInBedSeconds: 8 * 3600 + 25 * 60, + longAwakeCount: 1, + longAwakeSeconds: 30 * 60, + napCount: 1, + napSeconds: 35 * 60, + sleepinessCount: 1, + }); + }); +}); diff --git a/web/src/routes/sleepDiaryFacts.ts b/web/src/routes/sleepDiaryFacts.ts new file mode 100644 index 0000000..6eda2cd --- /dev/null +++ b/web/src/routes/sleepDiaryFacts.ts @@ -0,0 +1,64 @@ +import type { SleepEntry, SleepEvent } from "../api/sleepDiary"; + +export interface SleepEntryFacts { + bedTime: string | null; + finalGetUp: string | null; + sleepSeconds: number; + timeInBedSeconds: number | null; + longAwakeCount: number; + longAwakeSeconds: number; + napCount: number; + napSeconds: number; + sleepinessCount: number; +} + +const durationSeconds = (event: SleepEvent): number => { + if (event.end_at === null) return 0; + const start = Date.parse(event.start_at); + const end = Date.parse(event.end_at); + return Number.isFinite(start) && Number.isFinite(end) && end > start + ? Math.floor((end - start) / 1000) + : 0; +}; + +const clock = (timestamp: string | null): string | null => + timestamp === null ? null : timestamp.slice(11, 16); + +export function sleepEntryFacts(entry: SleepEntry): SleepEntryFacts { + const bedtime = entry.events.find((event) => event.type === "bed_time"); + const finalGetUp = [...entry.events] + .reverse() + .find((event) => event.type === "final_get_up"); + const interval = + bedtime !== undefined && finalGetUp !== undefined + ? Date.parse(finalGetUp.start_at) - Date.parse(bedtime.start_at) + : Number.NaN; + const events = (type: SleepEvent["type"]) => + entry.events.filter((event) => event.type === type); + const sleep = events("sleep"); + const longAwake = events("long_awake"); + const naps = events("nap"); + return { + bedTime: clock(bedtime?.start_at ?? null), + finalGetUp: clock(finalGetUp?.start_at ?? null), + sleepSeconds: sleep.reduce( + (total, event) => total + durationSeconds(event), + 0, + ), + timeInBedSeconds: + Number.isFinite(interval) && interval > 0 + ? Math.floor(interval / 1000) + : null, + longAwakeCount: longAwake.length, + longAwakeSeconds: longAwake.reduce( + (total, event) => total + durationSeconds(event), + 0, + ), + napCount: naps.length, + napSeconds: naps.reduce( + (total, event) => total + durationSeconds(event), + 0, + ), + sleepinessCount: events("daytime_sleepiness").length, + }; +} diff --git a/web/src/theme/app.css b/web/src/theme/app.css index 4527140..73b930b 100644 --- a/web/src/theme/app.css +++ b/web/src/theme/app.css @@ -679,13 +679,13 @@ h2 { max-width: 100%; } .sleep-agenda { - min-width: 900px; + min-width: 1120px; display: grid; gap: 0.35rem; } .sleep-hours { display: grid; - grid-template-columns: 13rem repeat(25, 1fr) 9rem; + grid-template-columns: 12rem repeat(25, 1fr) 25rem; color: var(--subtext-0); font-size: 0.72rem; } @@ -694,7 +694,7 @@ h2 { } .sleep-row { display: grid; - grid-template-columns: 13rem 1fr 9rem; + grid-template-columns: 12rem minmax(28rem, 1fr) 25rem; align-items: center; gap: 0.6rem; min-height: 3rem; @@ -717,6 +717,40 @@ h2 { color: var(--subtext-0); font-weight: 500; } +.sleep-row-summary, +.sleep-row-facts, +.sleep-row-qualities, +.sleep-row-facts > span, +.sleep-row-qualities > span { + display: flex; +} +.sleep-row-summary { + flex-direction: column; + gap: 0.4rem; +} +.sleep-row-facts, +.sleep-row-qualities { + gap: 0.65rem; + flex-wrap: wrap; +} +.sleep-row-facts > span, +.sleep-row-qualities > span { + min-width: 4.2rem; + flex-direction: column; + gap: 0.05rem; +} +.sleep-row-summary small { + font-size: 0.68rem; +} +.sleep-row-summary b { + color: var(--text); + font-size: 0.78rem; + font-variant-numeric: tabular-nums; +} +.sleep-row-qualities { + padding-top: 0.35rem; + border-top: 1px solid var(--surface-1); +} .sleep-track { position: relative; height: 1.75rem; @@ -754,7 +788,14 @@ h2 { ); } .sleep-medication { + min-width: 1.35rem; + padding: 0 0.2rem; + border-radius: 0.25rem; background: var(--green); + color: var(--crust); + font-weight: 800; + white-space: nowrap; + z-index: 2; } .sleep-editor-columns { display: grid; @@ -869,10 +910,9 @@ h2 { border-radius: 0.5rem; } .sleep-timeline-editor .sleep-event-list li { - grid-template-columns: 6.5rem minmax(8rem, 1.4fr) repeat( - 2, - minmax(6rem, 0.75fr) - ) auto auto; + grid-template-columns: + 6.5rem minmax(8rem, 1.4fr) repeat(2, minmax(6rem, 0.75fr)) + auto auto; } .sleep-timeline-editor time { color: var(--lavender);