Spaces:
Running
Running
Honor ?mode= query param (summary/policy|research) for embeds and deep-links
Browse files
components/audience-mode-provider.tsx
CHANGED
|
@@ -19,6 +19,22 @@ export function AudienceModeProvider({ children }: { children: React.ReactNode }
|
|
| 19 |
const [mode, setModeState] = useState<AudienceMode>("research")
|
| 20 |
|
| 21 |
useEffect(() => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
const storedMode = safeStorage().getItem(STORAGE_KEY)
|
| 23 |
if (storedMode === "research" || storedMode === "policy") {
|
| 24 |
setModeState(storedMode)
|
|
|
|
| 19 |
const [mode, setModeState] = useState<AudienceMode>("research")
|
| 20 |
|
| 21 |
useEffect(() => {
|
| 22 |
+
// A `?mode=` query param (used by external embeds / deep-links) takes
|
| 23 |
+
// precedence over the stored preference, so a link can open a card in a
|
| 24 |
+
// specific reader mode. Accepts friendly aliases; `summary` == `policy`.
|
| 25 |
+
const requested = new URLSearchParams(window.location.search)
|
| 26 |
+
.get("mode")
|
| 27 |
+
?.toLowerCase()
|
| 28 |
+
const fromQuery: AudienceMode | null =
|
| 29 |
+
requested === "policy" || requested === "summary"
|
| 30 |
+
? "policy"
|
| 31 |
+
: requested === "research" || requested === "researcher"
|
| 32 |
+
? "research"
|
| 33 |
+
: null
|
| 34 |
+
if (fromQuery) {
|
| 35 |
+
setModeState(fromQuery)
|
| 36 |
+
return
|
| 37 |
+
}
|
| 38 |
const storedMode = safeStorage().getItem(STORAGE_KEY)
|
| 39 |
if (storedMode === "research" || storedMode === "policy") {
|
| 40 |
setModeState(storedMode)
|