This is an automated email from the ASF dual-hosted git repository.

sushuang pushed a commit to branch fix/candlestick-lengend
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit 6be41c231bd681ca5dae8329fa4edc06e3f6abd4
Author: 100pah <[email protected]>
AuthorDate: Mon Jan 13 14:20:09 2020 +0800

    fix: fix candlestick throw error when some series filtered by legend. fix 
#11611
---
 src/chart/candlestick/candlestickVisual.js |   2 +-
 src/chart/helper/createRenderPlanner.js    |   7 +-
 src/stream/Scheduler.js                    |   8 ++
 test/stream-filter2.html                   | 155 +++++++++++++++++++++++++++++
 4 files changed, 169 insertions(+), 3 deletions(-)

diff --git a/src/chart/candlestick/candlestickVisual.js 
b/src/chart/candlestick/candlestickVisual.js
index c645edd..44bfd17 100644
--- a/src/chart/candlestick/candlestickVisual.js
+++ b/src/chart/candlestick/candlestickVisual.js
@@ -36,7 +36,6 @@ export default {
     reset: function (seriesModel, ecModel) {
 
         var data = seriesModel.getData();
-        var isLargeRender = seriesModel.pipelineContext.large;
 
         data.setVisual({
             legendSymbol: 'roundRect',
@@ -51,6 +50,7 @@ export default {
             return;
         }
 
+        var isLargeRender = seriesModel.pipelineContext.large;
         return !isLargeRender && {progress: progress};
 
 
diff --git a/src/chart/helper/createRenderPlanner.js 
b/src/chart/helper/createRenderPlanner.js
index 01655d0..0fc5041 100644
--- a/src/chart/helper/createRenderPlanner.js
+++ b/src/chart/helper/createRenderPlanner.js
@@ -32,8 +32,11 @@ export default function () {
         var originalLarge = fields.large;
         var originalProgressive = fields.progressiveRender;
 
-        var large = fields.large = pipelineContext.large;
-        var progressive = fields.progressiveRender = 
pipelineContext.progressiveRender;
+        // FIXME: if the planner works on a filtered series, `pipelineContext` 
does not
+        // exists. See #11611 . Probably we need to modify this structure, see 
the comment
+        // on `performRawSeries` in `Schedular.js`.
+        var large = fields.large = pipelineContext && pipelineContext.large;
+        var progressive = fields.progressiveRender = pipelineContext && 
pipelineContext.progressiveRender;
 
         return !!((originalLarge ^ large) || (originalProgressive ^ 
progressive)) && 'reset';
     };
diff --git a/src/stream/Scheduler.js b/src/stream/Scheduler.js
index ce28e0e..ce34db5 100644
--- a/src/stream/Scheduler.js
+++ b/src/stream/Scheduler.js
@@ -260,6 +260,14 @@ function performStageTasks(scheduler, stageHandlers, 
ecModel, payload, opt) {
                     task.dirty();
                 }
                 var performArgs = scheduler.getPerformArgs(task, opt.block);
+                // FIXME
+                // if intending to decalare `performRawSeries` in handlers, 
only
+                // stream-independent (specifically, data item independent) 
operations can be
+                // performed. Because is a series is filtered, most of the 
tasks will not
+                // be performed. A stream-dependent operation probably cause 
wrong biz logic.
+                // Perhaps we should not provide a separate callback for this 
case instead
+                // of providing the config `performRawSeries`. The 
stream-dependent operaions
+                // and stream-independent operations should better not be 
mixed.
                 performArgs.skip = !stageHandler.performRawSeries
                     && ecModel.isSeriesFiltered(task.context.model);
                 updatePayload(task, payload);
diff --git a/test/stream-filter2.html b/test/stream-filter2.html
new file mode 100644
index 0000000..1634593
--- /dev/null
+++ b/test/stream-filter2.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1" />
+        <script src="lib/esl.js"></script>
+        <script src="lib/config.js"></script>
+        <script src="lib/jquery.min.js"></script>
+        <script src="lib/facePrint.js"></script>
+        <script src="lib/testHelper.js"></script>
+        <!-- <script src="ut/lib/canteen.js"></script> -->
+        <link rel="stylesheet" href="lib/reset.css" />
+    </head>
+    <body>
+        <style>
+        </style>
+
+
+
+        <div id="main0"></div>
+
+
+
+
+
+        <script>
+        require(['echarts'/*, 'map/js/china' */], function (echarts) {
+            var option;
+
+            option = {
+                legend: {
+                    left: 'center',
+                    data: ['K', 'CK'],
+                    selected: {
+                        'K': false,
+                        'CK': true
+                    }
+                },
+                grid: [{
+                    left: '10%',
+                    right: '10%',
+                    height: '50%'
+                }],
+                xAxis: [{
+                    type: 'category',
+                    boundaryGap: true,
+                    axisLine: {onZero: false},
+                    splitLine: {show: false},
+                    data: [
+                        '2012-10-10'
+                    ]
+                }],
+                yAxis: [{
+                    scale: true,
+                    splitArea: {show: true}
+                }],
+                axisPointer: {
+                    link: [{
+                        xAxisIndex: [0, 1]
+                    }]
+                },
+                dataZoom: [
+                    {
+                        type: 'inside',
+                        xAxisIndex: [0, 0],
+                        start: 0,
+                        end: 100
+                    }
+                ],
+                tooltip: {
+                    trigger: 'axis',
+                    axisPointer: {type: 'line'}
+                },
+                toolbox: {
+                    show: true,
+                    feature: {
+                        dataZoom: {yAxisIndex: false},
+                        dataView: {readOnly: false},
+                        restore: {},
+                        saveAsImage: {}
+                    }
+                },
+                series: [
+                    {
+                        name: 'K',
+                        type: 'candlestick',
+                        itemStyle: {
+                            normal: {
+                                color: '#B22222',
+                                color0: '#008000',
+                                opacity: 0.4
+                            }
+                        },
+                        data: [
+                            [
+                                2993.9617,
+                                3007.8834,
+                                2989.8125,
+                                3026.3834,
+                                20861480200.0,
+                                221201755725.0
+                            ]
+                        ]
+                    },
+                    {
+                        name: 'CK',
+                        type: 'candlestick',
+                        data: [
+                            [
+                                2934.3873,
+                                2954.6415,
+                                2934.3873,
+                                2954.6415
+                            ]
+                        ]
+                    }
+                ]
+            };
+
+            var chart = testHelper.create(echarts, 'main0', {
+                title: [
+                    'The chart should rendered normally when a series is 
filtered'
+                ],
+                option: option
+                // height: 300,
+                // buttons: [{text: 'btn-txt', onclick: function () {}}],
+                // recordCanvas: true,
+            });
+        });
+        </script>
+
+
+    </body>
+</html>
+


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to