bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/polling/container.jsx

73 lines
1.9 KiB
React
Raw Normal View History

2016-05-06 02:50:18 +08:00
import React from 'react';
import PropTypes from 'prop-types';
import { withTracker } from 'meteor/react-meteor-data';
2023-12-09 02:51:41 +08:00
import { useMutation } from '@apollo/client';
2017-10-06 20:50:01 +08:00
import PollingService from './service';
import PollService from '/imports/ui/components/poll/service';
import PollingComponent from './component';
2022-03-09 02:05:24 +08:00
import { isPollingEnabled } from '/imports/ui/services/features';
import useCurrentUser from '/imports/ui/core/hooks/useCurrentUser';
2023-12-09 03:22:52 +08:00
import { POLL_SUBMIT_TYPED_VOTE, POLL_SUBMIT_VOTE } from '/imports/ui/components/poll/mutations';
2016-05-06 02:50:18 +08:00
const propTypes = {
pollExists: PropTypes.bool.isRequired,
2017-10-06 20:50:01 +08:00
};
const PollingContainer = ({ pollExists, ...props }) => {
const { data: currentUserData } = useCurrentUser((user) => ({
presenter: user.presenter,
}));
const showPolling = pollExists && !currentUserData?.presenter && isPollingEnabled();
2023-12-09 02:51:41 +08:00
const [pollSubmitUserTypedVote] = useMutation(POLL_SUBMIT_TYPED_VOTE);
2023-12-09 03:22:52 +08:00
const [pollSubmitUserVote] = useMutation(POLL_SUBMIT_VOTE);
2023-12-09 02:51:41 +08:00
const handleTypedVote = (pollId, answer) => {
pollSubmitUserTypedVote({
variables: {
pollId,
answer,
},
});
};
2023-12-09 03:22:52 +08:00
const handleVote = (pollId, answerIds) => {
pollSubmitUserVote({
variables: {
pollId,
answerIds,
},
});
};
2019-07-02 22:54:37 +08:00
if (showPolling) {
return (
2023-12-09 03:22:52 +08:00
<PollingComponent handleTypedVote={handleTypedVote} handleVote={handleVote} {...props} />
);
}
return null;
};
PollingContainer.propTypes = propTypes;
export default withTracker(() => {
const {
2023-12-09 03:22:52 +08:00
pollExists, poll,
} = PollingService.mapPolls();
2021-11-27 00:30:56 +08:00
const { pollTypes } = PollService;
2022-03-09 02:05:24 +08:00
if (poll && poll?.pollType) {
2021-11-27 00:30:56 +08:00
const isResponse = poll.pollType === pollTypes.Response;
Meteor.subscribe('polls', isResponse);
}
2019-05-23 02:00:44 +08:00
return ({
pollExists,
poll,
pollAnswerIds: PollService.pollAnswerIds,
2021-11-27 00:30:56 +08:00
pollTypes,
isDefaultPoll: PollService.isDefaultPoll,
isMeteorConnected: Meteor.status().connected,
2019-05-23 02:00:44 +08:00
});
})(PollingContainer);