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}
);
};