matrix-react-sdk
Version:
SDK for matrix.org using React
96 lines (93 loc) • 14.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _compoundWeb = require("@vector-im/compound-web");
var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore"));
var _NotificationState = require("../../../stores/notifications/NotificationState");
var _languageHandler = require("../../../languageHandler");
var _NotificationLevel = require("../../../stores/notifications/NotificationLevel");
var _StatelessNotificationBadge = require("./NotificationBadge/StatelessNotificationBadge");
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 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.
*/
class NotificationBadge extends _react.default.PureComponent {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "countWatcherRef", void 0);
(0, _defineProperty2.default)(this, "countPreferenceChanged", () => {
this.setState({
showCounts: _SettingsStore.default.getValue("Notifications.alwaysShowBadgeCounts", this.roomId)
});
});
(0, _defineProperty2.default)(this, "onNotificationUpdate", () => {
this.forceUpdate(); // notification state changed - update
});
this.props.notification.on(_NotificationState.NotificationStateEvents.Update, this.onNotificationUpdate);
this.state = {
showCounts: _SettingsStore.default.getValue("Notifications.alwaysShowBadgeCounts", this.roomId)
};
this.countWatcherRef = _SettingsStore.default.watchSetting("Notifications.alwaysShowBadgeCounts", this.roomId, this.countPreferenceChanged);
}
get roomId() {
// We should convert this to null for safety with the SettingsStore
return this.props.roomId || null;
}
componentWillUnmount() {
_SettingsStore.default.unwatchSetting(this.countWatcherRef);
this.props.notification.off(_NotificationState.NotificationStateEvents.Update, this.onNotificationUpdate);
}
componentDidUpdate(prevProps) {
if (prevProps.notification) {
prevProps.notification.off(_NotificationState.NotificationStateEvents.Update, this.onNotificationUpdate);
}
this.props.notification.on(_NotificationState.NotificationStateEvents.Update, this.onNotificationUpdate);
}
render() {
/* eslint @typescript-eslint/no-unused-vars: ["error", { "ignoreRestSiblings": true }] */
const {
notification,
showUnsentTooltip,
hideIfDot,
onClick,
tabIndex
} = this.props;
if (notification.isIdle && !notification.knocked) return null;
if (hideIfDot && notification.level < _NotificationLevel.NotificationLevel.Notification) {
// This would just be a dot and we've been told not to show dots, so don't show it
return null;
}
const commonProps = {
symbol: notification.symbol,
count: notification.count,
level: notification.level,
knocked: notification.knocked
};
let badge;
if (onClick) {
badge = /*#__PURE__*/_react.default.createElement(_StatelessNotificationBadge.StatelessNotificationBadge, (0, _extends2.default)({}, commonProps, {
onClick: onClick,
tabIndex: tabIndex
}));
} else {
badge = /*#__PURE__*/_react.default.createElement(_StatelessNotificationBadge.StatelessNotificationBadge, commonProps);
}
if (showUnsentTooltip && notification.level === _NotificationLevel.NotificationLevel.Unsent) {
return /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, {
label: (0, _languageHandler._t)("notifications|message_didnt_send"),
placement: "right"
}, badge);
}
return badge;
}
}
exports.default = NotificationBadge;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb21wb3VuZFdlYiIsIl9TZXR0aW5nc1N0b3JlIiwiX05vdGlmaWNhdGlvblN0YXRlIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Ob3RpZmljYXRpb25MZXZlbCIsIl9TdGF0ZWxlc3NOb3RpZmljYXRpb25CYWRnZSIsIk5vdGlmaWNhdGlvbkJhZGdlIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0Iiwic2V0U3RhdGUiLCJzaG93Q291bnRzIiwiU2V0dGluZ3NTdG9yZSIsImdldFZhbHVlIiwicm9vbUlkIiwiZm9yY2VVcGRhdGUiLCJub3RpZmljYXRpb24iLCJvbiIsIk5vdGlmaWNhdGlvblN0YXRlRXZlbnRzIiwiVXBkYXRlIiwib25Ob3RpZmljYXRpb25VcGRhdGUiLCJzdGF0ZSIsImNvdW50V2F0Y2hlclJlZiIsIndhdGNoU2V0dGluZyIsImNvdW50UHJlZmVyZW5jZUNoYW5nZWQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVud2F0Y2hTZXR0aW5nIiwib2ZmIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicmVuZGVyIiwic2hvd1Vuc2VudFRvb2x0aXAiLCJoaWRlSWZEb3QiLCJvbkNsaWNrIiwidGFiSW5kZXgiLCJpc0lkbGUiLCJrbm9ja2VkIiwibGV2ZWwiLCJOb3RpZmljYXRpb25MZXZlbCIsIk5vdGlmaWNhdGlvbiIsImNvbW1vblByb3BzIiwic3ltYm9sIiwiY291bnQiLCJiYWRnZSIsImNyZWF0ZUVsZW1lbnQiLCJTdGF0ZWxlc3NOb3RpZmljYXRpb25CYWRnZSIsIl9leHRlbmRzMiIsIlVuc2VudCIsIlRvb2x0aXAiLCJsYWJlbCIsIl90IiwicGxhY2VtZW50IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL05vdGlmaWNhdGlvbkJhZGdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtd2ViXCI7XG5cbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5pbXBvcnQgeyBYT1IgfSBmcm9tIFwiLi4vLi4vLi4vQHR5cGVzL2NvbW1vblwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU3RhdGUsIE5vdGlmaWNhdGlvblN0YXRlRXZlbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvblN0YXRlXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkxldmVsIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkxldmVsXCI7XG5pbXBvcnQgeyBTdGF0ZWxlc3NOb3RpZmljYXRpb25CYWRnZSB9IGZyb20gXCIuL05vdGlmaWNhdGlvbkJhZGdlL1N0YXRlbGVzc05vdGlmaWNhdGlvbkJhZGdlXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCBzaG93IG5vdGhpbmcgaWYgdGhlIG5vdGlmaWNhdGlvbiB3b3VsZCBvbmx5IGNhdXNlIGEgZG90IHRvIGJlIHNob3duIHJhdGhlciB0aGFuXG4gICAgICogYSBiYWRnZS4gVGhhdCBpczogb25seSBkaXNwbGF5IGJhZGdlcyBhbmQgbm90IGRvdHMuIERlZmF1bHQ6IGZhbHNlLlxuICAgICAqL1xuICAgIGhpZGVJZkRvdD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm9vbSBJRCwgaWYgYW55LCB0aGUgYmFkZ2UgcmVwcmVzZW50cy5cbiAgICAgKi9cbiAgICByb29tSWQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJQ2xpY2thYmxlUHJvcHMgZXh0ZW5kcyBJUHJvcHMsIFJlYWN0LklucHV0SFRNTEF0dHJpYnV0ZXM8RWxlbWVudD4ge1xuICAgIHNob3dVbnNlbnRUb29sdGlwPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBJZiBzcGVjaWZpZWQgd2lsbCByZXR1cm4gYW4gQWNjZXNzaWJsZUJ1dHRvbiBpbnN0ZWFkIG9mIGEgZGl2LlxuICAgICAqL1xuICAgIG9uQ2xpY2soZXY6IFJlYWN0Lk1vdXNlRXZlbnQpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBzaG93Q291bnRzOiBib29sZWFuOyAvLyB3aGV0aGVyIHRvIHNob3cgY291bnRzLlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb3RpZmljYXRpb25CYWRnZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8WE9SPElQcm9wcywgSUNsaWNrYWJsZVByb3BzPiwgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSBjb3VudFdhdGNoZXJSZWY6IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5wcm9wcy5ub3RpZmljYXRpb24ub24oTm90aWZpY2F0aW9uU3RhdGVFdmVudHMuVXBkYXRlLCB0aGlzLm9uTm90aWZpY2F0aW9uVXBkYXRlKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2hvd0NvdW50czogU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcIk5vdGlmaWNhdGlvbnMuYWx3YXlzU2hvd0JhZGdlQ291bnRzXCIsIHRoaXMucm9vbUlkKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNvdW50V2F0Y2hlclJlZiA9IFNldHRpbmdzU3RvcmUud2F0Y2hTZXR0aW5nKFxuICAgICAgICAgICAgXCJOb3RpZmljYXRpb25zLmFsd2F5c1Nob3dCYWRnZUNvdW50c1wiLFxuICAgICAgICAgICAgdGhpcy5yb29tSWQsXG4gICAgICAgICAgICB0aGlzLmNvdW50UHJlZmVyZW5jZUNoYW5nZWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcm9vbUlkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBXZSBzaG91bGQgY29udmVydCB0aGlzIHRvIG51bGwgZm9yIHNhZmV0eSB3aXRoIHRoZSBTZXR0aW5nc1N0b3JlXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnJvb21JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICAgICAgU2V0dGluZ3NTdG9yZS51bndhdGNoU2V0dGluZyh0aGlzLmNvdW50V2F0Y2hlclJlZik7XG4gICAgICAgIHRoaXMucHJvcHMubm90aWZpY2F0aW9uLm9mZihOb3RpZmljYXRpb25TdGF0ZUV2ZW50cy5VcGRhdGUsIHRoaXMub25Ob3RpZmljYXRpb25VcGRhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBSZWFkb25seTxJUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMubm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICBwcmV2UHJvcHMubm90aWZpY2F0aW9uLm9mZihOb3RpZmljYXRpb25TdGF0ZUV2ZW50cy5VcGRhdGUsIHRoaXMub25Ob3RpZmljYXRpb25VcGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5ub3RpZmljYXRpb24ub24oTm90aWZpY2F0aW9uU3RhdGVFdmVudHMuVXBkYXRlLCB0aGlzLm9uTm90aWZpY2F0aW9uVXBkYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvdW50UHJlZmVyZW5jZUNoYW5nZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaG93Q291bnRzOiBTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiTm90aWZpY2F0aW9ucy5hbHdheXNTaG93QmFkZ2VDb3VudHNcIiwgdGhpcy5yb29tSWQpIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uTm90aWZpY2F0aW9uVXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7IC8vIG5vdGlmaWNhdGlvbiBzdGF0ZSBjaGFuZ2VkIC0gdXBkYXRlXG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3ROb2RlIHtcbiAgICAgICAgLyogZXNsaW50IEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwgeyBcImlnbm9yZVJlc3RTaWJsaW5nc1wiOiB0cnVlIH1dICovXG4gICAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9uLCBzaG93VW5zZW50VG9vbHRpcCwgaGlkZUlmRG90LCBvbkNsaWNrLCB0YWJJbmRleCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAobm90aWZpY2F0aW9uLmlzSWRsZSAmJiAhbm90aWZpY2F0aW9uLmtub2NrZWQpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaGlkZUlmRG90ICYmIG5vdGlmaWNhdGlvbi5sZXZlbCA8IE5vdGlmaWNhdGlvbkxldmVsLk5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgLy8gVGhpcyB3b3VsZCBqdXN0IGJlIGEgZG90IGFuZCB3ZSd2ZSBiZWVuIHRvbGQgbm90IHRvIHNob3cgZG90cywgc28gZG9uJ3Qgc2hvdyBpdFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21tb25Qcm9wczogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFN0YXRlbGVzc05vdGlmaWNhdGlvbkJhZGdlPiA9IHtcbiAgICAgICAgICAgIHN5bWJvbDogbm90aWZpY2F0aW9uLnN5bWJvbCxcbiAgICAgICAgICAgIGNvdW50OiBub3RpZmljYXRpb24uY291bnQsXG4gICAgICAgICAgICBsZXZlbDogbm90aWZpY2F0aW9uLmxldmVsLFxuICAgICAgICAgICAga25vY2tlZDogbm90aWZpY2F0aW9uLmtub2NrZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGJhZGdlOiBKU1guRWxlbWVudDtcbiAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICAgIGJhZGdlID0gPFN0YXRlbGVzc05vdGlmaWNhdGlvbkJhZGdlIHsuLi5jb21tb25Qcm9wc30gb25DbGljaz17b25DbGlja30gdGFiSW5kZXg9e3RhYkluZGV4fSAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhZGdlID0gPFN0YXRlbGVzc05vdGlmaWNhdGlvbkJhZGdlIHsuLi5jb21tb25Qcm9wc30gLz47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvd1Vuc2VudFRvb2x0aXAgJiYgbm90aWZpY2F0aW9uLmxldmVsID09PSBOb3RpZmljYXRpb25MZXZlbC5VbnNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgbGFiZWw9e190KFwibm90aWZpY2F0aW9uc3xtZXNzYWdlX2RpZG50X3NlbmRcIil9IHBsYWNlbWVudD1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIHtiYWRnZX1cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhZGdlO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsa0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxrQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sMkJBQUEsR0FBQU4sT0FBQTtBQWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUF1Q2UsTUFBTU8saUJBQWlCLFNBQVNDLGNBQUssQ0FBQ0MsYUFBYSxDQUF1QztFQUc5RkMsV0FBV0EsQ0FBQ0MsS0FBYSxFQUFFO0lBQzlCLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0lBQUMsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEsa0NBZ0NnQixNQUFZO01BQ3pDLElBQUksQ0FBQ0MsUUFBUSxDQUFDO1FBQUVDLFVBQVUsRUFBRUMsc0JBQWEsQ0FBQ0MsUUFBUSxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQ0MsTUFBTTtNQUFFLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBQUEsSUFBQU4sZ0JBQUEsQ0FBQUMsT0FBQSxnQ0FFOEIsTUFBWTtNQUN2QyxJQUFJLENBQUNNLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBckNHLElBQUksQ0FBQ1IsS0FBSyxDQUFDUyxZQUFZLENBQUNDLEVBQUUsQ0FBQ0MsMENBQXVCLENBQUNDLE1BQU0sRUFBRSxJQUFJLENBQUNDLG9CQUFvQixDQUFDO0lBRXJGLElBQUksQ0FBQ0MsS0FBSyxHQUFHO01BQ1RWLFVBQVUsRUFBRUMsc0JBQWEsQ0FBQ0MsUUFBUSxD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