UNPKG

matrix-react-sdk

Version:
101 lines (97 loc) 15.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _languageHandler = require("../../languageHandler"); 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 2022 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. */ const FileDropTarget = ({ parent, onFileDrop }) => { const [state, setState] = (0, _react.useState)({ dragging: false, counter: 0 }); (0, _react.useEffect)(() => { if (!parent || parent.ondrop) return; const onDragEnter = ev => { ev.stopPropagation(); ev.preventDefault(); if (!ev.dataTransfer) return; setState(state => ({ // We always increment the counter no matter the types, because dragging is // still happening. If we didn't, the drag counter would get out of sync. counter: state.counter + 1, // See: // https://docs.w3cub.com/dom/datatransfer/types // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file dragging: ev.dataTransfer.types.includes("Files") || ev.dataTransfer.types.includes("application/x-moz-file") ? true : state.dragging })); }; const onDragLeave = ev => { ev.stopPropagation(); ev.preventDefault(); setState(state => ({ counter: state.counter - 1, dragging: state.counter <= 1 ? false : state.dragging })); }; const onDragOver = ev => { ev.stopPropagation(); ev.preventDefault(); if (!ev.dataTransfer) return; ev.dataTransfer.dropEffect = "none"; // See: // https://docs.w3cub.com/dom/datatransfer/types // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file if (ev.dataTransfer.types.includes("Files") || ev.dataTransfer.types.includes("application/x-moz-file")) { ev.dataTransfer.dropEffect = "copy"; } }; const onDrop = ev => { ev.stopPropagation(); ev.preventDefault(); if (!ev.dataTransfer) return; onFileDrop(ev.dataTransfer); setState(state => ({ dragging: false, counter: state.counter - 1 })); }; parent?.addEventListener("drop", onDrop); parent?.addEventListener("dragover", onDragOver); parent?.addEventListener("dragenter", onDragEnter); parent?.addEventListener("dragleave", onDragLeave); return () => { // disconnect the D&D event listeners from the room view. This // is really just for hygiene - we're going to be // deleted anyway, so it doesn't matter if the event listeners // don't get cleaned up. parent?.removeEventListener("drop", onDrop); parent?.removeEventListener("dragover", onDragOver); parent?.removeEventListener("dragenter", onDragEnter); parent?.removeEventListener("dragleave", onDragLeave); }; }, [parent, onFileDrop]); if (state.dragging) { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_FileDropTarget" }, /*#__PURE__*/_react.default.createElement("img", { src: require("../../../res/img/upload-big.svg").default, className: "mx_FileDropTarget_image", alt: "" }), (0, _languageHandler._t)("room|drop_file_prompt")); } return null; }; var _default = exports.default = FileDropTarget; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiRmlsZURyb3BUYXJnZXQiLCJwYXJlbnQiLCJvbkZpbGVEcm9wIiwic3RhdGUiLCJzZXRTdGF0ZSIsInVzZVN0YXRlIiwiZHJhZ2dpbmciLCJjb3VudGVyIiwidXNlRWZmZWN0Iiwib25kcm9wIiwib25EcmFnRW50ZXIiLCJldiIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiZGF0YVRyYW5zZmVyIiwidHlwZXMiLCJpbmNsdWRlcyIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsImRyb3BFZmZlY3QiLCJvbkRyb3AiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzcmMiLCJhbHQiLCJfdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvRmlsZURyb3BUYXJnZXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBvbkZpbGVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgZHJhZ2dpbmc6IGJvb2xlYW47XG4gICAgY291bnRlcjogbnVtYmVyO1xufVxuXG5jb25zdCBGaWxlRHJvcFRhcmdldDogUmVhY3QuRkM8SVByb3BzPiA9ICh7IHBhcmVudCwgb25GaWxlRHJvcCB9KSA9PiB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxJU3RhdGU+KHtcbiAgICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm9uZHJvcCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9uRHJhZ0VudGVyID0gKGV2OiBEcmFnRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YVRyYW5zZmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbHdheXMgaW5jcmVtZW50IHRoZSBjb3VudGVyIG5vIG1hdHRlciB0aGUgdHlwZXMsIGJlY2F1c2UgZHJhZ2dpbmcgaXNcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBoYXBwZW5pbmcuIElmIHdlIGRpZG4ndCwgdGhlIGRyYWcgY291bnRlciB3b3VsZCBnZXQgb3V0IG9mIHN5bmMuXG4gICAgICAgICAgICAgICAgY291bnRlcjogc3RhdGUuY291bnRlciArIDEsXG4gICAgICAgICAgICAgICAgLy8gU2VlOlxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy53M2N1Yi5jb20vZG9tL2RhdGF0cmFuc2Zlci90eXBlc1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL1JlY29tbWVuZGVkX2RyYWdfdHlwZXMjZmlsZVxuICAgICAgICAgICAgICAgIGRyYWdnaW5nOlxuICAgICAgICAgICAgICAgICAgICBldi5kYXRhVHJhbnNmZXIhLnR5cGVzLmluY2x1ZGVzKFwiRmlsZXNcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgZXYuZGF0YVRyYW5zZmVyIS50eXBlcy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3gtbW96LWZpbGVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS5kcmFnZ2luZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbkRyYWdMZWF2ZSA9IChldjogRHJhZ0V2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBjb3VudGVyOiBzdGF0ZS5jb3VudGVyIC0gMSxcbiAgICAgICAgICAgICAgICBkcmFnZ2luZzogc3RhdGUuY291bnRlciA8PSAxID8gZmFsc2UgOiBzdGF0ZS5kcmFnZ2luZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbkRyYWdPdmVyID0gKGV2OiBEcmFnRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YVRyYW5zZmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJub25lXCI7XG5cbiAgICAgICAgICAgIC8vIFNlZTpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy53M2N1Yi5jb20vZG9tL2RhdGF0cmFuc2Zlci90eXBlc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxfRHJhZ19hbmRfRHJvcF9BUEkvUmVjb21tZW5kZWRfZHJhZ190eXBlcyNmaWxlXG4gICAgICAgICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKFwiRmlsZXNcIikgfHwgZXYuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKFwiYXBwbGljYXRpb24veC1tb3otZmlsZVwiKSkge1xuICAgICAgICAgICAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJjb3B5XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb25Ecm9wID0gKGV2OiBEcmFnRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YVRyYW5zZmVyKSByZXR1cm47XG4gICAgICAgICAgICBvbkZpbGVEcm9wKGV2LmRhdGFUcmFuc2Zlcik7XG5cbiAgICAgICAgICAgIHNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgY291bnRlcjogc3RhdGUuY291bnRlciAtIDEsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcGFyZW50Py5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCBvbkRyb3ApO1xuICAgICAgICBwYXJlbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCBvbkRyYWdPdmVyKTtcbiAgICAgICAgcGFyZW50Py5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ2VudGVyXCIsIG9uRHJhZ0VudGVyKTtcbiAgICAgICAgcGFyZW50Py5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ2xlYXZlXCIsIG9uRHJhZ0xlYXZlKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgLy8gZGlzY29ubmVjdCB0aGUgRCZEIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSByb29tIHZpZXcuIFRoaXNcbiAgICAgICAgICAgIC8vIGlzIHJlYWxseSBqdXN0IGZvciBoeWdpZW5lIC0gd2UncmUgZ29pbmcgdG8gYmVcbiAgICAgICAgICAgIC8vIGRlbGV0ZWQgYW55d2F5LCBzbyBpdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAgICAvLyBkb24ndCBnZXQgY2xlYW5lZCB1cC5cbiAgICAgICAgICAgIHBhcmVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgb25Ecm9wKTtcbiAgICAgICAgICAgIHBhcmVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsIG9uRHJhZ092ZXIpO1xuICAgICAgICAgICAgcGFyZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKFwiZHJhZ2VudGVyXCIsIG9uRHJhZ0VudGVyKTtcbiAgICAgICAgICAgIHBhcmVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRyYWdsZWF2ZVwiLCBvbkRyYWdMZWF2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW3BhcmVudCwgb25GaWxlRHJvcF0pO1xuXG4gICAgaWYgKHN0YXRlLmRyYWdnaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0ZpbGVEcm9wVGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e3JlcXVpcmUoXCIuLi8uLi8uLi9yZXMvaW1nL3VwbG9hZC1iaWcuc3ZnXCIpLmRlZmF1bHR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0ZpbGVEcm9wVGFyZ2V0X2ltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtfdChcInJvb218ZHJvcF9maWxlX3Byb21wdFwiKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsZURyb3BUYXJnZXQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFBMkMsU0FBQUUseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUosd0JBQUFJLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxD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