// DraftAdmin.jsx
import React, { useEffect, useState, useRef } from "react";
import { useWebSocket } from "../common/WebSocketContext.jsx";
import { WebSocketStatus } from "../common/WebSocketStatus.jsx";
import { DraftMessage, DraftPhaseLabel, DraftPhases } from '../constants.js';
import { fetchDraftDetails, handleUserIdentifyMessages, isEmptyObject } from "../common/utils.js";
import { DraftMoviePool } from "../common/DraftMoviePool.jsx";
import { ParticipantList } from "../common/ParticipantList.jsx";
import { DraftCountdownClock } from "../common/DraftCountdownClock.jsx"
import { handleDraftStatusMessages } from '../common/utils.js'
// import { Collapse } from 'bootstrap/dist/js/bootstrap.bundle.min.js';
import { Collapse, ListGroup } from "react-bootstrap";
const NominateMenu = ({ socket, draftState, draftDetails, currentUser, }) => {
if (!socket || isEmptyObject(draftDetails) || isEmptyObject(draftState)) return;
const [open, setOpen] = useState(false);
const { movies } = draftDetails
const requestNomination = (event) => {
event.preventDefault()
const formData = new FormData(event.target)
socket.send(JSON.stringify({
type: DraftMessage.NOMINATION_SUBMIT_REQUEST,
payload: {
id: formData.get('movie'),
user: currentUser
}
}))
}
useEffect(() => {
if (isEmptyObject(draftState) || isEmptyObject(draftState.current_pick)) return;
if (currentUser == draftState.current_pick.participant) {
setOpen(true)
} else {
setOpen(false)
}
// collapse.toggle()
}, [draftState])
return (
{/* Everything must be wrapped in one parent */}
);
}
export const DraftParticipant = ({ draftSessionId }) => {
const socket = useWebSocket();
const [draftState, setDraftState] = useState({});
const [draftDetails, setDraftDetails] = useState({});
const [currentUser, setCurrentUser] = useState(null);
const [movies, setMovies] = useState([]);
console.log(socket)
useEffect(() => {
fetchDraftDetails(draftSessionId)
.then((data) => {
console.log("Fetched draft data", data)
setMovies(data.movies)
setDraftDetails(data)
})
}, [draftSessionId])
useEffect(() => {
if (!socket) return;
socket.onclose = (event) => {
console.log('Websocket Closed')
}
}, [socket])
useEffect(() => {
if (!socket) return;
const draftStatusMessageHandler = (event) => handleDraftStatusMessages(event, setDraftState)
const userIdentifyMessageHandler = (event) => handleUserIdentifyMessages(event, setCurrentUser)
socket.addEventListener('message', draftStatusMessageHandler);
socket.addEventListener('message', userIdentifyMessageHandler);
return () => {
socket.removeEventListener('message', draftStatusMessageHandler);
socket.removeEventListener('message', userIdentifyMessageHandler);
};
}, [socket]);
function submitBidRequest(event) {
event.preventDefault()
const form = event.target
const formData = new FormData(form)
console.log('submitting bid...')
socket.send(JSON.stringify({
type: DraftMessage.BID_PLACE_REQUEST,
payload: {
bid_amount: formData.get('bidAmount'),
user: currentUser
}
}))
}
return (
{console.log("draft_state", draftState)}
Round {draftState.current_pick?.round}
Pick {draftState.current_pick?.pick_in_round}
{draftState.current_pick?.overall + 1} Overall
{draftState.bids?.length > 0 ? Math.max(draftState.bids?.map(i=>i.bid_amount)) : ""}
highest bid
{draftState.bids?.map((bid, idx) => (
- {bid.user}: {bid.amount}
))}
Current Nomination: {movies.find(i => draftState.current_movie == i.id)?.title}
);
};