Tab-level choice (ped_last_tab) already survived sign-out/in via localStorage, but sub-pill and sub-tab selections inside a loaded tab lived only in memory — they reset to defaults after a reload or browser restart. Now the following are persisted under the ped_ui/ namespace: - Calculators nav pill (BP / BMI / GCS / …) - Bedside sub-pill (neonatal / airway / …) - Well Visit sub-tab (byvisit / milestones / shadess / note) - Physical Exam Guide age group + system Implementation: - Added public/js/ui-state.js — a ~30-line window.UIState wrapper around localStorage with a ped_ui/ prefix and try/catch around both read and write (Safari private mode + quota errors silently no-op). - Each tab's click handler now also calls UIState.set; each tab's init path calls UIState.get and replays the saved value through the same function a click would call — so there is exactly one code path for "show this selection", whether it came from the user or from a restore. For Bedside, the restore additionally listens for tabChanged so the lazy-loaded HTML is guaranteed to exist by the time we re-activate the pill. Tests: - e2e/tests/ui-state-persistence.spec.js — 5 specs × 2 viewports = 10 tests. Each clicks the feature, reloads the page, and asserts the same pill / subtab / dropdown value is still active. Catches any future regression in the persistence wiring. - e2e/tests/soap-hospital-workflow.spec.js — fills SOAP transcript, generates via mocked AI, clears, opens/closes load popovers; also smoke-tests the Hospital Course save-bar. Suite: 250 passed / 0 failed (+ 20 over the last run).
35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
// ============================================================
|
|
// UI STATE — sub-pill / sub-tab persistence across browser restart
|
|
// ============================================================
|
|
// Tab-level selection (ped_last_tab) is handled in app.js. This file
|
|
// persists the finer-grained choices that would otherwise reset to
|
|
// defaults when the user closes the browser, signs out / back in, or
|
|
// reloads the page — because _componentCache is in-memory and cleared
|
|
// on reload.
|
|
//
|
|
// All keys live under the "ped_ui/" namespace in localStorage so they
|
|
// are easy to enumerate and clear. Reads and writes are wrapped in
|
|
// try/catch — localStorage can throw in some contexts (Safari private
|
|
// mode, storage quotas), and a persistence failure must never break
|
|
// the UI.
|
|
// ============================================================
|
|
|
|
(function () {
|
|
var PREFIX = 'ped_ui/';
|
|
|
|
function get(key) {
|
|
try { return localStorage.getItem(PREFIX + key); } catch (e) { return null; }
|
|
}
|
|
function set(key, value) {
|
|
try { localStorage.setItem(PREFIX + key, value); } catch (e) {}
|
|
}
|
|
function del(key) {
|
|
try { localStorage.removeItem(PREFIX + key); } catch (e) {}
|
|
}
|
|
|
|
window.UIState = {
|
|
get: get,
|
|
set: set,
|
|
del: del,
|
|
};
|
|
})();
|