matrix-react-sdk
Version:
SDK for matrix.org using React
121 lines (116 loc) • 19.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PollListItemEnded = void 0;
var _react = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _compoundWeb = require("@vector-im/compound-web");
var _poll = require("../../../../../res/img/element-icons/room/composer/poll.svg");
var _languageHandler = require("../../../../languageHandler");
var _DateUtils = require("../../../../DateUtils");
var _MPollBody = require("../../messages/MPollBody");
var _PollOption = require("../../polls/PollOption");
var _Caption = require("../../typography/Caption");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const getWinningAnswers = (poll, responseRelations) => {
const userVotes = (0, _MPollBody.collectUserVotes)((0, _MPollBody.allVotes)(responseRelations));
const votes = (0, _MPollBody.countVotes)(userVotes, poll.pollEvent);
const totalVoteCount = [...votes.values()].reduce((sum, vote) => sum + vote, 0);
const winCount = Math.max(...votes.values());
return {
totalVoteCount,
winningAnswers: poll.pollEvent.answers.filter(answer => votes.get(answer.id) === winCount).map(answer => ({
answer,
voteCount: votes.get(answer.id) || 0
}))
};
};
/**
* Get deduplicated and validated poll responses
* Will use cached responses from Poll instance when existing
* Updates on changes to Poll responses (paging relations or from sync)
* Returns winning answers and total vote count
*/
const usePollVotes = poll => {
const [results, setResults] = (0, _react.useState)({
totalVoteCount: 0
});
(0, _react.useEffect)(() => {
const getResponses = async () => {
const responseRelations = await poll.getResponses();
setResults(getWinningAnswers(poll, responseRelations));
};
const onPollResponses = responseRelations => setResults(getWinningAnswers(poll, responseRelations));
poll.on(_matrix.PollEvent.Responses, onPollResponses);
getResponses();
return () => {
poll.off(_matrix.PollEvent.Responses, onPollResponses);
};
}, [poll]);
return results;
};
/**
* Render an ended poll with the winning answer and vote count
* @param event - the poll start MatrixEvent
* @param poll - Poll instance
*/
const PollListItemEnded = ({
event,
poll,
onClick
}) => {
const pollEvent = poll.pollEvent;
const {
winningAnswers,
totalVoteCount
} = usePollVotes(poll);
if (!pollEvent) {
return null;
}
const formattedDate = (0, _DateUtils.formatLocalDateShort)(event.getTs());
return /*#__PURE__*/_react.default.createElement("li", {
"data-testid": `pollListItem-${event.getId()}`,
className: "mx_PollListItemEnded",
onClick: onClick
}, /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, {
label: (0, _languageHandler._t)("right_panel|poll|view_poll"),
placement: "top",
isTriggerInteractive: false
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_PollListItemEnded_content"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_PollListItemEnded_title"
}, /*#__PURE__*/_react.default.createElement(_poll.Icon, {
className: "mx_PollListItemEnded_icon"
}), /*#__PURE__*/_react.default.createElement("span", {
className: "mx_PollListItemEnded_question"
}, pollEvent.question.text), /*#__PURE__*/_react.default.createElement(_Caption.Caption, null, formattedDate)), !!winningAnswers?.length && /*#__PURE__*/_react.default.createElement("div", {
className: "mx_PollListItemEnded_answers"
}, winningAnswers?.map(({
answer,
voteCount
}) => /*#__PURE__*/_react.default.createElement(_PollOption.PollOption, {
key: answer.id,
answer: answer,
voteCount: voteCount,
totalVoteCount: totalVoteCount,
pollId: poll.pollId,
displayVoteCount: true,
isChecked: true,
isEnded: true
}))), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_PollListItemEnded_voteCount"
}, /*#__PURE__*/_react.default.createElement(_Caption.Caption, null, (0, _languageHandler._t)("right_panel|poll|final_result", {
count: totalVoteCount
}))))));
};
exports.PollListItemEnded = PollListItemEnded;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2NvbXBvdW5kV2ViIiwiX3BvbGwiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0RhdGVVdGlscyIsIl9NUG9sbEJvZHkiLCJfUG9sbE9wdGlvbiIsIl9DYXB0aW9uIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiZ2V0V2lubmluZ0Fuc3dlcnMiLCJwb2xsIiwicmVzcG9uc2VSZWxhdGlvbnMiLCJ1c2VyVm90ZXMiLCJjb2xsZWN0VXNlclZvdGVzIiwiYWxsVm90ZXMiLCJ2b3RlcyIsImNvdW50Vm90ZXMiLCJwb2xsRXZlbnQiLCJ0b3RhbFZvdGVDb3VudCIsInZhbHVlcyIsInJlZHVjZSIsInN1bSIsInZvdGUiLCJ3aW5Db3VudCIsIk1hdGgiLCJtYXgiLCJ3aW5uaW5nQW5zd2VycyIsImFuc3dlcnMiLCJmaWx0ZXIiLCJhbnN3ZXIiLCJpZCIsIm1hcCIsInZvdGVDb3VudCIsInVzZVBvbGxWb3RlcyIsInJlc3VsdHMiLCJzZXRSZXN1bHRzIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJnZXRSZXNwb25zZXMiLCJvblBvbGxSZXNwb25zZXMiLCJvbiIsIlBvbGxFdmVudCIsIlJlc3BvbnNlcyIsIm9mZiIsIlBvbGxMaXN0SXRlbUVuZGVkIiwiZXZlbnQiLCJvbkNsaWNrIiwiZm9ybWF0dGVkRGF0ZSIsImZvcm1hdExvY2FsRGF0ZVNob3J0IiwiZ2V0VHMiLCJjcmVhdGVFbGVtZW50IiwiZ2V0SWQiLCJjbGFzc05hbWUiLCJUb29sdGlwIiwibGFiZWwiLCJfdCIsInBsYWNlbWVudCIsImlzVHJpZ2dlckludGVyYWN0aXZlIiwiSWNvbiIsInF1ZXN0aW9uIiwidGV4dCIsIkNhcHRpb24iLCJsZW5ndGgiLCJQb2xsT3B0aW9uIiwia2V5IiwicG9sbElkIiwiZGlzcGxheVZvdGVDb3VudCIsImlzQ2hlY2tlZCIsImlzRW5kZWQiLCJjb3VudCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9wb2xscy9wb2xsSGlzdG9yeS9Qb2xsTGlzdEl0ZW1FbmRlZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBvbGxBbnN3ZXJTdWJldmVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9leHRlbnNpYmxlX2V2ZW50c192MS9Qb2xsU3RhcnRFdmVudFwiO1xuaW1wb3J0IHsgTWF0cml4RXZlbnQsIFBvbGwsIFBvbGxFdmVudCwgUmVsYXRpb25zIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuXG5pbXBvcnQgeyBJY29uIGFzIFBvbGxJY29uIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Jlcy9pbWcvZWxlbWVudC1pY29ucy9yb29tL2NvbXBvc2VyL3BvbGwuc3ZnXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGZvcm1hdExvY2FsRGF0ZVNob3J0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0RhdGVVdGlsc1wiO1xuaW1wb3J0IHsgYWxsVm90ZXMsIGNvbGxlY3RVc2VyVm90ZXMsIGNvdW50Vm90ZXMgfSBmcm9tIFwiLi4vLi4vbWVzc2FnZXMvTVBvbGxCb2R5XCI7XG5pbXBvcnQgeyBQb2xsT3B0aW9uIH0gZnJvbSBcIi4uLy4uL3BvbGxzL1BvbGxPcHRpb25cIjtcbmltcG9ydCB7IENhcHRpb24gfSBmcm9tIFwiLi4vLi4vdHlwb2dyYXBoeS9DYXB0aW9uXCI7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gICAgZXZlbnQ6IE1hdHJpeEV2ZW50O1xuICAgIHBvbGw6IFBvbGw7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbn1cblxudHlwZSBFbmRlZFBvbGxTdGF0ZSA9IHtcbiAgICB3aW5uaW5nQW5zd2Vyczoge1xuICAgICAgICBhbnN3ZXI6IFBvbGxBbnN3ZXJTdWJldmVudDtcbiAgICAgICAgdm90ZUNvdW50OiBudW1iZXI7XG4gICAgfVtdO1xuICAgIHRvdGFsVm90ZUNvdW50OiBudW1iZXI7XG59O1xuY29uc3QgZ2V0V2lubmluZ0Fuc3dlcnMgPSAocG9sbDogUG9sbCwgcmVzcG9uc2VSZWxhdGlvbnM6IFJlbGF0aW9ucyk6IEVuZGVkUG9sbFN0YXRlID0+IHtcbiAgICBjb25zdCB1c2VyVm90ZXMgPSBjb2xsZWN0VXNlclZvdGVzKGFsbFZvdGVzKHJlc3BvbnNlUmVsYXRpb25zKSk7XG4gICAgY29uc3Qgdm90ZXMgPSBjb3VudFZvdGVzKHVzZXJWb3RlcywgcG9sbC5wb2xsRXZlbnQpO1xuICAgIGNvbnN0IHRvdGFsVm90ZUNvdW50ID0gWy4uLnZvdGVzLnZhbHVlcygpXS5yZWR1Y2UoKHN1bSwgdm90ZSkgPT4gc3VtICsgdm90ZSwgMCk7XG4gICAgY29uc3Qgd2luQ291bnQgPSBNYXRoLm1heCguLi52b3Rlcy52YWx1ZXMoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b3RhbFZvdGVDb3VudCxcbiAgICAgICAgd2lubmluZ0Fuc3dlcnM6IHBvbGwucG9sbEV2ZW50LmFuc3dlcnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGFuc3dlcikgPT4gdm90ZXMuZ2V0KGFuc3dlci5pZCkgPT09IHdpbkNvdW50KVxuICAgICAgICAgICAgLm1hcCgoYW5zd2VyKSA9PiAoe1xuICAgICAgICAgICAgICAgIGFuc3dlcixcbiAgICAgICAgICAgICAgICB2b3RlQ291bnQ6IHZvdGVzLmdldChhbnN3ZXIuaWQpIHx8IDAsXG4gICAgICAgICAgICB9KSksXG4gICAgfTtcbn07XG5cbi8qKlxuICogR2V0IGRlZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkIHBvbGwgcmVzcG9uc2VzXG4gKiBXaWxsIHVzZSBjYWNoZWQgcmVzcG9uc2VzIGZyb20gUG9sbCBpbnN0YW5jZSB3aGVuIGV4aXN0aW5nXG4gKiBVcGRhdGVzIG9uIGNoYW5nZXMgdG8gUG9sbCByZXNwb25zZXMgKHBhZ2luZyByZWxhdGlvbnMgb3IgZnJvbSBzeW5jKVxuICogUmV0dXJucyB3aW5uaW5nIGFuc3dlcnMgYW5kIHRvdGFsIHZvdGUgY291bnRcbiAqL1xuY29uc3QgdXNlUG9sbFZvdGVzID0gKHBvbGw6IFBvbGwpOiBQYXJ0aWFsPEVuZGVkUG9sbFN0YXRlPiA9PiB7XG4gICAgY29uc3QgW3Jlc3VsdHMsIHNldFJlc3VsdHNdID0gdXNlU3RhdGUoeyB0b3RhbFZvdGVDb3VudDogMCB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFJlc3BvbnNlcyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlUmVsYXRpb25zID0gYXdhaXQgcG9sbC5nZXRSZXNwb25zZXMoKTtcbiAgICAgICAgICAgIHNldFJlc3VsdHMoZ2V0V2lubmluZ0Fuc3dlcnMocG9sbCwgcmVzcG9uc2VSZWxhdGlvbnMpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25Qb2xsUmVzcG9uc2VzID0gKHJlc3BvbnNlUmVsYXRpb25zOiBSZWxhdGlvbnMpOiB2b2lkID0+XG4gICAgICAgICAgICBzZXRSZXN1bHRzKGdldFdpbm5pbmdBbnN3ZXJzKHBvbGwsIHJlc3BvbnNlUmVsYXRpb25zKSk7XG4gICAgICAgIHBvbGwub24oUG9sbEV2ZW50LlJlc3BvbnNlcywgb25Qb2xsUmVzcG9uc2VzKTtcblxuICAgICAgICBnZXRSZXNwb25zZXMoKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcG9sbC5vZmYoUG9sbEV2ZW50LlJlc3BvbnNlcywgb25Qb2xsUmVzcG9uc2VzKTtcbiAgICAgICAgfTtcbiAgICB9LCBbcG9sbF0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFJlbmRlciBhbiBlbmRlZCBwb2xsIHdpdGggdGhlIHdpbm5pbmcgYW5zd2VyIGFuZCB2b3RlIGNvdW50XG4gKiBAcGFyYW0gZXZlbnQgLSB0aGUgcG9sbCBzdGFydCBNYXRyaXhFdmVudFxuICogQHBhcmFtIHBvbGwgLSBQb2xsIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBQb2xsTGlzdEl0ZW1FbmRlZDogUmVhY3QuRkM8UHJvcHM+ID0gKHsgZXZlbnQsIHBvbGwsIG9uQ2xpY2sgfSkgPT4ge1xuICAgIGNvbnN0IHBvbGxFdmVudCA9IHBvbGwucG9sbEV2ZW50O1xuICAgIGNvbnN0IHsgd2lubmluZ0Fuc3dlcnMsIHRvdGFsVm90ZUNvdW50IH0gPSB1c2VQb2xsVm90ZXMocG9sbCk7XG4gICAgaWYgKCFwb2xsRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBmb3JtYXRMb2NhbERhdGVTaG9ydChldmVudC5nZXRUcygpKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBkYXRhLXRlc3RpZD17YHBvbGxMaXN0SXRlbS0ke2V2ZW50LmdldElkKCkhfWB9IGNsYXNzTmFtZT1cIm14X1BvbGxMaXN0SXRlbUVuZGVkXCIgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8VG9vbHRpcCBsYWJlbD17X3QoXCJyaWdodF9wYW5lbHxwb2xsfHZpZXdfcG9sbFwiKX0gcGxhY2VtZW50PVwidG9wXCIgaXNUcmlnZ2VySW50ZXJhY3RpdmU9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1BvbGxMaXN0SXRlbUVuZGVkX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Qb2xsTGlzdEl0ZW1FbmRlZF90aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBvbGxJY29uIGNsYXNzTmFtZT1cIm14X1BvbGxMaXN0SXRlbUVuZGVkX2ljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfUG9sbExpc3RJdGVtRW5kZWRfcXVlc3Rpb25cIj57cG9sbEV2ZW50LnF1ZXN0aW9uLnRleHR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENhcHRpb24+e2Zvcm1hdHRlZERhdGV9PC9DYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgeyEhd2lubmluZ0Fuc3dlcnM/Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1BvbGxMaXN0SXRlbUVuZGVkX2Fuc3dlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7d2lubmluZ0Fuc3dlcnM/Lm1hcCgoeyBhbnN3ZXIsIHZvdGVDb3VudCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb2xsT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Fuc3dlci5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlcj17YW5zd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZUNvdW50PXt2b3RlQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFZvdGVDb3VudD17dG90YWxWb3RlQ291bnQhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbElkPXtwb2xsLnBvbGxJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWb3RlQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUG9sbExpc3RJdGVtRW5kZWRfdm90ZUNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2FwdGlvbj57X3QoXCJyaWdodF9wYW5lbHxwb2xsfGZpbmFsX3Jlc3VsdFwiLCB7IGNvdW50OiB0b3RhbFZvdGVDb3VudCB9KX08L0NhcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L2xpPlxuICAgICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdB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