Set title and convert all class component to functional #4
| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="utf-8"/> | ||||
|     <title>stream.t-juice.club</title> | ||||
|     <title></title> | ||||
|     <script src="./js/app.tsx" type="module"></script> | ||||
|     <link rel="stylesheet" href="./css/style.css" /> | ||||
|     <link rel="stylesheet" href="./css/fonts.css" /> | ||||
|   | ||||
| @@ -9,11 +9,27 @@ interface AppProps { | ||||
|     api: MinistreamApiClient | ||||
| } | ||||
|  | ||||
| const titleKey = "ministream.title" | ||||
|  | ||||
| function setTitleFromLocalstorage() { | ||||
|     var title = localStorage.getItem(titleKey) | ||||
|     if (title) { | ||||
|         setTitle(title) | ||||
|     } | ||||
| } | ||||
|  | ||||
| function setTitle(title: string) { | ||||
|     const el = document.querySelector('title') | ||||
|     if (el) { | ||||
|         el.textContent = title | ||||
|     } | ||||
| } | ||||
|  | ||||
| export function App({ api }: AppProps) { | ||||
|     const [streamList, setStreamList] = useState<string[]>([]) | ||||
|     const [selectedStream, setSelectedStream] = useState<string | null>(null) | ||||
|  | ||||
|     const updateSelect = (item: string) => { | ||||
|     const updateSelect = (item: string | null) => { | ||||
|         setSelectedStream(item) | ||||
|     } | ||||
|  | ||||
| @@ -33,19 +49,8 @@ export function App({ api }: AppProps) { | ||||
|     } | ||||
|  | ||||
|     const updateTitle = () => { | ||||
|         const titleKey = "ministream.title" | ||||
|         var title = localStorage.getItem(titleKey) | ||||
|         const setTitle = (title: string) => { | ||||
|             const el = document.querySelector('title') | ||||
|             if (el) { | ||||
|                 el.textContent = title | ||||
|             } | ||||
|         } | ||||
|         if (title) { | ||||
|             setTitle(title) | ||||
|         } | ||||
|             api.siteInfo().then((info) => { | ||||
|             if (info.siteName != title) { | ||||
|             if (info.siteName != document.title) { | ||||
|                 setTitle(info.siteName) | ||||
|                 localStorage.setItem(titleKey, info.siteName) | ||||
|             } | ||||
| @@ -60,11 +65,11 @@ export function App({ api }: AppProps) { | ||||
|     useEffect(() => { | ||||
|         updateStreamList() | ||||
|     }, []) | ||||
|  | ||||
|     useEffect(() => { | ||||
|         updateTitle() | ||||
|     }, []) | ||||
|  | ||||
|  | ||||
|     return ( | ||||
|         <> | ||||
|             <Menu | ||||
| @@ -78,8 +83,9 @@ export function App({ api }: AppProps) { | ||||
| } | ||||
|  | ||||
| const rootElement = document.getElementById("app"); | ||||
| setTitleFromLocalstorage() | ||||
| if (rootElement) { | ||||
|     const root = createRoot(rootElement); | ||||
|     const root = createRoot(rootElement) | ||||
|     const api = new MinistreamApiClient() | ||||
|     root.render(<App api={api} />) | ||||
| } | ||||
| @@ -1,7 +1,7 @@ | ||||
| import { createRoot } from "react-dom/client"; | ||||
| import React from "react"; | ||||
|  | ||||
| type StreamSelectCallback = (selected: string) => void | ||||
| type StreamSelectCallback = (selected: string | null) => void | ||||
|  | ||||
| interface MenuProps { | ||||
|     items: string[] | ||||
| @@ -10,6 +10,7 @@ interface MenuProps { | ||||
| } | ||||
|  | ||||
| export function Menu({ items, selectedItem, selectCallback }: MenuProps) { | ||||
|     const title = document.title | ||||
|     const menuitems = () => { | ||||
|         return ( | ||||
|             <> | ||||
| @@ -28,7 +29,9 @@ export function Menu({ items, selectedItem, selectCallback }: MenuProps) { | ||||
|     return ( | ||||
|         <div id="menu"> | ||||
|             <aside> | ||||
|                 <a className="menu-heading" href="#">stream.t-juice.club</a> | ||||
|                 <a className="menu-heading" onClick={() => { | ||||
|                     selectCallback(null) | ||||
|                 }}href="#">{title}</a> | ||||
|                 <ul className="menu-list"> | ||||
|                     {menuitems()} | ||||
|                 </ul> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user