@ttk/component
Version:
ttk组件库
657 lines (572 loc) • 17.6 kB
JavaScript
import { _ as _defineProperty } from '../defineProperty-847730aa.js';
import { _ as _asyncToGenerator, r as regenerator } from '../index-8cf76f53.js';
import { _ as _inherits, a as _getPrototypeOf, b as _possibleConstructorReturn, c as _classCallCheck, d as _createClass } from '../getPrototypeOf-b95655c5.js';
import React__default from 'react';
import PropTypes from 'prop-types';
import { sizeSensor } from '@ttk/utils';
import '../_commonjsHelpers-471920d6.js';
var colorPalette$1 = ['#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3', '#e5cf0d', '#97b552', '#95706d', '#dc69aa', '#07a2a4', '#9a7fd1', '#588dd5', '#f5994e', '#c05050', '#59678c', '#c9ab00', '#7eb00a', '#6f5553', '#c14089'];
var macarons = {
color: colorPalette$1,
title: {
textStyle: {
fontWeight: 'normal',
color: '#008acd'
}
},
visualMap: {
itemWidth: 15,
color: ['#5ab1ef', '#e0ffff']
},
toolbox: {
iconStyle: {
normal: {
borderColor: colorPalette$1[0]
}
}
},
tooltip: {
backgroundColor: 'rgba(50,50,50,0.5)',
axisPointer: {
type: 'line',
lineStyle: {
color: '#008acd'
},
crossStyle: {
color: '#008acd'
},
shadowStyle: {
color: 'rgba(200,200,200,0.2)'
}
}
},
dataZoom: {
dataBackgroundColor: '#efefff',
fillerColor: 'rgba(182,162,222,0.2)',
handleColor: '#008acd'
},
grid: {
borderColor: '#eee'
},
categoryAxis: {
axisLine: {
lineStyle: {
color: '#008acd'
}
},
splitLine: {
lineStyle: {
color: ['#eee']
}
}
},
valueAxis: {
axisLine: {
lineStyle: {
color: '#008acd'
}
},
splitArea: {
show: true,
areaStyle: {
color: ['rgba(250,250,250,0.1)', 'rgba(200,200,200,0.1)']
}
},
splitLine: {
lineStyle: {
color: ['#eee']
}
}
},
timeline: {
lineStyle: {
color: '#008acd'
},
controlStyle: {
normal: {
color: '#008acd'
},
emphasis: {
color: '#008acd'
}
},
symbol: 'emptyCircle',
symbolSize: 3
},
line: {
smooth: true,
symbol: 'emptyCircle',
symbolSize: 3
},
candlestick: {
itemStyle: {
normal: {
color: '#d87a80',
color0: '#2ec7c9',
lineStyle: {
color: '#d87a80',
color0: '#2ec7c9'
}
}
}
},
scatter: {
symbol: 'circle',
symbolSize: 4
},
map: {
label: {
normal: {
textStyle: {
color: '#d87a80'
}
}
},
itemStyle: {
normal: {
borderColor: '#eee',
areaColor: '#ddd'
},
emphasis: {
areaColor: '#fe994e'
}
}
},
graph: {
color: colorPalette$1
},
gauge: {
axisLine: {
lineStyle: {
color: [[0.2, '#2ec7c9'], [0.8, '#5ab1ef'], [1, '#d87a80']],
width: 10
}
},
axisTick: {
splitNumber: 10,
length: 15,
lineStyle: {
color: 'auto'
}
},
splitLine: {
length: 22,
lineStyle: {
color: 'auto'
}
},
pointer: {
width: 5
}
}
};
var colorPalette = ['#c12e34', '#e6b600', '#0098d9', '#2b821d', '#005eaa', '#339ca8', '#cda819', '#32a487'];
var shine = {
color: colorPalette,
title: {
textStyle: {
fontWeight: 'normal'
}
},
visualMap: {
color: ['#1790cf', '#a2d4e6']
},
toolbox: {
iconStyle: {
normal: {
borderColor: '#06467c'
}
}
},
tooltip: {
backgroundColor: 'rgba(0,0,0,0.6)'
},
dataZoom: {
dataBackgroundColor: '#dedede',
fillerColor: 'rgba(154,217,247,0.2)',
handleColor: '#005eaa'
},
timeline: {
lineStyle: {
color: '#005eaa'
},
controlStyle: {
normal: {
color: '#005eaa',
borderColor: '#005eaa'
}
}
},
candlestick: {
itemStyle: {
normal: {
color: '#c12e34',
color0: '#2b821d',
lineStyle: {
width: 1,
color: '#c12e34',
color0: '#2b821d'
}
}
}
},
graph: {
color: colorPalette
},
map: {
label: {
normal: {
textStyle: {
color: '#c12e34'
}
},
emphasis: {
textStyle: {
color: '#c12e34'
}
}
},
itemStyle: {
normal: {
borderColor: '#eee',
areaColor: '#ddd'
},
emphasis: {
areaColor: '#e6b600'
}
}
},
gauge: {
axisLine: {
show: true,
lineStyle: {
color: [[0.2, '#2b821d'], [0.8, '#005eaa'], [1, '#c12e34']],
width: 5
}
},
axisTick: {
splitNumber: 10,
length: 8,
lineStyle: {
color: 'auto'
}
},
axisLabel: {
textStyle: {
color: 'auto'
}
},
splitLine: {
length: 12,
lineStyle: {
color: 'auto'
}
},
pointer: {
length: '90%',
width: 3,
color: 'auto'
},
title: {
textStyle: {
color: '#333'
}
},
detail: {
textStyle: {
color: 'auto'
}
}
}
};
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var SingleClass = function SingleClass() {
var _this = this;
_classCallCheck(this, SingleClass);
this.echarts = null;
this.Component = null;
this.emit = {};
this.send = false;
this.load = function () {
var arr = _this.emit;
for (var _i = 0, _Object$values = Object.values(arr); _i < _Object$values.length; _i++) {
var value = _Object$values[_i];
value && value();
}
_this.emit = {};
};
this.load = this.load.bind(this);
};
var SingleObj = new SingleClass();
var EcharsComponent = /*#__PURE__*/function (_React$Component) {
_inherits(EcharsComponent, _React$Component);
var _super = _createSuper(EcharsComponent);
function EcharsComponent(props) {
var _this2;
_classCallCheck(this, EcharsComponent);
_this2 = _super.call(this, props);
_this2.loadEcharts = function () {
return new Promise(function (resolve, reject) {
var dom = document.createElement('script');
dom.type = 'text/javascript';
dom.charset = 'utf-8';
dom.src = "./vendor/echarts.min.js";
dom.onload = resolve;
document.body.appendChild(dom);
});
};
_this2.loadZrender = function () {
return new Promise(function (resolve, reject) {
var dom = document.createElement('script');
dom.type = 'text/javascript';
dom.charset = 'utf-8';
dom.src = "./vendor/zrender.min.js";
dom.onload = resolve;
document.body.appendChild(dom);
});
};
_this2.loadDependencies = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
var Component;
return regenerator.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
SingleObj.send = true;
_context.next = 3;
return Promise.all([_this2.loadEcharts(), _this2.loadZrender()]);
case 3:
// const res = await this.loadPackage()
// let Component = res['default']
Component = getEchartsForReact();
Component.registerTheme = echarts.registerTheme;
echarts.registerTheme('shine', shine);
echarts.registerTheme('macarons', macarons);
SingleObj.Component = Component;
SingleObj.load();
_this2.setState({});
case 10:
case "end":
return _context.stop();
}
}
}, _callee);
}));
_this2.loadSuccess = function () {
_this2.setState({});
};
_this2.state = {};
_this2.keyRandom = Math.floor(Math.random() * 10000);
return _this2;
}
_createClass(EcharsComponent, [{
key: "render",
value: function render() {
var Component = SingleObj.Component,
emit = SingleObj.emit,
send = SingleObj.send;
var props = this.props;
if (Component) {
return /*#__PURE__*/React__default.createElement(Component, props);
} else {
if (!send) {
this.loadDependencies();
} else {
emit[this.keyRandom] = this.loadSuccess;
}
return null;
}
}
}]);
return EcharsComponent;
}(React__default.Component);
function getEchartsForReact() {
var pick = function pick(obj, keys) {
var r = {};
keys.forEach(function (key) {
r[key] = obj[key];
});
return r;
};
var EchartsReactCore = /*#__PURE__*/function (_React$Component2) {
_inherits(EchartsReactCore, _React$Component2);
var _super2 = _createSuper(EchartsReactCore);
function EchartsReactCore(props) {
var _this3;
_classCallCheck(this, EchartsReactCore);
_this3 = _super2.call(this, props);
_this3.getEchartsInstance = function () {
return _this3.echartsLib.getInstanceByDom(_this3.echartsElement) || _this3.echartsLib.init(_this3.echartsElement, _this3.props.theme, _this3.props.opts);
};
_this3.dispose = function () {
if (_this3.echartsElement) {
try {
sizeSensor.clear(_this3.echartsElement);
} catch (e) {
console.warn(e);
} // dispose echarts instance
_this3.echartsLib.dispose(_this3.echartsElement);
}
};
_this3.rerender = function () {
var _this3$props = _this3.props,
onEvents = _this3$props.onEvents,
onChartReady = _this3$props.onChartReady;
var echartObj = _this3.renderEchartDom();
_this3.bindEvents(echartObj, onEvents || {}); // on chart ready
if (typeof onChartReady === 'function') _this3.props.onChartReady(echartObj); // on resize
if (_this3.echartsElement) {
sizeSensor.bind(_this3.echartsElement, function () {
try {
echartObj.resize();
} catch (e) {
console.warn(e);
}
});
}
};
_this3.bindEvents = function (instance, events) {
var _bindEvent = function _bindEvent(eventName, func) {
// ignore the event config which not satisfy
if (typeof eventName === 'string' && typeof func === 'function') {
// binding event
// instance.off(eventName); // 已经 dispose 在重建,所以无需 off 操作
instance.on(eventName, function (param) {
func(param, instance);
});
}
}; // loop and bind
for (var eventName in events) {
if (Object.prototype.hasOwnProperty.call(events, eventName)) {
_bindEvent(eventName, events[eventName]);
}
}
};
_this3.renderEchartDom = function () {
// init the echart object
var echartObj = _this3.getEchartsInstance(); // set the echart option
echartObj.setOption(_this3.props.option, _this3.props.notMerge || false, _this3.props.lazyUpdate || false); // set loading mask
if (_this3.props.showLoading) echartObj.showLoading(_this3.props.loadingOption || null);else echartObj.hideLoading();
return echartObj;
};
_this3.echartsLib = props.echarts; // the echarts object.
_this3.echartsElement = null; // echarts div element
return _this3;
} // first add
_createClass(EchartsReactCore, [{
key: "componentDidMount",
value: function componentDidMount() {
this.rerender();
} // update
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
// 判断是否需要 setOption,由开发者自己来确定。默认为 true
if (typeof this.props.shouldSetOption === 'function' && !this.props.shouldSetOption(prevProps, this.props)) {
return;
} // 以下属性修改的时候,需要 dispose 之后再新建
// 1. 切换 theme 的时候
// 2. 修改 opts 的时候
// 3. 修改 onEvents 的时候,这样可以取消所有之前绑定的事件 issue #151
if (!sizeSensor.isEqual(prevProps.theme, this.props.theme) || !sizeSensor.isEqual(prevProps.opts, this.props.opts) || !sizeSensor.isEqual(prevProps.onEvents, this.props.onEvents)) {
this.dispose();
this.rerender(); // 重建
return;
} // 当这些属性保持不变的时候,不 setOption
var pickKeys = ['option', 'notMerge', 'lazyUpdate', 'showLoading', 'loadingOption'];
if (sizeSensor.isEqual(pick(this.props, pickKeys), pick(prevProps, pickKeys))) {
return;
}
var echartObj = this.renderEchartDom(); // 样式修改的时候,可能会导致大小变化,所以触发一下 resize
if (!sizeSensor.isEqual(prevProps.style, this.props.style) || !sizeSensor.isEqual(prevProps.className, this.props.className)) {
try {
echartObj.resize();
} catch (e) {
console.warn(e);
}
}
} // remove
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.dispose();
} // return the echart object
}, {
key: "render",
value: function render() {
var _this4 = this;
var _this$props = this.props,
style = _this$props.style,
className = _this$props.className;
var newStyle = _objectSpread({
height: 300
}, style); // for render
return /*#__PURE__*/React__default.createElement("div", {
ref: function ref(e) {
_this4.echartsElement = e;
},
style: newStyle,
className: "echarts-for-react ".concat(className)
});
}
}]);
return EchartsReactCore;
}(React__default.Component);
EchartsReactCore.propTypes = {
option: PropTypes.object.isRequired,
// eslint-disable-line react/forbid-prop-types
echarts: PropTypes.object,
// eslint-disable-line react/forbid-prop-types
notMerge: PropTypes.bool,
lazyUpdate: PropTypes.bool,
style: PropTypes.object,
// eslint-disable-line react/forbid-prop-types
className: PropTypes.string,
theme: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
onChartReady: PropTypes.func,
showLoading: PropTypes.bool,
loadingOption: PropTypes.object,
// eslint-disable-line react/forbid-prop-types
onEvents: PropTypes.object,
// eslint-disable-line react/forbid-prop-types
opts: PropTypes.shape({
devicePixelRatio: PropTypes.number,
renderer: PropTypes.oneOf(['canvas', 'svg']),
width: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf([null, undefined, 'auto'])]),
height: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf([null, undefined, 'auto'])])
}),
shouldSetOption: PropTypes.func
};
EchartsReactCore.defaultProps = {
echarts: {},
notMerge: false,
lazyUpdate: false,
style: {},
className: '',
theme: null,
onChartReady: function onChartReady() {},
showLoading: false,
loadingOption: null,
onEvents: {},
opts: {},
shouldSetOption: function shouldSetOption() {
return true;
}
};
var EchartsReact = /*#__PURE__*/function (_EchartsReactCore) {
_inherits(EchartsReact, _EchartsReactCore);
var _super3 = _createSuper(EchartsReact);
function EchartsReact(props) {
var _this5;
_classCallCheck(this, EchartsReact);
_this5 = _super3.call(this, props);
_this5.echartsLib = echarts;
return _this5;
}
return EchartsReact;
}(EchartsReactCore);
return EchartsReact;
}
export { EcharsComponent as default };