matrix-react-sdk
Version:
SDK for matrix.org using React
121 lines (94 loc) • 13.2 kB
JavaScript
"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=