UNPKG

matrix-react-sdk

Version:
121 lines (94 loc) 13.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _BaseCard = _interopRequireDefault(require("./BaseCard")); var _WidgetUtils = _interopRequireDefault(require("../../../utils/WidgetUtils")); var _AppTile = _interopRequireDefault(require("../elements/AppTile")); var _languageHandler = require("../../../languageHandler"); var _RoomSummaryCard = require("./RoomSummaryCard"); var _RightPanelStorePhases = require("../../../stores/RightPanelStorePhases"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _ContextMenu = require("../../structures/ContextMenu"); var _WidgetContextMenu = _interopRequireDefault(require("../context_menus/WidgetContextMenu")); var _WidgetLayoutStore = require("../../../stores/widgets/WidgetLayoutStore"); /* Copyright 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ const WidgetCard /*: React.FC<IProps>*/ = ({ room, widgetId, onClose }) => { const cli = (0, _react.useContext)(_MatrixClientContext.default); const apps = (0, _RoomSummaryCard.useWidgets)(room); const app = apps.find(a => a.id === widgetId); const isPinned = app && _WidgetLayoutStore.WidgetLayoutStore.instance.isInContainer(room, app, _WidgetLayoutStore.Container.Top); const [menuDisplayed, handle, openMenu, closeMenu] = (0, _ContextMenu.useContextMenu)(); (0, _react.useEffect)(() => { if (!app || isPinned) { // stop showing this card _dispatcher.default.dispatch({ action: _actions.Action.SetRightPanelPhase, phase: _RightPanelStorePhases.RightPanelPhases.RoomSummary }); } }, [app, isPinned]); // Don't render anything as we are about to transition if (!app || isPinned) return null; let contextMenu; if (menuDisplayed) { const rect = handle.current.getBoundingClientRect(); contextMenu = /*#__PURE__*/_react.default.createElement(_WidgetContextMenu.default, { chevronFace: _ContextMenu.ChevronFace.None, right: window.innerWidth - rect.right - 12, top: rect.bottom + 12, onFinished: closeMenu, app: app }); } const header = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h2", null, _WidgetUtils.default.getWidgetName(app)), /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuButton, { kind: "secondary", className: "mx_WidgetCard_optionsButton", inputRef: handle, onClick: openMenu, isExpanded: menuDisplayed, label: (0, _languageHandler._t)("Options") }), contextMenu); return /*#__PURE__*/_react.default.createElement(_BaseCard.default, { header: header, className: "mx_WidgetCard", onClose: onClose, previousPhase: _RightPanelStorePhases.RightPanelPhases.RoomSummary, withoutScrollContainer: true }, /*#__PURE__*/_react.default.createElement(_AppTile.default, { app: app, fullWidth: true, show: true, showMenubar: false, room: room, userId: cli.getUserId(), creatorUserId: app.creatorUserId, widgetPageTitle: _WidgetUtils.default.getWidgetDataTitle(app), waitForIframeLoad: app.waitForIframeLoad })); }; var _default = WidgetCard; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3JpZ2h0X3BhbmVsL1dpZGdldENhcmQudHN4Il0sIm5hbWVzIjpbIldpZGdldENhcmQiLCJyb29tIiwid2lkZ2V0SWQiLCJvbkNsb3NlIiwiY2xpIiwiTWF0cml4Q2xpZW50Q29udGV4dCIsImFwcHMiLCJhcHAiLCJmaW5kIiwiYSIsImlkIiwiaXNQaW5uZWQiLCJXaWRnZXRMYXlvdXRTdG9yZSIsImluc3RhbmNlIiwiaXNJbkNvbnRhaW5lciIsIkNvbnRhaW5lciIsIlRvcCIsIm1lbnVEaXNwbGF5ZWQiLCJoYW5kbGUiLCJvcGVuTWVudSIsImNsb3NlTWVudSIsImRlZmF1bHREaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJBY3Rpb24iLCJTZXRSaWdodFBhbmVsUGhhc2UiLCJwaGFzZSIsIlJpZ2h0UGFuZWxQaGFzZXMiLCJSb29tU3VtbWFyeSIsImNvbnRleHRNZW51IiwicmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJDaGV2cm9uRmFjZSIsIk5vbmUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwicmlnaHQiLCJib3R0b20iLCJoZWFkZXIiLCJXaWRnZXRVdGlscyIsImdldFdpZGdldE5hbWUiLCJnZXRVc2VySWQiLCJjcmVhdG9yVXNlcklkIiwiZ2V0V2lkZ2V0RGF0YVRpdGxlIiwid2FpdEZvcklmcmFtZUxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQS9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF5QkEsTUFBTUE7QUFBNEI7QUFBQSxFQUFHLENBQUM7QUFBRUMsRUFBQUEsSUFBRjtBQUFRQyxFQUFBQSxRQUFSO0FB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QXBFRDs7ZUFzRWU3QyxVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tb2RlbHMvcm9vbVwiO1xuXG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IEJhc2VDYXJkIGZyb20gXCIuL0Jhc2VDYXJkXCI7XG5pbXBvcnQgV2lkZ2V0VXRpbHMgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL1dpZGdldFV0aWxzXCI7XG5pbXBvcnQgQXBwVGlsZSBmcm9tIFwiLi4vZWxlbWVudHMvQXBwVGlsZVwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyB1c2VXaWRnZXRzIH0gZnJvbSBcIi4vUm9vbVN1bW1hcnlDYXJkXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsUGhhc2VzIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9SaWdodFBhbmVsU3RvcmVQaGFzZXNcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBTZXRSaWdodFBhbmVsUGhhc2VQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvU2V0UmlnaHRQYW5lbFBoYXNlUGF5bG9hZFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ2hldnJvbkZhY2UsIENvbnRleHRNZW51QnV0dG9uLCB1c2VDb250ZXh0TWVudSB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0NvbnRleHRNZW51XCI7XG5pbXBvcnQgV2lkZ2V0Q29udGV4dE1lbnUgZnJvbSBcIi4uL2NvbnRleHRfbWVudXMvV2lkZ2V0Q29udGV4dE1lbnVcIjtcbmltcG9ydCB7IENvbnRhaW5lciwgV2lkZ2V0TGF5b3V0U3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3dpZGdldHMvV2lkZ2V0TGF5b3V0U3RvcmVcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgcm9vbTogUm9vbTtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIG9uQ2xvc2UoKTogdm9pZDtcbn1cblxuY29uc3QgV2lkZ2V0Q2FyZDogUmVhY3QuRkM8SVByb3BzPiA9ICh7IHJvb20sIHdpZGdldElkLCBvbkNsb3NlIH0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuXG4gICAgY29uc3QgYXBwcyA9IHVzZVdpZGdldHMocm9vbSk7XG4gICAgY29uc3QgYXBwID0gYXBwcy5maW5kKGEgPT4gYS5pZCA9PT0gd2lkZ2V0SWQpO1xuICAgIGNvbnN0IGlzUGlubmVkID0gYXBwICYmIFdpZGdldExheW91dFN0b3JlLmluc3RhbmNlLmlzSW5Db250YWluZXIocm9vbSwgYXBwLCBDb250YWluZXIuVG9wKTtcblxuICAgIGNvbnN0IFttZW51RGlzcGxheWVkLCBoYW5kbGUsIG9wZW5NZW51LCBjbG9zZU1lbnVdID0gdXNlQ29udGV4dE1lbnUoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghYXBwIHx8IGlzUGlubmVkKSB7XG4gICAgICAgICAgICAvLyBzdG9wIHNob3dpbmcgdGhpcyBjYXJkXG4gICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxTZXRSaWdodFBhbmVsUGhhc2VQYXlsb2FkPih7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uU2V0UmlnaHRQYW5lbFBoYXNlLFxuICAgICAgICAgICAgICAgIHBoYXNlOiBSaWdodFBhbmVsUGhhc2VzLlJvb21TdW1tYXJ5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbYXBwLCBpc1Bpbm5lZF0pO1xuXG4gICAgLy8gRG9uJ3QgcmVuZGVyIGFueXRoaW5nIGFzIHdlIGFyZSBhYm91dCB0byB0cmFuc2l0aW9uXG4gICAgaWYgKCFhcHAgfHwgaXNQaW5uZWQpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGNvbnRleHRNZW51O1xuICAgIGlmIChtZW51RGlzcGxheWVkKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBoYW5kbGUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29udGV4dE1lbnUgPSAoXG4gICAgICAgICAgICA8V2lkZ2V0Q29udGV4dE1lbnVcbiAgICAgICAgICAgICAgICBjaGV2cm9uRmFjZT17Q2hldnJvbkZhY2UuTm9uZX1cbiAgICAgICAgICAgICAgICByaWdodD17d2luZG93LmlubmVyV2lkdGggLSByZWN0LnJpZ2h0IC0gMTJ9XG4gICAgICAgICAgICAgICAgdG9wPXtyZWN0LmJvdHRvbSArIDEyfVxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e2Nsb3NlTWVudX1cbiAgICAgICAgICAgICAgICBhcHA9e2FwcH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8aDI+eyBXaWRnZXRVdGlscy5nZXRXaWRnZXROYW1lKGFwcCkgfTwvaDI+XG4gICAgICAgIDxDb250ZXh0TWVudUJ1dHRvblxuICAgICAgICAgICAga2luZD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJteF9XaWRnZXRDYXJkX29wdGlvbnNCdXR0b25cIlxuICAgICAgICAgICAgaW5wdXRSZWY9e2hhbmRsZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29wZW5NZW51fVxuICAgICAgICAgICAgaXNFeHBhbmRlZD17bWVudURpc3BsYXllZH1cbiAgICAgICAgICAgIGxhYmVsPXtfdChcIk9wdGlvbnNcIil9XG4gICAgICAgIC8+XG4gICAgICAgIHsgY29udGV4dE1lbnUgfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+O1xuXG4gICAgcmV0dXJuIDxCYXNlQ2FyZFxuICAgICAgICBoZWFkZXI9e2hlYWRlcn1cbiAgICAgICAgY2xhc3NOYW1lPVwibXhfV2lkZ2V0Q2FyZFwiXG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIHByZXZpb3VzUGhhc2U9e1JpZ2h0UGFuZWxQaGFzZXMuUm9vbVN1bW1hcnl9XG4gICAgICAgIHdpdGhvdXRTY3JvbGxDb250YWluZXJcbiAgICA+XG4gICAgICAgIDxBcHBUaWxlXG4gICAgICAgICAgICBhcHA9e2FwcH1cbiAgICAgICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICAgICAgc2hvd1xuICAgICAgICAgICAgc2hvd01lbnViYXI9e2ZhbHNlfVxuICAgICAgICAgICAgcm9vbT17cm9vbX1cbiAgICAgICAgICAgIHVzZXJJZD17Y2xpLmdldFVzZXJJZCgpfVxuICAgICAgICAgICAgY3JlYXRvclVzZXJJZD17YXBwLmNyZWF0b3JVc2VySWR9XG4gICAgICAgICAgICB3aWRnZXRQYWdlVGl0bGU9e1dpZGdldFV0aWxzLmdldFdpZGdldERhdGFUaXRsZShhcHApfVxuICAgICAgICAgICAgd2FpdEZvcklmcmFtZUxvYWQ9e2FwcC53YWl0Rm9ySWZyYW1lTG9hZH1cbiAgICAgICAgLz5cbiAgICA8L0Jhc2VDYXJkPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdpZGdldENhcmQ7XG4iXX0=