matrix-react-sdk
Version:
SDK for matrix.org using React
117 lines (115 loc) • 18.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useDmMember = exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _compoundWeb = require("@vector-im/compound-web");
var _presence = require("../../../utils/presence");
var _languageHandler = require("../../../languageHandler");
var _DMRoomMap = _interopRequireDefault(require("../../../utils/DMRoomMap"));
var _getJoinedNonFunctionalMembers = require("../../../utils/room/getJoinedNonFunctionalMembers");
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _PresenceLabel = require("../rooms/PresenceLabel");
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 2024 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.
*/
var Presence = /*#__PURE__*/function (Presence) {
Presence["Online"] = "ONLINE";
Presence["Away"] = "AWAY";
Presence["Offline"] = "OFFLINE";
Presence["Busy"] = "BUSY";
return Presence;
}(Presence || {});
function tooltipText(variant) {
switch (variant) {
case Presence.Online:
return (0, _languageHandler._t)("presence|online");
case Presence.Away:
return (0, _languageHandler._t)("presence|away");
case Presence.Offline:
return (0, _languageHandler._t)("presence|offline");
case Presence.Busy:
return (0, _languageHandler._t)("presence|busy");
}
}
function getDmMember(room) {
const otherUserId = _DMRoomMap.default.shared().getUserIdForRoomId(room.roomId);
return otherUserId ? room.getMember(otherUserId) : null;
}
const useDmMember = room => {
const [dmMember, setDmMember] = (0, _react.useState)(getDmMember(room));
const updateDmMember = () => {
setDmMember(getDmMember(room));
};
(0, _useEventEmitter.useEventEmitter)(room.currentState, _matrix.RoomStateEvent.Members, updateDmMember);
(0, _useEventEmitter.useEventEmitter)(room.client, _matrix.ClientEvent.AccountData, updateDmMember);
(0, _react.useEffect)(updateDmMember, [room]);
return dmMember;
};
exports.useDmMember = useDmMember;
function getPresence(member) {
if (!member?.user) return null;
const presence = member.user.presence;
const isOnline = member.user.currentlyActive || presence === "online";
if (_PresenceLabel.BUSY_PRESENCE_NAME.matches(member.user.presence)) {
return Presence.Busy;
}
if (isOnline) {
return Presence.Online;
}
if (presence === "offline") {
return Presence.Offline;
}
if (presence === "unavailable") {
return Presence.Away;
}
return null;
}
const usePresence = (room, member) => {
const [presence, setPresence] = (0, _react.useState)(getPresence(member));
const updatePresence = () => {
setPresence(getPresence(member));
};
(0, _useEventEmitter.useEventEmitter)(member?.user, _matrix.UserEvent.Presence, updatePresence);
(0, _useEventEmitter.useEventEmitter)(member?.user, _matrix.UserEvent.CurrentlyActive, updatePresence);
(0, _react.useEffect)(updatePresence, [member]);
if ((0, _getJoinedNonFunctionalMembers.getJoinedNonFunctionalMembers)(room).length !== 2 || !(0, _presence.isPresenceEnabled)(room.client)) return null;
return presence;
};
const WithPresenceIndicator = ({
room,
size,
tooltipProps,
children
}) => {
const dmMember = useDmMember(room);
const presence = usePresence(room, dmMember);
let icon;
if (presence) {
icon = /*#__PURE__*/_react.default.createElement("div", {
tabIndex: tooltipProps?.tabIndex ?? 0,
className: `mx_WithPresenceIndicator_icon mx_WithPresenceIndicator_icon_${presence.toLowerCase()}`,
style: {
width: size,
height: size
}
});
}
if (!presence) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_WithPresenceIndicator"
}, children, /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, {
label: tooltipText(presence),
placement: "bottom"
}, icon));
};
var _default = exports.default = WithPresenceIndicator;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2NvbXBvdW5kV2ViIiwiX3ByZXNlbmNlIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9ETVJvb21NYXAiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2dldEpvaW5lZE5vbkZ1bmN0aW9uYWxNZW1iZXJzIiwiX3VzZUV2ZW50RW1pdHRlciIsIl9QcmVzZW5jZUxhYmVsIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUHJlc2VuY2UiLCJ0b29sdGlwVGV4dCIsInZhcmlhbnQiLCJPbmxpbmUiLCJfdCIsIkF3YXkiLCJPZmZsaW5lIiwiQnVzeSIsImdldERtTWVtYmVyIiwicm9vbSIsIm90aGVyVXNlcklkIiwiRE1Sb29tTWFwIiwic2hhcmVkIiwiZ2V0VXNlcklkRm9yUm9vbUlkIiwicm9vbUlkIiwiZ2V0TWVtYmVyIiwidXNlRG1NZW1iZXIiLCJkbU1lbWJlciIsInNldERtTWVtYmVyIiwidXNlU3RhdGUiLCJ1cGRhdGVEbU1lbWJlciIsInVzZUV2ZW50RW1pdHRlciIsImN1cnJlbnRTdGF0ZSIsIlJvb21TdGF0ZUV2ZW50IiwiTWVtYmVycyIsImNsaWVudCIsIkNsaWVudEV2ZW50IiwiQWNjb3VudERhdGEiLCJ1c2VFZmZlY3QiLCJleHBvcnRzIiwiZ2V0UHJlc2VuY2UiLCJtZW1iZXIiLCJ1c2VyIiwicHJlc2VuY2UiLCJpc09ubGluZSIsImN1cnJlbnRseUFjdGl2ZSIsIkJVU1lfUFJFU0VOQ0VfTkFNRSIsIm1hdGNoZXMiLCJ1c2VQcmVzZW5jZSIsInNldFByZXNlbmNlIiwidXBkYXRlUHJlc2VuY2UiLCJVc2VyRXZlbnQiLCJDdXJyZW50bHlBY3RpdmUiLCJnZXRKb2luZWROb25GdW5jdGlvbmFsTWVtYmVycyIsImxlbmd0aCIsImlzUHJlc2VuY2VFbmFibGVkIiwiV2l0aFByZXNlbmNlSW5kaWNhdG9yIiwic2l6ZSIsInRvb2x0aXBQcm9wcyIsImNoaWxkcmVuIiwiaWNvbiIsImNyZWF0ZUVsZW1lbnQiLCJ0YWJJbmRleCIsImNsYXNzTmFtZSIsInRvTG93ZXJDYXNlIiwic3R5bGUiLCJ3aWR0aCIsImhlaWdodCIsIkZyYWdtZW50IiwiVG9vbHRpcCIsImxhYmVsIiwicGxhY2VtZW50IiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9hdmF0YXJzL1dpdGhQcmVzZW5jZUluZGljYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjQgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2xpZW50RXZlbnQsIFJvb20sIFJvb21NZW1iZXIsIFJvb21TdGF0ZUV2ZW50LCBVc2VyRXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtd2ViXCI7XG5cbmltcG9ydCB7IGlzUHJlc2VuY2VFbmFibGVkIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3ByZXNlbmNlXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBETVJvb21NYXAgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0RNUm9vbU1hcFwiO1xuaW1wb3J0IHsgZ2V0Sm9pbmVkTm9uRnVuY3Rpb25hbE1lbWJlcnMgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcm9vbS9nZXRKb2luZWROb25GdW5jdGlvbmFsTWVtYmVyc1wiO1xuaW1wb3J0IHsgdXNlRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50RW1pdHRlclwiO1xuaW1wb3J0IHsgQlVTWV9QUkVTRU5DRV9OQU1FIH0gZnJvbSBcIi4uL3Jvb21zL1ByZXNlbmNlTGFiZWxcIjtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICByb29tOiBSb29tO1xuICAgIHNpemU6IHN0cmluZzsgLy8gQ1NTIHNpemVcbiAgICB0b29sdGlwUHJvcHM/OiB7XG4gICAgICAgIHRhYkluZGV4PzogbnVtYmVyO1xuICAgIH07XG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuZW51bSBQcmVzZW5jZSB7XG4gICAgLy8gTm90ZTogdGhlIG5hbWVzIGhlcmUgYXJlIHVzZWQgaW4gQ1NTIGNsYXNzIG5hbWVzXG4gICAgT25saW5lID0gXCJPTkxJTkVcIixcbiAgICBBd2F5ID0gXCJBV0FZXCIsXG4gICAgT2ZmbGluZSA9IFwiT0ZGTElORVwiLFxuICAgIEJ1c3kgPSBcIkJVU1lcIixcbn1cblxuZnVuY3Rpb24gdG9vbHRpcFRleHQodmFyaWFudDogUHJlc2VuY2UpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodmFyaWFudCkge1xuICAgICAgICBjYXNlIFByZXNlbmNlLk9ubGluZTpcbiAgICAgICAgICAgIHJldHVybiBfdChcInByZXNlbmNlfG9ubGluZVwiKTtcbiAgICAgICAgY2FzZSBQcmVzZW5jZS5Bd2F5OlxuICAgICAgICAgICAgcmV0dXJuIF90KFwicHJlc2VuY2V8YXdheVwiKTtcbiAgICAgICAgY2FzZSBQcmVzZW5jZS5PZmZsaW5lOlxuICAgICAgICAgICAgcmV0dXJuIF90KFwicHJlc2VuY2V8b2ZmbGluZVwiKTtcbiAgICAgICAgY2FzZSBQcmVzZW5jZS5CdXN5OlxuICAgICAgICAgICAgcmV0dXJuIF90KFwicHJlc2VuY2V8YnVzeVwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldERtTWVtYmVyKHJvb206IFJvb20pOiBSb29tTWVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3Qgb3RoZXJVc2VySWQgPSBETVJvb21NYXAuc2hhcmVkKCkuZ2V0VXNlcklkRm9yUm9vbUlkKHJvb20ucm9vbUlkKTtcbiAgICByZXR1cm4gb3RoZXJVc2VySWQgPyByb29tLmdldE1lbWJlcihvdGhlclVzZXJJZCkgOiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgdXNlRG1NZW1iZXIgPSAocm9vbTogUm9vbSk6IFJvb21NZW1iZXIgfCBudWxsID0+IHtcbiAgICBjb25zdCBbZG1NZW1iZXIsIHNldERtTWVtYmVyXSA9IHVzZVN0YXRlPFJvb21NZW1iZXIgfCBudWxsPihnZXREbU1lbWJlcihyb29tKSk7XG4gICAgY29uc3QgdXBkYXRlRG1NZW1iZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHNldERtTWVtYmVyKGdldERtTWVtYmVyKHJvb20pKTtcbiAgICB9O1xuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHJvb20uY3VycmVudFN0YXRlLCBSb29tU3RhdGVFdmVudC5NZW1iZXJzLCB1cGRhdGVEbU1lbWJlcik7XG4gICAgdXNlRXZlbnRFbWl0dGVyKHJvb20uY2xpZW50LCBDbGllbnRFdmVudC5BY2NvdW50RGF0YSwgdXBkYXRlRG1NZW1iZXIpO1xuICAgIHVzZUVmZmVjdCh1cGRhdGVEbU1lbWJlciwgW3Jvb21dKTtcblxuICAgIHJldHVybiBkbU1lbWJlcjtcbn07XG5cbmZ1bmN0aW9uIGdldFByZXNlbmNlKG1lbWJlcjogUm9vbU1lbWJlciB8IG51bGwpOiBQcmVzZW5jZSB8IG51bGwge1xuICAgIGlmICghbWVtYmVyPy51c2VyKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHByZXNlbmNlID0gbWVtYmVyLnVzZXIucHJlc2VuY2U7XG4gICAgY29uc3QgaXNPbmxpbmUgPSBtZW1iZXIudXNlci5jdXJyZW50bHlBY3RpdmUgfHwgcHJlc2VuY2UgPT09IFwib25saW5lXCI7XG4gICAgaWYgKEJVU1lfUFJFU0VOQ0VfTkFNRS5tYXRjaGVzKG1lbWJlci51c2VyLnByZXNlbmNlKSkge1xuICAgICAgICByZXR1cm4gUHJlc2VuY2UuQnVzeTtcbiAgICB9XG4gICAgaWYgKGlzT25saW5lKSB7XG4gICAgICAgIHJldHVybiBQcmVzZW5jZS5PbmxpbmU7XG4gICAgfVxuICAgIGlmIChwcmVzZW5jZSA9PT0gXCJvZmZsaW5lXCIpIHtcbiAgICAgICAgcmV0dXJuIFByZXNlbmNlLk9mZmxpbmU7XG4gICAgfVxuICAgIGlmIChwcmVzZW5jZSA9PT0gXCJ1bmF2YWlsYWJsZVwiKSB7XG4gICAgICAgIHJldHVybiBQcmVzZW5jZS5Bd2F5O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5jb25zdCB1c2VQcmVzZW5jZSA9IChyb29tOiBSb29tLCBtZW1iZXI6IFJvb21NZW1iZXIgfCBudWxsKTogUHJlc2VuY2UgfCBudWxsID0+IHtcbiAgICBjb25zdCBbcHJlc2VuY2UsIHNldFByZXNlbmNlXSA9IHVzZVN0YXRlPFByZXNlbmNlIHwgbnVsbD4oZ2V0UHJlc2VuY2UobWVtYmVyKSk7XG4gICAgY29uc3QgdXBkYXRlUHJlc2VuY2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHNldFByZXNlbmNlKGdldFByZXNlbmNlKG1lbWJlcikpO1xuICAgIH07XG5cbiAgICB1c2VFdmVudEVtaXR0ZXIobWVtYmVyPy51c2VyLCBVc2VyRXZlbnQuUHJlc2VuY2UsIHVwZGF0ZVByZXNlbmNlKTtcbiAgICB1c2VFdmVudEVtaXR0ZXIobWVtYmVyPy51c2VyLCBVc2VyRXZlbnQuQ3VycmVudGx5QWN0aXZlLCB1cGRhdGVQcmVzZW5jZSk7XG4gICAgdXNlRWZmZWN0KHVwZGF0ZVByZXNlbmNlLCBbbWVtYmVyXSk7XG5cbiAgICBpZiAoZ2V0Sm9pbmVkTm9uRnVuY3Rpb25hbE1lbWJlcnMocm9vbSkubGVuZ3RoICE9PSAyIHx8ICFpc1ByZXNlbmNlRW5hYmxlZChyb29tLmNsaWVudCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBwcmVzZW5jZTtcbn07XG5cbmNvbnN0IFdpdGhQcmVzZW5jZUluZGljYXRvcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgcm9vbSwgc2l6ZSwgdG9vbHRpcFByb3BzLCBjaGlsZHJlbiB9KSA9PiB7XG4gICAgY29uc3QgZG1NZW1iZXIgPSB1c2VEbU1lbWJlcihyb29tKTtcbiAgICBjb25zdCBwcmVzZW5jZSA9IHVzZVByZXNlbmNlKHJvb20sIGRtTWVtYmVyKTtcblxuICAgIGxldCBpY29uOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAocHJlc2VuY2UpIHtcbiAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICB0YWJJbmRleD17dG9vbHRpcFByb3BzPy50YWJJbmRleCA/PyAwfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YG14X1dpdGhQcmVzZW5jZUluZGljYXRvcl9pY29uIG14X1dpdGhQcmVzZW5jZUluZGljYXRvcl9pY29uXyR7cHJlc2VuY2UudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwcmVzZW5jZSkgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfV2l0aFByZXNlbmNlSW5kaWNhdG9yXCI+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8VG9vbHRpcCBsYWJlbD17dG9vbHRpcFRleHQocHJlc2VuY2UpfSBwbGFjZW1lbnQ9XCJib3R0b21cIj5cbiAgICAgICAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdpdGhQcmVzZW5jZUluZGljYXRvcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFDLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBTyw4QkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsZ0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGNBQUEsR0FBQVQsT0FBQTtBQUE0RCxTQUFBVSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWix3QkFBQVksQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENB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