matrix-react-sdk
Version:
SDK for matrix.org using React
101 lines (97 loc) • 15.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _ContentMessages = _interopRequireDefault(require("../../ContentMessages"));
var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher"));
var _languageHandler = require("../../languageHandler");
var _actions = require("../../dispatcher/actions");
var _ProgressBar = _interopRequireDefault(require("../views/elements/ProgressBar"));
var _AccessibleButton = _interopRequireDefault(require("../views/elements/AccessibleButton"));
var _FileUtils = require("../../utils/FileUtils");
/*
Copyright 2024 New Vector Ltd.
Copyright 2015, 2016 , 2019, 2021 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.
*/
function isUploadPayload(payload) {
return [_actions.Action.UploadStarted, _actions.Action.UploadProgress, _actions.Action.UploadFailed, _actions.Action.UploadFinished, _actions.Action.UploadCanceled].includes(payload.action);
}
class UploadBar extends _react.default.PureComponent {
constructor(props) {
super(props);
// Set initial state to any available upload in this room - we might be mounting
// earlier than the first progress event, so should show something relevant.
(0, _defineProperty2.default)(this, "dispatcherRef", void 0);
(0, _defineProperty2.default)(this, "mounted", false);
(0, _defineProperty2.default)(this, "onAction", payload => {
if (!this.mounted) return;
if (isUploadPayload(payload)) {
this.setState(this.calculateState());
}
});
(0, _defineProperty2.default)(this, "onCancelClick", ev => {
ev.preventDefault();
_ContentMessages.default.sharedInstance().cancelUpload(this.state.currentUpload);
});
this.state = this.calculateState();
}
componentDidMount() {
this.dispatcherRef = _dispatcher.default.register(this.onAction);
this.mounted = true;
}
componentWillUnmount() {
this.mounted = false;
_dispatcher.default.unregister(this.dispatcherRef);
}
getUploadsInRoom() {
const uploads = _ContentMessages.default.sharedInstance().getCurrentUploads(this.props.relation);
return uploads.filter(u => u.roomId === this.props.room.roomId);
}
calculateState() {
const [currentUpload, ...otherUploads] = this.getUploadsInRoom();
return {
currentUpload,
currentFile: currentUpload?.fileName,
currentLoaded: currentUpload?.loaded,
currentTotal: currentUpload?.total,
countFiles: otherUploads.length + 1
};
}
render() {
if (!this.state.currentFile) {
return null;
}
let uploadText;
if (this.state.countFiles > 1) {
// MUST use var name 'count' for pluralization to kick in
uploadText = (0, _languageHandler._t)("room|upload|uploading_multiple_file", {
filename: this.state.currentFile,
count: this.state.countFiles - 1
});
} else {
uploadText = (0, _languageHandler._t)("room|upload|uploading_single_file", {
filename: this.state.currentFile
});
}
const uploadSize = (0, _FileUtils.fileSize)(this.state.currentTotal);
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_UploadBar"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_UploadBar_filename"
}, uploadText, " (", uploadSize, ")"), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: this.onCancelClick,
className: "mx_UploadBar_cancel"
}), /*#__PURE__*/_react.default.createElement(_ProgressBar.default, {
value: this.state.currentLoaded,
max: this.state.currentTotal
}));
}
}
exports.default = UploadBar;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9Db250ZW50TWVzc2FnZXMiLCJfZGlzcGF0Y2hlciIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfYWN0aW9ucyIsIl9Qcm9ncmVzc0JhciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0ZpbGVVdGlscyIsImlzVXBsb2FkUGF5bG9hZCIsInBheWxvYWQiLCJBY3Rpb24iLCJVcGxvYWRTdGFydGVkIiwiVXBsb2FkUHJvZ3Jlc3MiLCJVcGxvYWRGYWlsZWQiLCJVcGxvYWRGaW5pc2hlZCIsIlVwbG9hZENhbmNlbGVkIiwiaW5jbHVkZXMiLCJhY3Rpb24iLCJVcGxvYWRCYXIiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJtb3VudGVkIiwic2V0U3RhdGUiLCJjYWxjdWxhdGVTdGF0ZSIsImV2IiwicHJldmVudERlZmF1bHQiLCJDb250ZW50TWVzc2FnZXMiLCJzaGFyZWRJbnN0YW5jZSIsImNhbmNlbFVwbG9hZCIsInN0YXRlIiwiY3VycmVudFVwbG9hZCIsImNvbXBvbmVudERpZE1vdW50IiwiZGlzcGF0Y2hlclJlZiIsImRpcyIsInJlZ2lzdGVyIiwib25BY3Rpb24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVucmVnaXN0ZXIiLCJnZXRVcGxvYWRzSW5Sb29tIiwidXBsb2FkcyIsImdldEN1cnJlbnRVcGxvYWRzIiwicmVsYXRpb24iLCJmaWx0ZXIiLCJ1Iiwicm9vbUlkIiwicm9vbSIsIm90aGVyVXBsb2FkcyIsImN1cnJlbnRGaWxlIiwiZmlsZU5hbWUiLCJjdXJyZW50TG9hZGVkIiwibG9hZGVkIiwiY3VycmVudFRvdGFsIiwidG90YWwiLCJjb3VudEZpbGVzIiwibGVuZ3RoIiwicmVuZGVyIiwidXBsb2FkVGV4dCIsIl90IiwiZmlsZW5hbWUiLCJjb3VudCIsInVwbG9hZFNpemUiLCJmaWxlU2l6ZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwib25DYW5jZWxDbGljayIsInZhbHVlIiwibWF4IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvVXBsb2FkQmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxNSwgMjAxNiAsIDIwMTksIDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSwgSUV2ZW50UmVsYXRpb24gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gXCJtYXRyaXgtZXZlbnRzLXNka1wiO1xuXG5pbXBvcnQgQ29udGVudE1lc3NhZ2VzIGZyb20gXCIuLi8uLi9Db250ZW50TWVzc2FnZXNcIjtcbmltcG9ydCBkaXMgZnJvbSBcIi4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vLi4vZGlzcGF0Y2hlci9hY3Rpb25zXCI7XG5pbXBvcnQgUHJvZ3Jlc3NCYXIgZnJvbSBcIi4uL3ZpZXdzL2VsZW1lbnRzL1Byb2dyZXNzQmFyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiwgeyBCdXR0b25FdmVudCB9IGZyb20gXCIuLi92aWV3cy9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgeyBSb29tVXBsb2FkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9Sb29tVXBsb2FkXCI7XG5pbXBvcnQgeyBBY3Rpb25QYXlsb2FkIH0gZnJvbSBcIi4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHNcIjtcbmltcG9ydCB7IFVwbG9hZFBheWxvYWQgfSBmcm9tIFwiLi4vLi4vZGlzcGF0Y2hlci9wYXlsb2Fkcy9VcGxvYWRQYXlsb2FkXCI7XG5pbXBvcnQgeyBmaWxlU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9GaWxlVXRpbHNcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgcm9vbTogUm9vbTtcbiAgICByZWxhdGlvbj86IElFdmVudFJlbGF0aW9uO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBjdXJyZW50RmlsZT86IHN0cmluZztcbiAgICBjdXJyZW50VXBsb2FkPzogUm9vbVVwbG9hZDtcbiAgICBjdXJyZW50TG9hZGVkPzogbnVtYmVyO1xuICAgIGN1cnJlbnRUb3RhbD86IG51bWJlcjtcbiAgICBjb3VudEZpbGVzOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzVXBsb2FkUGF5bG9hZChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkKTogcGF5bG9hZCBpcyBVcGxvYWRQYXlsb2FkIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBBY3Rpb24uVXBsb2FkU3RhcnRlZCxcbiAgICAgICAgQWN0aW9uLlVwbG9hZFByb2dyZXNzLFxuICAgICAgICBBY3Rpb24uVXBsb2FkRmFpbGVkLFxuICAgICAgICBBY3Rpb24uVXBsb2FkRmluaXNoZWQsXG4gICAgICAgIEFjdGlvbi5VcGxvYWRDYW5jZWxlZCxcbiAgICBdLmluY2x1ZGVzKHBheWxvYWQuYWN0aW9uIGFzIEFjdGlvbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZEJhciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8SVByb3BzLCBJU3RhdGU+IHtcbiAgICBwcml2YXRlIGRpc3BhdGNoZXJSZWY6IE9wdGlvbmFsPHN0cmluZz47XG4gICAgcHJpdmF0ZSBtb3VudGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gU2V0IGluaXRpYWwgc3RhdGUgdG8gYW55IGF2YWlsYWJsZSB1cGxvYWQgaW4gdGhpcyByb29tIC0gd2UgbWlnaHQgYmUgbW91bnRpbmdcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBmaXJzdCBwcm9ncmVzcyBldmVudCwgc28gc2hvdWxkIHNob3cgc29tZXRoaW5nIHJlbGV2YW50LlxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5jYWxjdWxhdGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyUmVmID0gZGlzLnJlZ2lzdGVyKHRoaXMub25BY3Rpb24pO1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgIGRpcy51bnJlZ2lzdGVyKHRoaXMuZGlzcGF0Y2hlclJlZiEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXBsb2Fkc0luUm9vbSgpOiBSb29tVXBsb2FkW10ge1xuICAgICAgICBjb25zdCB1cGxvYWRzID0gQ29udGVudE1lc3NhZ2VzLnNoYXJlZEluc3RhbmNlKCkuZ2V0Q3VycmVudFVwbG9hZHModGhpcy5wcm9wcy5yZWxhdGlvbik7XG4gICAgICAgIHJldHVybiB1cGxvYWRzLmZpbHRlcigodSkgPT4gdS5yb29tSWQgPT09IHRoaXMucHJvcHMucm9vbS5yb29tSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlU3RhdGUoKTogSVN0YXRlIHtcbiAgICAgICAgY29uc3QgW2N1cnJlbnRVcGxvYWQsIC4uLm90aGVyVXBsb2Fkc10gPSB0aGlzLmdldFVwbG9hZHNJblJvb20oKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnRVcGxvYWQsXG4gICAgICAgICAgICBjdXJyZW50RmlsZTogY3VycmVudFVwbG9hZD8uZmlsZU5hbWUsXG4gICAgICAgICAgICBjdXJyZW50TG9hZGVkOiBjdXJyZW50VXBsb2FkPy5sb2FkZWQsXG4gICAgICAgICAgICBjdXJyZW50VG90YWw6IGN1cnJlbnRVcGxvYWQ/LnRvdGFsLFxuICAgICAgICAgICAgY291bnRGaWxlczogb3RoZXJVcGxvYWRzLmxlbmd0aCArIDEsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFjdGlvbiA9IChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tb3VudGVkKSByZXR1cm47XG4gICAgICAgIGlmIChpc1VwbG9hZFBheWxvYWQocGF5bG9hZCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5jYWxjdWxhdGVTdGF0ZSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIG9uQ2FuY2VsQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIENvbnRlbnRNZXNzYWdlcy5zaGFyZWRJbnN0YW5jZSgpLmNhbmNlbFVwbG9hZCh0aGlzLnN0YXRlLmN1cnJlbnRVcGxvYWQhKTtcbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuY3VycmVudEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVwbG9hZFRleHQ6IHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuY291bnRGaWxlcyA+IDEpIHtcbiAgICAgICAgICAgIC8vIE1VU1QgdXNlIHZhciBuYW1lICdjb3VudCcgZm9yIHBsdXJhbGl6YXRpb24gdG8ga2ljayBpblxuICAgICAgICAgICAgdXBsb2FkVGV4dCA9IF90KFwicm9vbXx1cGxvYWR8dXBsb2FkaW5nX211bHRpcGxlX2ZpbGVcIiwge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLnN0YXRlLmN1cnJlbnRGaWxlLFxuICAgICAgICAgICAgICAgIGNvdW50OiB0aGlzLnN0YXRlLmNvdW50RmlsZXMgLSAxLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGxvYWRUZXh0ID0gX3QoXCJyb29tfHVwbG9hZHx1cGxvYWRpbmdfc2luZ2xlX2ZpbGVcIiwge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLnN0YXRlLmN1cnJlbnRGaWxlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGxvYWRTaXplID0gZmlsZVNpemUodGhpcy5zdGF0ZS5jdXJyZW50VG90YWwhKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfVXBsb2FkQmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9VcGxvYWRCYXJfZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3VwbG9hZFRleHR9ICh7dXBsb2FkU2l6ZX0pXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gb25DbGljaz17dGhpcy5vbkNhbmNlbENsaWNrfSBjbGFzc05hbWU9XCJteF9VcGxvYWRCYXJfY2FuY2VsXCIgLz5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NCYXIgdmFsdWU9e3RoaXMuc3RhdGUuY3VycmVudExvYWRlZCF9IG1heD17dGhpcy5zdGF0ZS5jdXJyZW50VG90YWwhfSAvPlxu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