Live video on the AT Protocol
at natb/block-javascript-protocol 45 lines 1.4 kB view raw
1import { useEffect } from "react"; 2import { Platform } from "react-native"; 3import { 4 useFavicon, 5 useSiteDescription, 6 useSiteTitle, 7} from "../streamplace-store"; 8 9/** 10 * Hook to set the document title, description, and favicon on web based on branding. 11 * No-op on native platforms. 12 */ 13export function useDocumentTitle() { 14 const siteTitle = useSiteTitle(); 15 const siteDescription = useSiteDescription(); 16 const favicon = useFavicon(); 17 18 useEffect(() => { 19 if (Platform.OS === "web" && typeof document !== "undefined") { 20 // set title 21 document.title = siteTitle; 22 23 // set or update meta description 24 let metaDescription = document.querySelector('meta[name="description"]'); 25 if (!metaDescription) { 26 metaDescription = document.createElement("meta"); 27 metaDescription.setAttribute("name", "description"); 28 document.head.appendChild(metaDescription); 29 } 30 metaDescription.setAttribute("content", siteDescription); 31 32 // set or update favicon 33 if (favicon) { 34 let link: HTMLLinkElement | null = 35 document.querySelector('link[rel="icon"]'); 36 if (!link) { 37 link = document.createElement("link"); 38 link.rel = "icon"; 39 document.head.appendChild(link); 40 } 41 link.href = favicon; 42 } 43 } 44 }, [siteTitle, siteDescription, favicon]); 45}