App.VotePoll = function VotePoll({ code }) {
const [poll, setPoll] = React.useState(null);
const [combos, setCombos] = React.useState([]);
const [loading, setLoading] = React.useState(true);
const [error, setError] = React.useState('');
const [voting, setVoting] = React.useState({});
const [removing, setRemoving] = React.useState(null);
const [showAddCombo, setShowAddCombo] = React.useState(false);
const loadPoll = () => {
App.API.get('polls/' + code + '?fingerprint=' + App.fingerprint)
.then(data => {
setPoll(data.poll);
setCombos(data.combos);
setLoading(false);
})
.catch(err => {
setError(err.message);
setLoading(false);
});
};
React.useEffect(() => {
loadPoll();
}, [code]);
const handleRate = (pollComboId, rating) => {
setVoting(prev => ({ ...prev, [pollComboId]: true }));
App.API.post('votes', {
pollComboId: pollComboId,
rating: rating,
fingerprint: App.fingerprint,
}).then(() => {
setCombos(prev => prev.map(c =>
c.poll_combo_id === pollComboId ? { ...c, userRating: rating } : c
));
setVoting(prev => ({ ...prev, [pollComboId]: false }));
}).catch(err => {
alert(err.message);
setVoting(prev => ({ ...prev, [pollComboId]: false }));
});
};
const handleRemoveCombo = (pollComboId, comboName) => {
if (!confirm('Remove "' + comboName + '" from this poll? All votes for it will be deleted.')) return;
setRemoving(pollComboId);
App.API.post('polls/' + code, {
_action: 'remove-combo',
pollComboId: pollComboId,
fingerprint: App.fingerprint,
}).then(() => {
setRemoving(null);
loadPoll();
}).catch(err => {
alert(err.message);
setRemoving(null);
});
};
if (loading) return
Rate each combo from 1 to 5 stars