@100mslive/react-native-room-kit
Version:
100ms Room Kit provides simple & easy to use UI components to build Live Streaming & Video Conferencing experiences in your apps.
37 lines • 2.29 kB
JavaScript
import * as React from 'react';
import { useSelector } from 'react-redux';
import { QuizLeaderboardSummary } from './QuizLeaderboardSummary';
import { useFetchLeaderboardResponse } from '../utils/hooks';
export const VoterParticipationSummary = ({
pollId
}) => {
const localPeerUserId = useSelector(state => {
var _state$hmsStates$loca;
return (_state$hmsStates$loca = state.hmsStates.localPeer) === null || _state$hmsStates$loca === void 0 ? void 0 : _state$hmsStates$loca.customerUserID;
});
const leaderboardData = useFetchLeaderboardResponse(pollId);
const totalQuestions = useSelector(state => {
var _state$polls$polls$po;
return (_state$polls$polls$po = state.polls.polls[pollId]) === null || _state$polls$polls$po === void 0 || (_state$polls$polls$po = _state$polls$polls$po.questions) === null || _state$polls$polls$po === void 0 ? void 0 : _state$polls$polls$po.length;
});
const localLeaderboardEntry = localPeerUserId && leaderboardData && Array.isArray(leaderboardData.entries) ? leaderboardData.entries.find(entry => {
var _entry$peer;
return ((_entry$peer = entry.peer) === null || _entry$peer === void 0 ? void 0 : _entry$peer.customerUserId) === localPeerUserId;
}) : null;
const data = React.useMemo(() => {
return [[{
label: 'ANSWERED',
value: localLeaderboardEntry && typeof localLeaderboardEntry.totalResponses === 'number' && typeof totalQuestions === 'number' ? `${Math.round(localLeaderboardEntry.totalResponses / totalQuestions * 100)}% (${localLeaderboardEntry.totalResponses}/${totalQuestions})` : '-'
}, {
label: 'CORRECT ANSWERS',
value: localLeaderboardEntry && typeof localLeaderboardEntry.correctResponses === 'number' && typeof totalQuestions === 'number' ? `${Math.round(localLeaderboardEntry.correctResponses / totalQuestions * 100)}% (${localLeaderboardEntry.correctResponses}/${totalQuestions})` : '-'
}], [{
label: 'TIME TAKEN',
value: localLeaderboardEntry && typeof localLeaderboardEntry.duration === 'number' ? `${(localLeaderboardEntry.duration / 1000).toFixed(2)}s` : '-'
}]];
}, [localLeaderboardEntry]);
return /*#__PURE__*/React.createElement(QuizLeaderboardSummary, {
data: data
});
};
//# sourceMappingURL=VoterParticipationSummary.js.map