|
|
@@ -0,0 +1,181 @@
|
|
|
+Ext.define('saas.view.core.EChartsBase', {
|
|
|
+ extend: 'Ext.Container',
|
|
|
+ xtype: 'echartsbase',
|
|
|
+
|
|
|
+ mixins: [
|
|
|
+ 'Ext.util.StoreHolder'
|
|
|
+ ],
|
|
|
+
|
|
|
+ border: false,
|
|
|
+ style: {
|
|
|
+ width: '100%',
|
|
|
+ height: '100%'
|
|
|
+ },
|
|
|
+ config: {
|
|
|
+ option: null
|
|
|
+ },
|
|
|
+
|
|
|
+ initComponent: function () {
|
|
|
+ var me = this;
|
|
|
+ me.on('resize', function(container, width, height, oldWidth, oldHeight, eOpts) {
|
|
|
+ if(me.timer) {
|
|
|
+ window.clearTimeout(me.timer);
|
|
|
+ }
|
|
|
+ me.timer = window.setTimeout(function() {
|
|
|
+ me.echarts.resize();
|
|
|
+ }, 100);
|
|
|
+ });
|
|
|
+ me.on("boxready", function () {
|
|
|
+ me.echarts = echarts.init(me.getEl().dom);
|
|
|
+ });
|
|
|
+ me.callParent();
|
|
|
+ },
|
|
|
+
|
|
|
+ setStore: function (newStore) {
|
|
|
+ var me = this;
|
|
|
+
|
|
|
+ if (me.store !== newStore) {
|
|
|
+ if (me.isConfiguring) {
|
|
|
+ me.store = newStore;
|
|
|
+ } else {
|
|
|
+ me.bindStore(newStore, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ onBindStore: function(store, oldStore) {
|
|
|
+ var me = this;
|
|
|
+
|
|
|
+ if (me.store.isBufferedStore) {
|
|
|
+ me.store.preserveScrollOnReload = me.preserveScrollOnReload;
|
|
|
+ }
|
|
|
+ if (oldStore && oldStore.isBufferedStore) {
|
|
|
+ delete oldStore.preserveScrollOnReload;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!me.dataSource) {
|
|
|
+ me.dataSource = store;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ onUnbindStore: function(store) {
|
|
|
+ if (this.dataSource === store) {
|
|
|
+ this.dataSource = null;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ bindStore: function (store, initial) {
|
|
|
+ var me = this;
|
|
|
+
|
|
|
+ me.mixins.storeholder.bindStore.apply(me, arguments);
|
|
|
+
|
|
|
+
|
|
|
+ if (store && me.componentLayoutCounter && !me.blockRefresh) {
|
|
|
+ me.doFirstRefresh(store, !initial);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ doFirstRefresh: function(store, noDefer) {
|
|
|
+ var me = this;
|
|
|
+
|
|
|
+ if (me.deferInitialRefresh && !noDefer) {
|
|
|
+ Ext.defer(me.doFirstRefresh, 1, me, [store, true]);
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
+ if (store && !me.deferRefreshForLoad(store)) {
|
|
|
+ me.refresh();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ deferRefreshForLoad: function(store) {
|
|
|
+ return store.isLoading();
|
|
|
+ },
|
|
|
+
|
|
|
+ getStoreListeners: function() {
|
|
|
+ var me = this;
|
|
|
+ return {
|
|
|
+ scope: me,
|
|
|
+ refresh: me.onDataRefresh,
|
|
|
+ replace: me.onReplace,
|
|
|
+ add: me.onAdd,
|
|
|
+ remove: me.onRemove,
|
|
|
+ update: me.onUpdate,
|
|
|
+ clear: me.onDataRefresh,
|
|
|
+ beginupdate: me.onBeginUpdate,
|
|
|
+ endupdate: me.onEndUpdate
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+ onDataRefresh: function(store) {
|
|
|
+ // console.log('onDataRefresh');
|
|
|
+ var me = this,
|
|
|
+ preserveScrollOnRefresh = me.preserveScrollOnRefresh;
|
|
|
+
|
|
|
+ if (store.loadCount > (me.lastRefreshLoadCount || 0)) {
|
|
|
+ me.preserveScrollOnRefresh = me.preserveScrollOnReload;
|
|
|
+ }
|
|
|
+ me.refreshView();
|
|
|
+ me.preserveScrollOnRefresh = preserveScrollOnRefresh;
|
|
|
+ me.lastRefreshLoadCount = store.loadCount;
|
|
|
+ },
|
|
|
+
|
|
|
+ onReplace: function() {
|
|
|
+ // console.log('onReplace');
|
|
|
+ },
|
|
|
+
|
|
|
+ onAdd: function() {
|
|
|
+ // console.log('onAdd');
|
|
|
+ },
|
|
|
+
|
|
|
+ onRemove: function() {
|
|
|
+ // console.log('onRemove');
|
|
|
+ },
|
|
|
+
|
|
|
+ onUpdate: function() {
|
|
|
+ // console.log('onUpdate');
|
|
|
+ },
|
|
|
+
|
|
|
+ onBeginUpdate: function() {
|
|
|
+ // console.log('onBeginUpdate');
|
|
|
+ },
|
|
|
+
|
|
|
+ onEndUpdate: function() {
|
|
|
+ // console.log('onEndUpdate');
|
|
|
+ },
|
|
|
+
|
|
|
+ refreshView: function(startIndex) {
|
|
|
+ var me = this,
|
|
|
+ // If we have an ancestor in a non-boxready state (collapsed or about to collapse, or hidden), then block the
|
|
|
+ // refresh because the next layout will trigger the refresh
|
|
|
+ blocked = me.blockRefresh || !me.rendered || me.up('[collapsed],[isCollapsingOrExpanding=1],[hidden]'),
|
|
|
+ bufferedRenderer = me.bufferedRenderer;
|
|
|
+
|
|
|
+ // If we are blocked in any way due to either a setting, or hidden or collapsed, or animating ancestor, then
|
|
|
+ // the next refresh attempt at the upcoming layout must not defer.
|
|
|
+ if (blocked) {
|
|
|
+ me.refreshNeeded = true;
|
|
|
+ } else {
|
|
|
+ if (bufferedRenderer) {
|
|
|
+ bufferedRenderer.refreshView(startIndex);
|
|
|
+ } else {
|
|
|
+ me.refresh();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ refresh: function() {
|
|
|
+ var me = this,
|
|
|
+ store = me.store,
|
|
|
+ option = me.createOption(store);
|
|
|
+
|
|
|
+ if(option) {
|
|
|
+ me.echarts.setOption(option);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ createOption: function(store) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+});
|