import React, { useState, useEffect } from 'react'; import { Button, InputAdornment, TextField, Typography, IconButton, Paper, } from '@material-ui/core'; import Save from '@material-ui/icons/Save'; import { JoinRoomApi, CreateRoomApi, PLAYER_STATUS, getPlayerSource } from './Api'; import { goTo } from 'route-lite'; import Chat from './Chat'; const saveName = (data) => { const { name, notify } = data; window.localStorage.setItem('watchPartyUserName', name); notify('Saved name'); }; const getName = () => window.localStorage.getItem('watchPartyUserName'); const saveRoomId = (data) => { const { rid, notify } = data; window.localStorage.setItem('watchPartyRoomId', rid); notify('Saved room'); }; const getRoomId = () => window.localStorage.getItem('watchPartyRoomId'); const joinRoom = async (data) => { data.props.updateLoading(true); data.props.notify('Joining party...'); const apidata = { roomId: data.joinName.trim(), userName: data.name.trim(), }; const confirmedRoomId = await JoinRoomApi(apidata) .then((res) => res.json()) .then((res) => res.roomId) .catch((err) => { data.props.updateLoading(false); data.props.notify('Something went wrong'); console.error('Join Room API error', err); }); if (confirmedRoomId === apidata.roomId) { saveName({ name: apidata.userName, notify: data.props.notify, }); saveRoomId({ rid: confirmedRoomId, notify: data.props.notify, }); data.props.notify('Joined party'); goTo(Chat, data.props); } }; const createRoom = async (data) => { data.props.updateLoading(true); data.props.notify('Starting party...'); const apidata = { roomName: data.createName, userName: data.name, player: { source: getPlayerSource(), status: PLAYER_STATUS.NOT_PLAYING, time: 0, url: '', }, }; CreateRoomApi(apidata) .then((res) => res.json()) .then((res) => { saveName({ name: data.name, notify: data.props.notify, }); saveRoomId({ rid: res.roomId, notify: data.props.notify, }); data.props.notify('Started party'); goTo(Chat, data.props); }) .catch((err) => { data.props.updateLoading(false); data.props.notify('Something went wrong'); console.error('Join Room API error', err); }); }; const Create = (props) => { const [name, setName] = useState(getName() || ''); const [createName, setCreateName] = useState(''); const [joinName, setJoinName] = useState(getRoomId() || ''); const { notify, updateLoading } = props; const joinOnMount = () => { updateLoading(false); // NEEDS FIX - REPETITIVE API CALLS // if (getName() && getRoomId()) { // joinRoom({ // joinName, // name, // props, // }); // } }; useEffect(joinOnMount, []); return (
WATCH PARTY
setName(e.target.value)} className="name-field" label="Name" variant="filled" InputProps={{ endAdornment: ( saveName({ name, notify })}> ), }} /> CREATE PARTY setCreateName(e.target.value)} label="Party Name" /> JOIN PARTY setJoinName(e.target.value)} label="Party Name" />
); }; export default Create;