import React, { useEffect, useMemo, useRef, useState } from 'react'; import { HMSPollState, selectLocalPeerRoleName, selectPermissions, selectPolls, useHMSActions, useHMSStore, } from '@100mslive/react-sdk'; import { QuestionIcon, StatsIcon } from '@100mslive/react-icons'; import { Button, Flex, Input, Switch, Text } from '../../../..'; // @ts-ignore import { Container, ContentHeader, ErrorText } from '../../Streaming/Common'; // @ts-ignore import { usePollViewToggle } from '../../AppData/useSidepane'; // @ts-ignore import { usePollViewState } from '../../AppData/useUISettings'; // @ts-ignore import { isValidTextInput } from '../../../common/utils'; import { StatusIndicator } from '../common/StatusIndicator'; import { INTERACTION_TYPE, POLL_STATE, POLL_VIEWS } from '../../../common/constants'; export const PollsQuizMenu = () => { const togglePollView = usePollViewToggle(); const permissions = useHMSStore(selectPermissions); return ( {permissions?.pollWrite && } ); }; function InteractionSelectionCard({ title, icon, active, onClick, }: { title: string; icon: React.JSX.Element; active: boolean; onClick: () => void; }) { const activeBorderStyle = active ? '$space$px solid $primary_default' : '$space$px solid $border_bright'; return ( {icon} {title} ); } const AddMenu = () => { const actions = useHMSActions(); const [title, setTitle] = useState(''); const localPeerRoleName = useHMSStore(selectLocalPeerRoleName); const [hideVoteCount, setHideVoteCount] = useState(false); const [error, setError] = useState(); const [titleError, setTitleError] = useState(''); const { setPollState } = usePollViewState(); const [interactionType, setInteractionType] = useState(INTERACTION_TYPE.POLL); const inputRef = useRef(null); useEffect(() => { if (inputRef.current) { inputRef.current.focus(); } }, [interactionType]); const handleCreate = (id: string) => { setPollState({ [POLL_STATE.pollInView]: id, [POLL_STATE.view]: POLL_VIEWS.CREATE_QUESTIONS, }); }; const validateTitle = useMemo(() => { if (!isValidTextInput(title)) { if (title) { setTitleError('The title should have between 2-100 characters'); } return true; } else { setTitleError(''); return false; } }, [title]); return ( <> Select the type you want to continue with } onClick={() => setInteractionType(INTERACTION_TYPE.POLL)} active={interactionType === INTERACTION_TYPE.POLL} /> } onClick={() => setInteractionType(INTERACTION_TYPE.QUIZ)} active={interactionType === INTERACTION_TYPE.QUIZ} /> {`Name this ${interactionType.toLowerCase()}`} setTitle(event.target.value.trimStart())} css={{ backgroundColor: '$surface_bright', border: '1px solid $border_default', }} /> setHideVoteCount(value)} css={{ mr: '$6' }} /> Hide Vote Count ); }; const PrevMenu = () => { const hmsActions = useHMSActions(); const polls = useHMSStore(selectPolls); const sortedPolls = useMemo( () => polls ?.sort((a, b) => (b?.createdAt?.getTime?.() || 0) - (a?.createdAt?.getTime?.() || 0)) ?.sort((a, b) => (b?.state === 'started' ? 1 : 0) - (a?.state === 'started' ? 1 : 0)), [polls], ); const permissions = useHMSStore(selectPermissions); useEffect(() => { const updatePolls = async () => { await hmsActions.interactivityCenter.getPolls(); }; updatePolls(); }, [hmsActions.interactivityCenter]); return polls?.length ? ( Previous Polls and Quizzes {sortedPolls?.map(poll => ( ))} ) : null; }; const InteractionCard = ({ id, title, status }: { id: string; title: string; status?: HMSPollState }) => { const { setPollState } = usePollViewState(); return ( {title} ); };