import React, { useContext, useEffect, useState } from "react"; import Chat from "./Chat/Chat"; import "./App.css"; import { LangType, Message } from "./type/messageTypes"; import { MessageDisplay } from "./MessageDisplay/MessageDisplay"; import strings from "./Intl/strings.json"; import { LangContext, LoginContext, LoginType } from "./context"; import { contentTypes, domain, endpoints, port } from "./consts"; import { Login } from "./Login/Login"; import { Sidebar } from "./Sidebar/Sidebar"; import { Topbar } from "./Topbar/Topbar"; // what we "in the business" call type gymnastics const Wrapper = (): React.ReactElement => { const [lang, setLang] = useState("en_US"); const [login, setLogin] = useState(undefined); useEffect(() => { document.title = login ? `IRC logged in as ${login.username}` : "IRC Chat"; }, [login]); const [sidebarEnabled, setSidebarEnabled] = useState(false); return ( setSidebarEnabled(enabled) } > setSidebarEnabled(enabled)} > {/* callbacks for altering the Lang/Login contexts */} { setLogin(value); }} > {login ? ( { setLang(value as LangType); }} /> ) : ( <> )} ); }; const setNameOnServer = async (name: string) => { const responseRaw = await fetch( `https://${domain}:${port}${endpoints.user}`, { method: "POST", mode: "cors", headers: contentTypes.json, body: JSON.stringify({ userName: name, dateJoined: Date.now(), }), } ); if (responseRaw.status === 400) { return { success: false, reason: "Username taken or invalid!" }; } else return { success: true, reason: "" }; }; const validateName = (name: string): boolean => { // TODO Name validation return !(name === null || name === undefined || name === ""); }; const App = ({ changeLang, }: { changeLang: (value: string) => void; }): React.ReactElement => { const [messages, setMessages] = useState([]); const login = useContext(LoginContext); const lang = useContext(LangContext); const home = strings[lang].homepage; if (!login) { return <>; } else return (
{messages.map((message) => { return ; })} {}
); }; export default Wrapper;