dash-core-components
Version:
Core component suite for Dash
81 lines (79 loc) • 2.28 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = require("react");
var _base64Js = require("base64-js");
var _fileSaver = require("file-saver");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
var getValue = (src, fallback, key) => key in src ? src[key] : fallback[key];
/**
* The Download component opens a download dialog when the data property changes.
*/
class Download extends _react.Component {
componentDidUpdate(prevProps) {
var data = this.props.data;
// If the data hasn't changed, do nothing.
if (!data || data === prevProps.data) {
return;
}
// Extract options from data if provided, fallback to props.
var type = getValue(data, this.props, 'type');
var base64 = getValue(data, this.props, 'base64');
// Invoke the download using a Blob.
var content = base64 ? (0, _base64Js.toByteArray)(data.content) : data.content;
var blob = new Blob([content], {
type: type
});
(0, _fileSaver.saveAs)(blob, data.filename);
}
render() {
return null;
}
}
exports.default = Download;
Download.propTypes = {
/**
* The ID of this component, used to identify dash components in callbacks.
*/
id: _propTypes.default.string,
/**
* On change, a download is invoked.
*/
data: _propTypes.default.exact({
/**
* Suggested filename in the download dialogue.
*/
filename: _propTypes.default.string.isRequired,
/**
* File content.
*/
content: _propTypes.default.string.isRequired,
/**
* Set to true, when data is base64 encoded.
*/
base64: _propTypes.default.bool,
/**
* Blob type, usually a MIME-type.
*/
type: _propTypes.default.string
}),
/**
* Default value for base64, used when not set as part of the data property.
*/
base64: _propTypes.default.bool,
/**
* Default value for type, used when not set as part of the data property.
*/
type: _propTypes.default.string,
/**
* Dash-supplied function for updating props.
*/
setProps: _propTypes.default.func
};
Download.defaultProps = {
type: 'text/plain',
base64: false
};