matrix-react-sdk
Version:
SDK for matrix.org using React
149 lines (124 loc) • 15.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _languageHandler = require("../../../languageHandler");
var _FormattingUtils = require("../../../utils/FormattingUtils");
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _ReactionsRowButtonTooltip = _interopRequireDefault(require("./ReactionsRowButtonTooltip"));
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _dec, _class, _class2, _temp;
let ReactionsRowButton = (_dec = (0, _replaceableComponent.replaceableComponent)("views.messages.ReactionsRowButton"), _dec(_class = (_temp = _class2 = class ReactionsRowButton extends _react.default.PureComponent
/*:: <IProps, IState>*/
{
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "state", {
tooltipRendered: false,
tooltipVisible: false
});
(0, _defineProperty2.default)(this, "onClick", () => {
const {
mxEvent,
myReactionEvent,
content
} = this.props;
if (myReactionEvent) {
this.context.redactEvent(mxEvent.getRoomId(), myReactionEvent.getId());
} else {
this.context.sendEvent(mxEvent.getRoomId(), "m.reaction", {
"m.relates_to": {
"rel_type": "m.annotation",
"event_id": mxEvent.getId(),
"key": content
}
});
_dispatcher.default.dispatch({
action: "message_sent"
});
}
});
(0, _defineProperty2.default)(this, "onMouseOver", () => {
this.setState({
// To avoid littering the DOM with a tooltip for every reaction,
// only render it on first use.
tooltipRendered: true,
tooltipVisible: true
});
});
(0, _defineProperty2.default)(this, "onMouseLeave", () => {
this.setState({
tooltipVisible: false
});
});
}
render() {
const {
mxEvent,
content,
count,
reactionEvents,
myReactionEvent
} = this.props;
const classes = (0, _classnames.default)({
mx_ReactionsRowButton: true,
mx_ReactionsRowButton_selected: !!myReactionEvent
});
let tooltip;
if (this.state.tooltipRendered) {
tooltip = /*#__PURE__*/_react.default.createElement(_ReactionsRowButtonTooltip.default, {
mxEvent: this.props.mxEvent,
content: content,
reactionEvents: reactionEvents,
visible: this.state.tooltipVisible
});
}
const room = this.context.getRoom(mxEvent.getRoomId());
let label;
if (room) {
const senders = [];
for (const reactionEvent of reactionEvents) {
const member = room.getMember(reactionEvent.getSender());
const name = member ? member.name : reactionEvent.getSender();
senders.push(name);
}
label = (0, _languageHandler._t)("<reactors/><reactedWith> reacted with %(content)s</reactedWith>", {
content
}, {
reactors: () => {
return (0, _FormattingUtils.formatCommaSeparatedList)(senders, 6);
},
reactedWith: sub => {
if (!content) {
return null;
}
return sub;
}
});
}
const isPeeking = room.getMyMembership() !== "join";
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: classes,
"aria-label": label,
onClick: this.onClick,
disabled: isPeeking,
onMouseOver: this.onMouseOver,
onMouseLeave: this.onMouseLeave
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_ReactionsRowButton_content",
"aria-hidden": "true"
}, content), /*#__PURE__*/_react.default.createElement("span", {
className: "mx_ReactionsRowButton_count",
"aria-hidden": "true"
}, count), tooltip);
}
}, (0, _defineProperty2.default)(_class2, "contextType", _MatrixClientContext.default), _temp)) || _class);
exports.default = ReactionsRowButton;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL21lc3NhZ2VzL1JlYWN0aW9uc1Jvd0J1dHRvbi50c3giXSwibmFtZXMiOlsiUmVhY3Rpb25zUm93QnV0dG9uIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwidG9vbHRpcFJlbmRlcmVkIiwidG9vbHRpcFZpc2libGUiLCJteEV2ZW50IiwibXlSZWFjdGlvbkV2ZW50IiwiY29udGVudCIsInByb3BzIiwiY29udGV4dCIsInJlZGFjdEV2ZW50IiwiZ2V0Um9vbUlkIiwiZ2V0SWQiLCJzZW5kRXZlbnQiLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsInNldFN0YXRlIiwicmVuZGVyIiwiY291bnQiLCJyZWFjdGlvbkV2ZW50cyIsImNsYXNzZXMiLCJteF9SZWFjdGlvbnNSb3dCdXR0b24iLCJteF9SZWFjdGlvbnNSb3dCdXR0b25fc2VsZWN0ZWQiLCJ0b29sdGlwIiwic3RhdGUiLCJyb29tIiwiZ2V0Um9vbSIsImxhYmVsIiwic2VuZGVycyIsInJlYWN0aW9uRXZlbnQiLCJtZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRTZW5kZXIiLCJuYW1lIiwicHVzaCIsInJlYWN0b3JzIiwicmVhY3RlZFdpdGgiLCJzdWIiLCJpc1BlZWtpbmciLCJnZXRNeU1lbWJlcnNoaXAiLCJvbkNsaWNrIiwib25Nb3VzZU92ZXIiLCJvbk1vdXNlTGVhdmUiLCJNYXRyaXhDbGllbnRDb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztJQXFCcUJBLGtCLFdBRHBCLGdEQUFxQixtQ0FBckIsQyxtQ0FBRCxNQUNxQkEsa0JBRHJCLFNBQ2dEQyxlQUFNQztBQUR0RDtBQUNvRjtBQUFBO0FBQUE7QUFBQSxpREFHeEU7QUFDSkMsTUFBQUEsZUFBZSxFQUFFLEtBRGI7QUFFSkMsTUFBQUEsY0FBYyxFQUFFO0FBRlosS0FId0U7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QVRMLE9BTEksQ0FBUjtBQWlCSDs7QUFDRCxVQUFNQyxTQUFTLEdBQUdiLElBQUksQ0FBQ2MsZUFBTCxPQUEyQixNQUE3QztBQUNBLHdCQUFPLDZCQUFDLHlCQUFEO0FBQ0gsTUFBQSxTQUFTLEVBQUVuQixPQURSO0FBRUgsb0JBQVlPLEtBRlQ7QUFHSCxNQUFBLE9BQU8sRUFBRSxLQUFLYSxPQUhYO0FBSUgsTUFBQSxRQUFRLEVBQUVGLFNBSlA7QUFLSCxNQUFBLFdBQVcsRUFBRSxLQUFLRyxXQUxmO0FBTUgsTUFBQSxZQUFZLEVBQUUsS0FBS0M7QUFOaEIsb0JBUUg7QUFBTSxNQUFBLFNBQVMsRUFBQywrQkFBaEI7QUFBZ0QscUJBQVk7QUFBNUQsT0FDS3BDLE9BREwsQ0FSRyxlQVdIO0FBQU0sTUFBQSxTQUFTLEVBQUMsNkJBQWhCO0FBQThDLHFCQUFZO0FBQTFELE9BQ0tZLEtBREwsQ0FYRyxFQWNGSyxPQWRFLENBQVA7QUFnQkg7O0FBeEcrRSxDLHdEQUMzRG9CLDRCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE5LCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21vZGVscy9ldmVudFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gJy4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlcic7XG5pbXBvcnQgeyBmb3JtYXRDb21tYVNlcGFyYXRlZExpc3QgfSBmcm9tICcuLi8uLi8uLi91dGlscy9Gb3JtYXR0aW5nVXRpbHMnO1xuaW1wb3J0IGRpcyBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyByZXBsYWNlYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuaW1wb3J0IFJlYWN0aW9uc1Jvd0J1dHRvblRvb2x0aXAgZnJvbSBcIi4vUmVhY3Rpb25zUm93QnV0dG9uVG9vbHRpcFwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIC8vIFRoZSBldmVudCB3ZSdyZSBkaXNwbGF5aW5nIHJlYWN0aW9ucyBmb3JcbiAgICBteEV2ZW50OiBNYXRyaXhFdmVudDtcbiAgICAvLyBUaGUgcmVhY3Rpb24gY29udGVudCAvIGtleSAvIGVtb2ppXG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIC8vIFRoZSBjb3VudCBvZiB2b3RlcyBmb3IgdGhpcyBrZXlcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIC8vIEEgU2V0IG9mIE1hdHJpeCByZWFjdGlvbiBldmVudHMgZm9yIHRoaXMga2V5XG4gICAgcmVhY3Rpb25FdmVudHM6IFNldDxNYXRyaXhFdmVudD47XG4gICAgLy8gQSBwb3NzaWJsZSBNYXRyaXggZXZlbnQgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgdm90ZWQgZm9yIHRoaXMgdHlwZVxuICAgIG15UmVhY3Rpb25FdmVudD86IE1hdHJpeEV2ZW50O1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICB0b29sdGlwUmVuZGVyZWQ6IGJvb2xlYW47XG4gICAgdG9vbHRpcFZpc2libGU6IGJvb2xlYW47XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLm1lc3NhZ2VzLlJlYWN0aW9uc1Jvd0J1dHRvblwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhY3Rpb25zUm93QnV0dG9uIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hdHJpeENsaWVudENvbnRleHQ7XG5cbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgdG9vbHRpcFJlbmRlcmVkOiBmYWxzZSxcbiAgICAgICAgdG9vbHRpcFZpc2libGU6IGZhbHNlLFxuICAgIH07XG5cbiAgICBvbkNsaWNrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB7IG14RXZlbnQsIG15UmVhY3Rpb25FdmVudCwgY29udGVudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKG15UmVhY3Rpb25FdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlZGFjdEV2ZW50KFxuICAgICAgICAgICAgICAgIG14RXZlbnQuZ2V0Um9vbUlkKCksXG4gICAgICAgICAgICAgICAgbXlSZWFjdGlvbkV2ZW50LmdldElkKCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNlbmRFdmVudChteEV2ZW50LmdldFJvb21JZCgpLCBcIm0ucmVhY3Rpb25cIiwge1xuICAgICAgICAgICAgICAgIFwibS5yZWxhdGVzX3RvXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJyZWxfdHlwZVwiOiBcIm0uYW5ub3RhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImV2ZW50X2lkXCI6IG14RXZlbnQuZ2V0SWQoKSxcbiAgICAgICAgICAgICAgICAgICAgXCJrZXlcIjogY29udGVudCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXMuZGlzcGF0Y2goe2FjdGlvbjogXCJtZXNzYWdlX3NlbnRcIn0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uTW91c2VPdmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC8vIFRvIGF2b2lkIGxpdHRlcmluZyB0aGUgRE9NIHdpdGggYSB0b29sdGlwIGZvciBldmVyeSByZWFjdGlvbixcbiAgICAgICAgICAgIC8vIG9ubHkgcmVuZGVyIGl0IG9uIGZpcnN0IHVzZS5cbiAgICAgICAgICAgIHRvb2x0aXBSZW5kZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHRvb2x0aXBWaXNpYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9vbHRpcFZpc2libGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgbXhFdmVudCwgY29udGVudCwgY291bnQsIHJlYWN0aW9uRXZlbnRzLCBteVJlYWN0aW9uRXZlbnQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAgICAgbXhfUmVhY3Rpb25zUm93QnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgbXhfUmVhY3Rpb25zUm93QnV0dG9uX3NlbGVjdGVkOiAhIW15UmVhY3Rpb25FdmVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHRvb2x0aXA7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnRvb2x0aXBSZW5kZXJlZCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IDxSZWFjdGlvbnNSb3dCdXR0b25Ub29sdGlwXG4gICAgICAgICAgICAgICAgbXhFdmVudD17dGhpcy5wcm9wcy5teEV2ZW50fVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgcmVhY3Rpb25FdmVudHM9e3JlYWN0aW9uRXZlbnRzfVxuICAgICAgICAgICAgICAgIHZpc2libGU9e3RoaXMuc3RhdGUudG9vbHRpcFZpc2libGV9XG4gICAgICAgICAgICAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmNvbnRleHQuZ2V0Um9vbShteEV2ZW50LmdldFJvb21JZCgpKTtcbiAgICAgICAgbGV0IGxhYmVsO1xuICAgICAgICBpZiAocm9vbSkge1xuICAgICAgICAgICAgY29uc3Qgc2VuZGVycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWFjdGlvbkV2ZW50IG9mIHJlYWN0aW9uRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gcm9vbS5nZXRNZW1iZXIocmVhY3Rpb25FdmVudC5nZXRTZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IG1lbWJlciA/IG1lbWJlci5uYW1lIDogcmVhY3Rpb25FdmVudC5nZXRTZW5kZXIoKTtcbiAgICAgICAgICAgICAgICBzZW5kZXJzLnB1c2gobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbCA9IF90KFxuICAgICAgICAgICAgICAgIFwiPHJlYWN0b3JzLz48cmVhY3RlZFdpdGg+IHJlYWN0ZWQgd2l0aCAlKGNvbnRlbnQpczwvcmVhY3RlZFdpdGg+XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZWFjdG9yczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdENvbW1hU2VwYXJhdGVkTGlzdChzZW5kZXJzLCA2KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RlZFdpdGg6IChzdWIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YjtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1BlZWtpbmcgPSByb29tLmdldE15TWVtYmVyc2hpcCgpICE9PSBcImpvaW5cIjtcbiAgICAgICAgcmV0dXJuIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc1BlZWtpbmd9XG4gICAgICAgICAgICBvbk1vdXNlT3Zlcj17dGhpcy5vbk1vdXNlT3Zlcn1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5vbk1vdXNlTGVhdmV9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14X1JlYWN0aW9uc1Jvd0J1dHRvbl9jb250ZW50XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9SZWFjdGlvbnNSb3dCdXR0b25fY291bnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7Y291bnR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7dG9vbHRpcH1cbiAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPjtcbiAgICB9XG59XG4iXX0=