tranth3truong's picture
Deploy CP-UX-12/13 landing: hero draft proof, privacy and Vietnamese-capability evidence
da09932
Raw
History Blame Contribute Delete
2.02 kB
import { useEffect, useRef, useState } from "react";
import LandingPage from "./LandingPage";
import ScribeTool from "./scribe/ScribeTool";
import { copyFor } from "./content/strings";
const CLINICAL_NOTES_PATH = "/ghi-chep-lam-sang/";
export default function App() {
const [pathname, setPathname] = useState(() => window.location.pathname);
const wasScribeTool = useRef(false);
useEffect(() => {
document.documentElement.lang = "vi";
document.title = copyFor("vi").metadata.title;
document
.querySelector('meta[name="description"]')
?.setAttribute("content", copyFor("vi").metadata.description);
}, []);
useEffect(() => {
if (window.location.hash === "#/scribe" || pathname === "/ghi-chep-lam-sang") {
window.history.replaceState(null, "", CLINICAL_NOTES_PATH);
setPathname(CLINICAL_NOTES_PATH);
}
}, [pathname]);
useEffect(() => {
const onNavigation = () => setPathname(window.location.pathname);
window.addEventListener("popstate", onNavigation);
window.addEventListener("hashchange", onNavigation);
return () => {
window.removeEventListener("popstate", onNavigation);
window.removeEventListener("hashchange", onNavigation);
};
}, []);
const isScribeTool = pathname === CLINICAL_NOTES_PATH;
useEffect(() => {
if (isScribeTool) window.scrollTo(0, 0);
}, [isScribeTool]);
useEffect(() => {
let frame: number | undefined;
if (wasScribeTool.current && !isScribeTool) {
frame = window.requestAnimationFrame(() => {
const anchor = document.getElementById(window.location.hash.slice(1) || "top") ??
document.getElementById("top");
anchor?.scrollIntoView?.();
anchor?.focus({ preventScroll: true });
});
}
wasScribeTool.current = isScribeTool;
return () => {
if (frame !== undefined) window.cancelAnimationFrame(frame);
};
}, [isScribeTool]);
return isScribeTool ? (
<ScribeTool backHref="/" />
) : (
<LandingPage />
);
}