diff --git a/bridge/config.yml b/bridge/config.yml index de51fee..aa4ba1c 100644 --- a/bridge/config.yml +++ b/bridge/config.yml @@ -1,2 +1,2 @@ allowedServers: - - "195.201.123.169:16000" + - "127.0.0.1:16000" diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7dc5839..41c050d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,12 +1,26 @@ -import { AppShell, Box, Button, Grid, Group, Input, Stack } from "@mantine/core" +import { AppShell, Box, Button, Grid, Group, Input, Stack, TextInput } from "@mantine/core" import { useState } from "react" +import { useDispatch, useSelector } from "react-redux" import ChannelList from "./components/ChannelList" import Header from "./components/Header" import MemberList from "./components/MemberList" import Message from "./components/Message" +import { chatActions } from "./slices/chat" +import { RootState } from "./store" function App() { const [opened, setOpened] = useState(false); + const [message, setMessage] = useState(""); + const dispatch = useDispatch(); + const currentChannel = useSelector((state: RootState) => state.chat.currentChannel); + const messages = useSelector((state: RootState) => state.chat.messages); + + const chatDisabled = currentChannel === null; + + const sendMessage = () => { + dispatch(chatActions.sendMessage({ content: message })); + setMessage(""); + } return ( } aside={} > - - - {[...Array(10)].map((e, i) => ( - + + + {messages.map((msg, i) => ( + ))} - ({ borderTop: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[5] : theme.colors.gray[2]}`})}> - - + ({ borderTop: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[5] : theme.colors.gray[2]}`, flexGrow: 0, flexShrink: 0 })}> + setMessage(event.target.value)} onKeyUp={(event) => { + if (event.key === "Enter") { + sendMessage(); + } + }}/> + diff --git a/frontend/src/components/ChannelList.tsx b/frontend/src/components/ChannelList.tsx index ac601f2..afd7319 100644 --- a/frontend/src/components/ChannelList.tsx +++ b/frontend/src/components/ChannelList.tsx @@ -1,18 +1,49 @@ -import { ActionIcon, Box, Button, Group, Navbar, NavLink, Stack } from "@mantine/core"; +import { Box, Button, Navbar, NavLink, Stack } from "@mantine/core"; +import { Root } from "react-dom/client"; import { Hash, Settings } from "react-feather"; +import { useDispatch, useSelector } from "react-redux"; +import { chatActions } from "../slices/chat"; +import { RootState } from "../store"; function ChannelList(props: { hidden: boolean }) { + const dispatch = useDispatch(); + const isConnected = useSelector((state: RootState) => state.chat.isConnected); + const isConnecting = useSelector((state: RootState) => state.chat.isEstablishingConnection); + const channels = useSelector((state: RootState) => state.chat.channels); + const currentChannel = useSelector((state: RootState) => state.chat.currentChannel); + + const connectText = isConnected ? 'Disconnect' : 'Connect'; + const connectClick = () => { + if (isConnected) { + dispatch(chatActions.disconnect()); + } else { + dispatch(chatActions.connect()); + } + } + return (