diff --git a/package.json b/package.json index d6cdc78..584c20c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "react-modal": "^3.11.2", "react-scripts": "3.4.0", "shortid": "^2.2.15", - "theme-ui": "^0.3.1" + "theme-ui": "^0.3.1", + "uuid": "^7.0.2" }, "scripts": { "predeploy": "yarn build", diff --git a/src/components/AddPartyMemberButton.js b/src/components/AddPartyMemberButton.js index a3584c7..1696b59 100644 --- a/src/components/AddPartyMemberButton.js +++ b/src/components/AddPartyMemberButton.js @@ -3,7 +3,7 @@ import { IconButton, Flex, Box, Label, Text } from "theme-ui"; import Modal from "./Modal"; -function AddPartyMemberButton({ streamId }) { +function AddPartyMemberButton({ peerId }) { const [isAddModalOpen, setIsAddModalOpen] = useState(false); function openModal() { setIsAddModalOpen(true); @@ -32,7 +32,7 @@ function AddPartyMemberButton({ streamId }) { - {streamId} + {peerId} diff --git a/src/components/GameViewSwitch.js b/src/components/GameViewSwitch.js deleted file mode 100644 index 5837935..0000000 --- a/src/components/GameViewSwitch.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from "react"; -import { Flex, IconButton } from "theme-ui"; - -function SocialIcon() { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - ); -} - -function EncounterIcon() { - return ( - - - - - - - ); -} - -function GameViewSwitch({ view, onViewChange }) { - return ( - - onViewChange("social")} - > - - - onViewChange("encounter")} - > - - - - ); -} - -export default GameViewSwitch; diff --git a/src/components/Message.js b/src/components/Message.js new file mode 100644 index 0000000..d01d15c --- /dev/null +++ b/src/components/Message.js @@ -0,0 +1,18 @@ +import React from "react"; +import { Box, Text, Flex } from "theme-ui"; + +function Message({ message }) { + const timeFormatted = new Date(message.time).toLocaleTimeString("en-US"); + + return ( + + + {message.nickname} + {/* {timeFormatted} */} + + {message.text} + + ); +} + +export default Message; diff --git a/src/components/Party.js b/src/components/Party.js index 2a27901..e350512 100644 --- a/src/components/Party.js +++ b/src/components/Party.js @@ -1,78 +1,80 @@ -import React from "react"; +import React, { useState } from "react"; +import { Flex, Box, Input, Text } from "theme-ui"; +import { v4 as uuid } from "uuid"; -import { Flex, Box } from "theme-ui"; - -import PartyVideo from "./PartyVideo"; import AddPartyMemberButton from "./AddPartyMemberButton"; -import GameViewSwitch from "./GameViewSwitch"; +import Message from "./Message"; -function Party({ streams, localStreamId, view, onViewChange }) { - if (view === "social") { - return ( - - - {Object.entries(streams).map(([id, stream]) => ( - - - - ))} - - - - - - - - - ); - } else if (view === "encounter") { - return ( - - {Object.entries(streams).map(([id, stream]) => ( - - - - ))} - - - - - - - - ); +import { getRandomMonster } from "../helpers/monsters"; + +function Party({ peerId, messages, onMessageSend }) { + const [messageText, setMessageText] = useState(""); + const [nickname, setNickname] = useState(getRandomMonster()); + + function handleMessageSubmit(event) { + event.preventDefault(); + if (!messageText || !peerId) { + return; + } + const id = uuid(); + const time = Date.now(); + const message = { + nickname, + id, + text: messageText, + time + }; + onMessageSend(message); + setMessageText(""); } - return null; + return ( + + + + + + {Object.values(messages) + .sort((a, b) => a.time - b.time) + .map(message => ( + + ))} + + setMessageText(event.target.value)} + p={1} + disabled={!peerId} + /> + + + {nickname} + + + + ); } -Party.defaultProps = { view: "social" }; - export default Party; diff --git a/src/components/PartyVideo.js b/src/components/PartyVideo.js deleted file mode 100644 index 83bef85..0000000 --- a/src/components/PartyVideo.js +++ /dev/null @@ -1,23 +0,0 @@ -import React, { useRef, useEffect } from "react"; - -function PartyVideo({ stream, muted }) { - const videoRef = useRef(); - - useEffect(() => { - if (videoRef.current) { - videoRef.current.srcObject = stream; - } - }, [stream]); - - return ( -