UNPKG

matrix-react-sdk

Version:
99 lines (91 loc) 17.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PowerLevelSelector = PowerLevelSelector; var _react = _interopRequireWildcard(require("react")); var _compoundWeb = require("@vector-im/compound-web"); var _MatrixClientContext = require("../../../contexts/MatrixClientContext"); var _PowerSelector = _interopRequireDefault(require("../elements/PowerSelector")); var _languageHandler = require("../../../languageHandler"); var _SettingsFieldset = _interopRequireDefault(require("./SettingsFieldset")); 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. */ /** * Display in a fieldset, the power level of the users and allow to change them. * The apply button is disabled until the power level of an user is changed. * If there is no user to display, the children is displayed instead. */ function PowerLevelSelector({ userLevels, canChangeLevels, currentUserLevel, onClick, filter, title, children }) { const matrixClient = (0, _MatrixClientContext.useMatrixClientContext)(); const [currentPowerLevel, setCurrentPowerLevel] = (0, _react.useState)(null); // If the power level has changed, we need to enable the apply button const powerLevelChanged = Boolean(currentPowerLevel && currentPowerLevel.value !== userLevels[currentPowerLevel?.userId]); const collator = new Intl.Collator(); // We sort the users by power level, then we filter them const users = Object.keys(userLevels).sort((userA, userB) => sortUser(collator, userA, userB, userLevels)).filter(filter); // No user to display, we return the children into fragment to convert it to JSX.Element type if (!users.length) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children); return /*#__PURE__*/_react.default.createElement(_SettingsFieldset.default, { legend: title }, users.map(userId => { // We only want to display users with a valid power level aka an integer if (!Number.isInteger(userLevels[userId])) return; const isMe = userId === matrixClient.getUserId(); // If I can change levels, I can change the level of anyone with a lower level than mine const canChange = canChangeLevels && (userLevels[userId] < currentUserLevel || isMe); // When the new power level is selected, the fields are rerendered and we need to keep the current value const userLevel = currentPowerLevel?.userId === userId ? currentPowerLevel?.value : userLevels[userId]; return /*#__PURE__*/_react.default.createElement(_PowerSelector.default, { value: userLevel, disabled: !canChange, label: userId, key: userId, onChange: value => setCurrentPowerLevel({ value, userId }) }); }), /*#__PURE__*/_react.default.createElement(_compoundWeb.Button, { size: "sm", kind: "primary" // mx_Dialog_nonDialogButton is necessary to avoid the Dialog CSS to override the button style , className: "mx_Dialog_nonDialogButton mx_PowerLevelSelector_Button", onClick: () => { if (currentPowerLevel !== null) { onClick(currentPowerLevel.value, currentPowerLevel.userId); setCurrentPowerLevel(null); } }, disabled: !powerLevelChanged, "aria-label": (0, _languageHandler._t)("action|apply") }, (0, _languageHandler._t)("action|apply"))); } /** * Sort the users by power level, then by name * @param userA * @param userB * @param userLevels */ function sortUser(collator, userA, userB, userLevels) { const powerLevelDiff = userLevels[userA] - userLevels[userB]; return powerLevelDiff !== 0 ? powerLevelDiff : collator.compare(userA.toLocaleLowerCase(), userB.toLocaleLowerCase()); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29tcG91bmRXZWIiLCJfTWF0cml4Q2xpZW50Q29udGV4dCIsIl9Qb3dlclNlbGVjdG9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfU2V0dGluZ3NGaWVsZHNldCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlBvd2VyTGV2ZWxTZWxlY3RvciIsInVzZXJMZXZlbHMiLCJjYW5DaGFuZ2VMZXZlbHMiLCJjdXJyZW50VXNlckxldmVsIiwib25DbGljayIsImZpbHRlciIsInRpdGxlIiwiY2hpbGRyZW4iLCJtYXRyaXhDbGllbnQiLCJ1c2VNYXRyaXhDbGllbnRDb250ZXh0IiwiY3VycmVudFBvd2VyTGV2ZWwiLCJzZXRDdXJyZW50UG93ZXJMZXZlbCIsInVzZVN0YXRlIiwicG93ZXJMZXZlbENoYW5nZWQiLCJCb29sZWFuIiwidmFsdWUiLCJ1c2VySWQiLCJjb2xsYXRvciIsIkludGwiLCJDb2xsYXRvciIsInVzZXJzIiwia2V5cyIsInNvcnQiLCJ1c2VyQSIsInVzZXJCIiwic29ydFVzZXIiLCJsZW5ndGgiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJsZWdlbmQiLCJtYXAiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpc01lIiwiZ2V0VXNlcklkIiwiY2FuQ2hhbmdlIiwidXNlckxldmVsIiwiZGlzYWJsZWQiLCJsYWJlbCIsImtleSIsIm9uQ2hhbmdlIiwiQnV0dG9uIiwic2l6ZSIsImtpbmQiLCJjbGFzc05hbWUiLCJfdCIsInBvd2VyTGV2ZWxEaWZmIiwiY29tcGFyZSIsInRvTG9jYWxlTG93ZXJDYXNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc2V0dGluZ3MvUG93ZXJMZXZlbFNlbGVjdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG4gKiBDb3B5cmlnaHQgMjAyNCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuICogUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIEpTWCwgUHJvcHNXaXRoQ2hpbGRyZW4gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuXG5pbXBvcnQgeyB1c2VNYXRyaXhDbGllbnRDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCBQb3dlclNlbGVjdG9yIGZyb20gXCIuLi9lbGVtZW50cy9Qb3dlclNlbGVjdG9yXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBTZXR0aW5nc0ZpZWxkc2V0IGZyb20gXCIuL1NldHRpbmdzRmllbGRzZXRcIjtcblxuLyoqXG4gKiBEaXNwbGF5IGluIGEgZmllbGRzZXQsIHRoZSBwb3dlciBsZXZlbCBvZiB0aGUgdXNlcnMgYW5kIGFsbG93IHRvIGNoYW5nZSB0aGVtLlxuICogVGhlIGFwcGx5IGJ1dHRvbiBpcyBkaXNhYmxlZCB1bnRpbCB0aGUgcG93ZXIgbGV2ZWwgb2YgYW4gdXNlciBpcyBjaGFuZ2VkLlxuICogSWYgdGhlcmUgaXMgbm8gdXNlciB0byBkaXNwbGF5LCB0aGUgY2hpbGRyZW4gaXMgZGlzcGxheWVkIGluc3RlYWQuXG4gKi9cbmludGVyZmFjZSBQb3dlckxldmVsU2VsZWN0b3JQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvd2VyIGxldmVscyBvZiB0aGUgdXNlcnNcbiAgICAgKiBUaGUga2V5IGlzIHRoZSB1c2VyIGlkIGFuZCB0aGUgdmFsdWUgaXMgdGhlIHBvd2VyIGxldmVsXG4gICAgICovXG4gICAgdXNlckxldmVsczogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB1c2VyIGNhbiBjaGFuZ2UgdGhlIHBvd2VyIGxldmVscyBvZiBvdGhlciB1c2Vyc1xuICAgICAqL1xuICAgIGNhbkNoYW5nZUxldmVsczogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB1c2VyIHBvd2VyIGxldmVsXG4gICAgICovXG4gICAgY3VycmVudFVzZXJMZXZlbDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBjYWxsYmFjayB3aGVuIHRoZSBhcHBseSBidXR0b24gaXMgY2xpY2tlZFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIG5ldyBwb3dlciBsZXZlbCBmb3IgdGhlIHVzZXJcbiAgICAgKiBAcGFyYW0gdXNlcklkIC0gdGhlIHVzZXIgaWRcbiAgICAgKi9cbiAgICBvbkNsaWNrOiAodmFsdWU6IG51bWJlciwgdXNlcklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRoZSB1c2VycyB0byBkaXNwbGF5XG4gICAgICogQHBhcmFtIHVzZXJcbiAgICAgKi9cbiAgICBmaWx0ZXI6ICh1c2VyOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBmaWVsZHNldFxuICAgICAqL1xuICAgIHRpdGxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQb3dlckxldmVsU2VsZWN0b3Ioe1xuICAgIHVzZXJMZXZlbHMsXG4gICAgY2FuQ2hhbmdlTGV2ZWxzLFxuICAgIGN1cnJlbnRVc2VyTGV2ZWwsXG4gICAgb25DbGljayxcbiAgICBmaWx0ZXIsXG4gICAgdGl0bGUsXG4gICAgY2hpbGRyZW4sXG59OiBQcm9wc1dpdGhDaGlsZHJlbjxQb3dlckxldmVsU2VsZWN0b3JQcm9wcz4pOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IG1hdHJpeENsaWVudCA9IHVzZU1hdHJpeENsaWVudENvbnRleHQoKTtcbiAgICBjb25zdCBbY3VycmVudFBvd2VyTGV2ZWwsIHNldEN1cnJlbnRQb3dlckxldmVsXSA9IHVzZVN0YXRlPHsgdmFsdWU6IG51bWJlcjsgdXNlcklkOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuXG4gICAgLy8gSWYgdGhlIHBvd2VyIGxldmVsIGhhcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXBwbHkgYnV0dG9uXG4gICAgY29uc3QgcG93ZXJMZXZlbENoYW5nZWQgPSBCb29sZWFuKFxuICAgICAgICBjdXJyZW50UG93ZXJMZXZlbCAmJiBjdXJyZW50UG93ZXJMZXZlbC52YWx1ZSAhPT0gdXNlckxldmVsc1tjdXJyZW50UG93ZXJMZXZlbD8udXNlcklkXSxcbiAgICApO1xuXG4gICAgY29uc3QgY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcigpO1xuXG4gICAgLy8gV2Ugc29ydCB0aGUgdXNlcnMgYnkgcG93ZXIgbGV2ZWwsIHRoZW4gd2UgZmlsdGVyIHRoZW1cbiAgICBjb25zdCB1c2VycyA9IE9iamVjdC5rZXlzKHVzZXJMZXZlbHMpXG4gICAgICAgIC5zb3J0KCh1c2VyQSwgdXNlckIpID0+IHNvcnRVc2VyKGNvbGxhdG9yLCB1c2VyQSwgdXNlckIsIHVzZXJMZXZlbHMpKVxuICAgICAgICAuZmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBObyB1c2VyIHRvIGRpc3BsYXksIHdlIHJldHVybiB0aGUgY2hpbGRyZW4gaW50byBmcmFnbWVudCB0byBjb252ZXJ0IGl0IHRvIEpTWC5FbGVtZW50IHR5cGVcbiAgICBpZiAoIXVzZXJzLmxlbmd0aCkgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxTZXR0aW5nc0ZpZWxkc2V0IGxlZ2VuZD17dGl0bGV9PlxuICAgICAgICAgICAge3VzZXJzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRpc3BsYXkgdXNlcnMgd2l0aCBhIHZhbGlkIHBvd2VyIGxldmVsIGFrYSBhbiBpbnRlZ2VyXG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHVzZXJMZXZlbHNbdXNlcklkXSkpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzTWUgPSB1c2VySWQgPT09IG1hdHJpeENsaWVudC5nZXRVc2VySWQoKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBJIGNhbiBjaGFuZ2UgbGV2ZWxzLCBJIGNhbiBjaGFuZ2UgdGhlIGxldmVsIG9mIGFueW9uZSB3aXRoIGEgbG93ZXIgbGV2ZWwgdGhhbiBtaW5lXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuQ2hhbmdlID0gY2FuQ2hhbmdlTGV2ZWxzICYmICh1c2VyTGV2ZWxzW3VzZXJJZF0gPCBjdXJyZW50VXNlckxldmVsIHx8IGlzTWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbmV3IHBvd2VyIGxldmVsIGlzIHNlbGVjdGVkLCB0aGUgZmllbGRzIGFyZSByZXJlbmRlcmVkIGFuZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyTGV2ZWwgPSBjdXJyZW50UG93ZXJMZXZlbD8udXNlcklkID09PSB1c2VySWQgPyBjdXJyZW50UG93ZXJMZXZlbD8udmFsdWUgOiB1c2VyTGV2ZWxzW3VzZXJJZF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8UG93ZXJTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3VzZXJMZXZlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3VzZXJJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gc2V0Q3VycmVudFBvd2VyTGV2ZWwoeyB2YWx1ZSwgdXNlcklkIH0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAga2luZD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIC8vIG14X0RpYWxvZ19ub25EaWFsb2dCdXR0b24gaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIHRoZSBEaWFsb2cgQ1NTIHRvIG92ZXJyaWRlIHRoZSBidXR0b24gc3R5bGVcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9EaWFsb2dfbm9uRGlhbG9nQnV0dG9uIG14X1Bvd2VyTGV2ZWxTZWxlY3Rvcl9CdXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3dlckxldmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrKGN1cnJlbnRQb3dlckxldmVsLnZhbHVlLCBjdXJyZW50UG93ZXJMZXZlbC51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBvd2VyTGV2ZWwobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshcG93ZXJMZXZlbENoYW5nZWR9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17X3QoXCJhY3Rpb258YXBwbHlcIil9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGFwcGx5XCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvU2V0dGluZ3NGaWVsZHNldD5cbiAgICApO1xufVxuXG4vKipcbiAqIFNvcnQgdGhlIHVzZXJzIGJ5IHBvd2VyIGxldmVsLCB0aGVuIGJ5IG5hbWVcbiAqIEBwYXJhbSB1c2VyQVxuICogQHBhcmFtIHVzZXJCXG4gKiBAcGFyYW0gdXNlckxldmVsc1xuICovXG5mdW5jdGlvbiBzb3J0VXNlcihcbiAgICBjb2xsYXRvcjogSW50bC5Db2xsYXRvcixcbiAgICB1c2VyQTogc3RyaW5nLFxuICAgIHVzZXJCOiBzdHJpbmcsXG4gICAgdXNlckxldmVsczogUG93ZXJMZXZlbFNlbGVjdG9yUHJvcHNbXCJ1c2VyTGV2ZWxzXCJdLFxuKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlckxldmVsRGlmZiA9IHVzZXJMZXZlbHNbdXNlckFdIC0gdXNlckxldmVsc1t1c2VyQl07XG4gICAgcmV0dXJuIHBvd2VyTGV2ZWxEaWZmICE9PSAwXG4gICAgICAgID8gcG93ZXJMZXZlbERpZmZcbiAgICAgICAgOiBjb2xsYXRvci5jb21wYXJlKHVzZXJBLnRvTG9jYWxlTG93ZXJDYXNlKCksIHVzZXJCLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsb0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGdCQUFB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