- A URL mirror names the view again on every entry Back or Forward lands on, so a change made under a dialog, a drawer or a sub-view is not undone by the next reload. - A view pushed from the entry a reload under a dialog started from no longer inherits its overlay mark; a reload under two overlays closes onto the page in one step. - The linked player reopens over a live search, gives itself up when its list moves first, and plays alone over an emptied playlist; a capped Files list keeps the link it cannot resolve. - The Feed press over a channel ends the search; leaving a search ends its asked mark; Files and Playlists searches end with their page; the feed always names its view and debounces its search. - Search-box keys are declared per module and kept out of the client log below TRACE. - Writers outside lib/ go through codecs; the URL contract scans computed keys, overlay writers and two-line reads, and holds every page to a bookmark round trip (Config, Activity, Playlists and the Files sort and viewer added).
25 lines
887 B
TypeScript
25 lines
887 B
TypeScript
import { LS, setTabRaw } from "./storage";
|
|
|
|
// The Settings page's tabs, and a helper to pre-select one before navigating there (a notice's link,
|
|
// a return from Google). useTabPersistedState reads the key when the page mounts, and the page on
|
|
// screen hears it. Kept out of SettingsPanel.tsx so a caller does not pull the page in with it. The
|
|
// address-bar key the page mirrors its tab to is here too, beside the other pages' keys.
|
|
export const SETTINGS_TAB_KEY = "stab";
|
|
|
|
/** The address-bar delta for the Settings tab shown. */
|
|
export function settingsTabParams(tab: string | null): Record<string, string | null> {
|
|
return { [SETTINGS_TAB_KEY]: tab };
|
|
}
|
|
|
|
export type SettingsTabId =
|
|
| "appearance"
|
|
| "notifications"
|
|
| "downloads"
|
|
| "tokens"
|
|
| "account"
|
|
| "diagnostics";
|
|
|
|
export function focusSettingsTab(tab: SettingsTabId): void {
|
|
setTabRaw(LS.settingsTab, tab);
|
|
}
|