sea-chart 2.0.36 → 2.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +8 -15
- package/dist/components/cell-factory/FormatterConfig.js +55 -62
- package/dist/components/cell-factory/SimpleCellFormatter.js +5 -12
- package/dist/components/cell-factory/SingleSelectOption.js +11 -18
- package/dist/components/cell-factory/cell-editor-factory.js +5 -12
- package/dist/components/cell-factory/cell-formatter-factory.js +4 -11
- package/dist/components/cell-factory/link-content.js +30 -38
- package/dist/components/chart-color-selector/color-selector.js +11 -18
- package/dist/components/collaborator/index.js +7 -14
- package/dist/components/color-picker/index.js +12 -19
- package/dist/components/color-popover/color-rules/color-rule.js +26 -34
- package/dist/components/color-popover/color-rules/index.js +7 -15
- package/dist/components/color-popover/color-rules/rule-filters/filter.js +27 -34
- package/dist/components/color-popover/color-rules/rule-filters/index.js +17 -25
- package/dist/components/color-popover/color-rules/rule-filters/number-input.js +9 -17
- package/dist/components/color-popover/color-rules-popover.js +30 -38
- package/dist/components/color-popover/color-selector-popover.js +12 -20
- package/dist/components/color-setting/color-group-selector.js +13 -21
- package/dist/components/common-add-tool/index.js +8 -15
- package/dist/components/data-process-setter/data-setting-header.js +7 -14
- package/dist/components/data-process-setter/hide-column-setter.js +13 -20
- package/dist/components/data-process-setter/index.js +4 -27
- package/dist/components/data-process-setter/sort-setter.js +18 -26
- package/dist/components/draggable/Draggable.js +7 -13
- package/dist/components/drill-down-settings/drill-down-fields-popover/index.js +40 -48
- package/dist/components/drill-down-settings/drill-down-fields-settings/index.js +10 -18
- package/dist/components/drill-down-settings/index.js +11 -18
- package/dist/components/dtable-popover/index.js +13 -20
- package/dist/components/dtable-search-input/index.js +13 -21
- package/dist/components/font-settings/index.js +14 -22
- package/dist/components/goal-line-setting/goal-setting-item.js +6 -14
- package/dist/components/goal-line-setting/index.js +12 -19
- package/dist/components/highlighter/highlighter.js +7 -14
- package/dist/components/icon/index.js +5 -12
- package/dist/components/index.js +7 -48
- package/dist/components/loading/index.js +6 -13
- package/dist/components/number-input/index.js +4 -11
- package/dist/components/pixel-editor/index.js +15 -23
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +8 -15
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +26 -34
- package/dist/components/popover/sort-popover/sort-popover-widgets/sort-utils.js +9 -18
- package/dist/components/popover/sort-popover/sort-popover.js +55 -65
- package/dist/components/resize-handle/ResizeHandle.js +6 -13
- package/dist/components/row-card/row-card-header-cell.js +17 -24
- package/dist/components/row-card/row-card-header.js +15 -22
- package/dist/components/row-card/row-card-item.js +35 -43
- package/dist/components/row-card/row-card.js +17 -25
- package/dist/components/statistic-record-dialog/index.js +56 -64
- package/dist/components/tooltip/index.js +14 -21
- package/dist/components/types-dialog/index.js +62 -70
- package/dist/components/types-dialog/use-force-update.js +4 -10
- package/dist/constants/color-rules.js +8 -14
- package/dist/constants/common-constants.js +8 -14
- package/dist/constants/error.js +2 -8
- package/dist/constants/geolocation.js +9 -15
- package/dist/constants/index.js +142 -271
- package/dist/constants/key-codes.js +0 -2
- package/dist/constants/model.js +3 -9
- package/dist/constants/regions.js +3 -8
- package/dist/constants/style.js +6 -12
- package/dist/constants/table.js +1 -7
- package/dist/constants/type-image.js +33 -39
- package/dist/constants/type.js +3 -9
- package/dist/context.js +13 -20
- package/dist/editor/index.js +8 -15
- package/dist/index.js +13 -104
- package/dist/intl.js +10 -17
- package/dist/locale/index.js +16 -23
- package/dist/locale/lang/de.js +1 -7
- package/dist/locale/lang/en.js +1 -7
- package/dist/locale/lang/es.js +1 -7
- package/dist/locale/lang/fr.js +1 -7
- package/dist/locale/lang/pt.js +1 -7
- package/dist/locale/lang/ru.js +1 -7
- package/dist/locale/lang/zh_CN.js +1 -7
- package/dist/model/area-group.js +12 -19
- package/dist/model/area.js +12 -19
- package/dist/model/bar-custom.js +11 -18
- package/dist/model/bar-group.js +12 -19
- package/dist/model/bar-stack.js +10 -17
- package/dist/model/bar.js +11 -18
- package/dist/model/base-model.js +4 -11
- package/dist/model/basic-number-card.js +13 -20
- package/dist/model/chart.js +7 -13
- package/dist/model/combination.js +15 -22
- package/dist/model/compare-bar.js +14 -21
- package/dist/model/completeness-group.js +11 -18
- package/dist/model/completeness.js +10 -17
- package/dist/model/dashboard.js +7 -14
- package/dist/model/funnel.js +14 -21
- package/dist/model/generic-model.js +135 -143
- package/dist/model/heat-map.js +9 -16
- package/dist/model/horizontal-bar.js +11 -18
- package/dist/model/horizontal-group-bar.js +10 -17
- package/dist/model/index.js +69 -93
- package/dist/model/line-group.js +13 -20
- package/dist/model/line.js +12 -19
- package/dist/model/map-bubble.js +12 -19
- package/dist/model/map.js +12 -19
- package/dist/model/mirror.js +13 -20
- package/dist/model/pie.js +12 -19
- package/dist/model/ring.js +12 -19
- package/dist/model/scatter.js +10 -17
- package/dist/model/stacked-horizontal-bar.js +11 -18
- package/dist/model/table-element.js +5 -12
- package/dist/model/table.js +7 -14
- package/dist/model/tree-map.js +7 -14
- package/dist/model/trend.js +11 -18
- package/dist/model/user.js +1 -7
- package/dist/model/world-map-bubble.js +12 -19
- package/dist/model/world-map.js +12 -19
- package/dist/services/map-json.js +11 -17
- package/dist/settings/advance-bar-settings/data-settings.js +36 -44
- package/dist/settings/advance-bar-settings/index.js +3 -20
- package/dist/settings/advance-bar-settings/style-settings.js +63 -71
- package/dist/settings/bar-settings/data-settings.js +39 -47
- package/dist/settings/bar-settings/index.js +3 -20
- package/dist/settings/bar-settings/style-settings.js +49 -57
- package/dist/settings/basic-number-card/data-settings.js +49 -57
- package/dist/settings/basic-number-card/index.js +3 -20
- package/dist/settings/basic-number-card/style-settings.js +19 -27
- package/dist/settings/combination-settings/data-settings.js +55 -63
- package/dist/settings/combination-settings/index.js +3 -20
- package/dist/settings/combination-settings/style-settings.js +65 -73
- package/dist/settings/completeness-settings/callbacks/callbacks.js +16 -27
- package/dist/settings/completeness-settings/data-settings/completion-settings.js +21 -28
- package/dist/settings/completeness-settings/data-settings/data-settings.js +25 -32
- package/dist/settings/completeness-settings/index.js +3 -20
- package/dist/settings/completeness-settings/style-settings.js +19 -26
- package/dist/settings/dashboard-settings/data-settings.js +43 -51
- package/dist/settings/dashboard-settings/index.js +2 -13
- package/dist/settings/data-settings.js +72 -79
- package/dist/settings/funnel-settings/components/dnd-item/dnd-item.js +12 -19
- package/dist/settings/funnel-settings/components/dnd-list.js +15 -23
- package/dist/settings/funnel-settings/components/funnel-label-setting.js +32 -40
- package/dist/settings/funnel-settings/components/funnel-layer-setting.js +20 -28
- package/dist/settings/funnel-settings/data-settings.js +23 -31
- package/dist/settings/funnel-settings/index.js +3 -20
- package/dist/settings/funnel-settings/style-settings.js +11 -19
- package/dist/settings/heat-map-settings/data-settings.js +18 -26
- package/dist/settings/heat-map-settings/index.js +3 -20
- package/dist/settings/heat-map-settings/style-settings.js +18 -26
- package/dist/settings/horizontal-bar-settings/data-settings.js +12 -19
- package/dist/settings/horizontal-bar-settings/index.js +3 -20
- package/dist/settings/horizontal-bar-settings/style-settings.js +12 -19
- package/dist/settings/index.js +52 -70
- package/dist/settings/map-settings/components/location-field-selector.js +10 -17
- package/dist/settings/map-settings/components/map-level-selector.js +11 -18
- package/dist/settings/map-settings/components/map-province-city-selector.js +19 -26
- package/dist/settings/map-settings/index.js +3 -20
- package/dist/settings/map-settings/map-data-settings.js +23 -30
- package/dist/settings/map-settings/map-style-settings.js +27 -35
- package/dist/settings/mirror-settings/data-settings.js +26 -34
- package/dist/settings/mirror-settings/index.js +2 -13
- package/dist/settings/pie-settings/data-settings.js +33 -41
- package/dist/settings/pie-settings/index.js +3 -20
- package/dist/settings/pie-settings/style-settings.js +47 -55
- package/dist/settings/scatter/data-settings.js +27 -34
- package/dist/settings/scatter/index.js +3 -12
- package/dist/settings/stacks-settings/index.js +19 -27
- package/dist/settings/stacks-settings/stack-item-settings.js +19 -27
- package/dist/settings/style-settings.js +65 -73
- package/dist/settings/table-element-settings/components/data-filter.js +30 -38
- package/dist/settings/table-element-settings/data-settings.js +21 -29
- package/dist/settings/table-element-settings/index.js +2 -13
- package/dist/settings/table-settings/data-settings.js +112 -120
- package/dist/settings/table-settings/index.js +2 -13
- package/dist/settings/time-comparison-settings/data-settings.js +43 -51
- package/dist/settings/time-comparison-settings/index.js +3 -20
- package/dist/settings/time-comparison-settings/style-settings.js +42 -50
- package/dist/settings/trend-settings/data-settings.js +24 -32
- package/dist/settings/trend-settings/index.js +3 -20
- package/dist/settings/trend-settings/style-setting.js +19 -27
- package/dist/settings/widgets/basic-summary/index.js +55 -63
- package/dist/settings/widgets/chart-type/index.js +18 -26
- package/dist/settings/widgets/color-settings/index.js +72 -80
- package/dist/settings/widgets/common-data-settings.js +21 -29
- package/dist/settings/widgets/data-filter/index.js +35 -43
- package/dist/settings/widgets/data-sort.js +16 -24
- package/dist/settings/widgets/date-summary-item.js +26 -34
- package/dist/settings/widgets/display-values-settings/index.js +14 -22
- package/dist/settings/widgets/divider/index.js +8 -16
- package/dist/settings/widgets/font-settings/font-color-settings.js +11 -19
- package/dist/settings/widgets/font-settings/font-size-settings.js +14 -22
- package/dist/settings/widgets/font-settings/font-weight-settings.js +17 -25
- package/dist/settings/widgets/font-settings/index.js +4 -27
- package/dist/settings/widgets/group-by.js +51 -59
- package/dist/settings/widgets/min-max-setting.js +10 -18
- package/dist/settings/widgets/mininum-slice-percent.js +10 -18
- package/dist/settings/widgets/numeric-summary-item.js +25 -33
- package/dist/settings/widgets/select-line-type/index.js +10 -17
- package/dist/settings/widgets/select-table/index.js +9 -16
- package/dist/settings/widgets/select-view/index.js +20 -28
- package/dist/settings/widgets/stack.js +14 -22
- package/dist/settings/widgets/summary-method-setting.js +17 -25
- package/dist/settings/widgets/summary-settings.js +74 -82
- package/dist/settings/widgets/switch/index.js +9 -16
- package/dist/settings/widgets/text-horizontal-settings.js +15 -23
- package/dist/settings/widgets/time-picker.js +29 -37
- package/dist/settings/widgets/title-settings/index.js +29 -37
- package/dist/settings/widgets/title-settings/title-text.js +5 -12
- package/dist/settings/widgets/x-axios.js +0 -1
- package/dist/settings/widgets/y-axis-group-settings.js +64 -72
- package/dist/utils/cell-format-utils.js +17 -27
- package/dist/utils/cell-value-utils.js +4 -11
- package/dist/utils/chart-utils/base-utils.js +324 -332
- package/dist/utils/chart-utils/index.js +28 -41
- package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +77 -84
- package/dist/utils/chart-utils/original-data-utils/card-calculator.js +13 -20
- package/dist/utils/chart-utils/original-data-utils/combination-calculator.js +45 -52
- package/dist/utils/chart-utils/original-data-utils/compare-bar-chart-calculator.js +21 -28
- package/dist/utils/chart-utils/original-data-utils/completeness-calculator.js +33 -40
- package/dist/utils/chart-utils/original-data-utils/dashboard-calculator.js +16 -23
- package/dist/utils/chart-utils/original-data-utils/index.js +50 -57
- package/dist/utils/chart-utils/original-data-utils/mirror-calculator.js +19 -26
- package/dist/utils/chart-utils/original-data-utils/pivot-table-calculator.js +90 -96
- package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +19 -26
- package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +31 -38
- package/dist/utils/chart-utils/sql-statistics-utils.js +229 -237
- package/dist/utils/chart.js +9 -17
- package/dist/utils/collaborator-manager.js +3 -9
- package/dist/utils/collaborator-utils.js +19 -31
- package/dist/utils/collaborator.js +6 -15
- package/dist/utils/color-utils.js +18 -29
- package/dist/utils/column-utils.js +77 -104
- package/dist/utils/common-utils.js +28 -53
- package/dist/utils/concurrency-manager.js +1 -7
- package/dist/utils/contexts.js +5 -12
- package/dist/utils/date-translate.js +12 -20
- package/dist/utils/digital-sign-utils.js +7 -14
- package/dist/utils/event-bus.js +1 -7
- package/dist/utils/hotkey.js +5 -11
- package/dist/utils/index.js +54 -221
- package/dist/utils/key-generator.js +2 -9
- package/dist/utils/map.js +22 -31
- package/dist/utils/object-utils.js +2 -8
- package/dist/utils/options-utils.js +10 -18
- package/dist/utils/row-record-utils.js +166 -178
- package/dist/utils/row-utils.js +27 -38
- package/dist/utils/search.js +24 -32
- package/dist/utils/sql/chart-data-sql.js +106 -112
- package/dist/utils/sql/column-2-sql-column.js +158 -168
- package/dist/utils/sql/index.js +3 -27
- package/dist/utils/trend-utils.js +39 -47
- package/dist/view/index.js +90 -96
- package/dist/view/title/index.js +16 -24
- package/dist/view/wrapper/area-group.js +45 -53
- package/dist/view/wrapper/area.js +43 -51
- package/dist/view/wrapper/bar-compare.js +38 -46
- package/dist/view/wrapper/bar-custom-stack.js +39 -47
- package/dist/view/wrapper/bar-group.js +45 -53
- package/dist/view/wrapper/bar-stack.js +48 -56
- package/dist/view/wrapper/bar.js +40 -48
- package/dist/view/wrapper/basic-number-card.js +26 -34
- package/dist/view/wrapper/chart-component.js +123 -131
- package/dist/view/wrapper/combination.js +55 -63
- package/dist/view/wrapper/completeness-group.js +40 -48
- package/dist/view/wrapper/completeness.js +36 -44
- package/dist/view/wrapper/dashboard.js +39 -44
- package/dist/view/wrapper/funnel.js +40 -43
- package/dist/view/wrapper/heat-map.js +62 -70
- package/dist/view/wrapper/horizontal-bar-group.js +52 -60
- package/dist/view/wrapper/horizontal-bar-stack.js +47 -55
- package/dist/view/wrapper/horizontal-bar.js +41 -49
- package/dist/view/wrapper/index.js +107 -115
- package/dist/view/wrapper/line-group.js +43 -51
- package/dist/view/wrapper/line.js +42 -50
- package/dist/view/wrapper/map-bubble.js +40 -48
- package/dist/view/wrapper/map-world-bubble.js +39 -47
- package/dist/view/wrapper/map-world.js +41 -49
- package/dist/view/wrapper/map.js +42 -50
- package/dist/view/wrapper/mirror.js +41 -49
- package/dist/view/wrapper/pie.js +44 -52
- package/dist/view/wrapper/ring.js +49 -57
- package/dist/view/wrapper/scatter.js +42 -50
- package/dist/view/wrapper/table/index.js +14 -22
- package/dist/view/wrapper/table/one-dimension-table-no-numeric-columns.js +49 -57
- package/dist/view/wrapper/table/one-dimension-table-with-numeric-columns.js +53 -61
- package/dist/view/wrapper/table/pivot-table-display-name.js +82 -90
- package/dist/view/wrapper/table/two-dimension-table.js +85 -93
- package/dist/view/wrapper/table-element/components/dataset-utils.js +23 -36
- package/dist/view/wrapper/table-element/components/formatter.js +90 -99
- package/dist/view/wrapper/table-element/components/formatters/FileFormatter/index.js +23 -32
- package/dist/view/wrapper/table-element/components/formatters/formula-formatter.js +9 -16
- package/dist/view/wrapper/table-element/components/formatters/link-formatter.js +90 -97
- package/dist/view/wrapper/table-element/components/formula-formatter.js +9 -16
- package/dist/view/wrapper/table-element/components/link-formatter.js +90 -97
- package/dist/view/wrapper/table-element/components/record.js +13 -20
- package/dist/view/wrapper/table-element/components/records-body.js +9 -17
- package/dist/view/wrapper/table-element/components/records-header/index.js +7 -15
- package/dist/view/wrapper/table-element/components/records-header/records-header-cell.js +8 -16
- package/dist/view/wrapper/table-element/components/records.js +25 -33
- package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +5 -12
- package/dist/view/wrapper/table-element/components/utils.js +6 -16
- package/dist/view/wrapper/table-element/components/value-display-utils.js +4 -11
- package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.js +6 -13
- package/dist/view/wrapper/table-element/index.js +18 -26
- package/dist/view/wrapper/treemap.js +38 -46
- package/dist/view/wrapper/trend.js +58 -66
- package/package.json +5 -5
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var d3 = _interopRequireWildcard(require("d3"));
|
|
13
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
14
|
-
var _constants = require("../../constants");
|
|
15
|
-
var _utils = require("../../utils");
|
|
16
|
-
var _intl = _interopRequireDefault(require("../../intl"));
|
|
17
|
-
var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
|
|
18
|
-
var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
19
|
-
class Completeness extends _chartComponent.default {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { debounce } from 'lodash-es';
|
|
4
|
+
import * as d3 from 'd3';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { CHART_THEME_COLOR } from '../../constants';
|
|
7
|
+
import { BaseUtils } from '../../utils';
|
|
8
|
+
import intl from '../../intl';
|
|
9
|
+
import ToolTip from '../../components/tooltip';
|
|
10
|
+
import ChartComponent from './chart-component';
|
|
11
|
+
class Completeness extends ChartComponent {
|
|
20
12
|
constructor(props) {
|
|
21
13
|
super(props);
|
|
22
14
|
this.handleResize = () => {
|
|
@@ -42,7 +34,7 @@ class Completeness extends _chartComponent.default {
|
|
|
42
34
|
let {
|
|
43
35
|
result: data
|
|
44
36
|
} = this.props;
|
|
45
|
-
data =
|
|
37
|
+
data = BaseUtils.formatEmptyName(data, '', intl.get('Empty'));
|
|
46
38
|
if (!Array.isArray(data)) return;
|
|
47
39
|
this.draw(data);
|
|
48
40
|
};
|
|
@@ -52,7 +44,7 @@ class Completeness extends _chartComponent.default {
|
|
|
52
44
|
globalTheme,
|
|
53
45
|
chartColorTheme
|
|
54
46
|
} = this.props;
|
|
55
|
-
const theme =
|
|
47
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
56
48
|
const {
|
|
57
49
|
y_axis_auto_range,
|
|
58
50
|
y_axis_min,
|
|
@@ -66,7 +58,7 @@ class Completeness extends _chartComponent.default {
|
|
|
66
58
|
insertPadding,
|
|
67
59
|
marginRight
|
|
68
60
|
} = this.chartBoundingClientRect;
|
|
69
|
-
const colors =
|
|
61
|
+
const colors = BaseUtils.getCurrentTheme(chartColorTheme).colors;
|
|
70
62
|
this.markFirstOrLast(data, 'last');
|
|
71
63
|
const series = d3.stack().keys(d3.union(data.map(d => d.group_name))).value((_ref, key) => {
|
|
72
64
|
var _group$get;
|
|
@@ -86,14 +78,14 @@ class Completeness extends _chartComponent.default {
|
|
|
86
78
|
const {
|
|
87
79
|
width: axisWidth
|
|
88
80
|
} = g.node().getBoundingClientRect();
|
|
89
|
-
g.attr('transform',
|
|
81
|
+
g.attr('transform', `translate(${axisWidth}, 0)`).attr('data-axisWidth', axisWidth);
|
|
90
82
|
this.checkTickOverlap(g, 'yAxis');
|
|
91
83
|
});
|
|
92
84
|
|
|
93
85
|
// X axis
|
|
94
86
|
const niceEnd = d3.nice(0, d3.max(newSeries, d => d[1].sumValue), 5)[1];
|
|
95
87
|
const x = d3.scaleLinear().domain(y_axis_auto_range ? [0, niceEnd] : [y_axis_min || 0, y_axis_max || niceEnd]).range([Number(yAxis.node().getAttribute('data-axisWidth')), chartWidth - insertPadding - marginRight]);
|
|
96
|
-
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform',
|
|
88
|
+
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform', `translate(0, ${chartHeight - insertPadding})`).call(d3.axisBottom(x).tickSizeInner(0).ticks(5)).call(g => {
|
|
97
89
|
g.selectAll('.domain').remove();
|
|
98
90
|
g.selectAll('.tick line').node() && g.selectAll('.tick line').node().remove(); // delete the first line
|
|
99
91
|
g.selectAll('.tick line').attr('y2', -(chartHeight - insertPadding * 2)).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
@@ -102,7 +94,7 @@ class Completeness extends _chartComponent.default {
|
|
|
102
94
|
});
|
|
103
95
|
|
|
104
96
|
// Rect group
|
|
105
|
-
const contentWrapper = this.chart.append('g').attr('class', 'content-wrapper').attr('transform',
|
|
97
|
+
const contentWrapper = this.chart.append('g').attr('class', 'content-wrapper').attr('transform', `translate(${Number(yAxis.node().getAttribute('data-axisWidth'))}, 0)`);
|
|
106
98
|
contentWrapper.selectAll().data(newSeries).join('g').attr('data-completedRate', d => {
|
|
107
99
|
const restData = d[1].find(item => item.key === 'rest');
|
|
108
100
|
const completedRate = restData.data.completedRate;
|
|
@@ -179,12 +171,12 @@ class Completeness extends _chartComponent.default {
|
|
|
179
171
|
const {
|
|
180
172
|
chartColorTheme
|
|
181
173
|
} = this.props;
|
|
182
|
-
const colors =
|
|
174
|
+
const colors = BaseUtils.getCurrentTheme(chartColorTheme).colors;
|
|
183
175
|
const newTooltipData = {
|
|
184
176
|
title: event.currentTarget.getAttribute('data-tooltipTitle'),
|
|
185
177
|
items: [{
|
|
186
178
|
color: event.currentTarget.getAttribute('data-tooltipTitle') === 'rest' ? '#bdbdbd' : colors[0],
|
|
187
|
-
name:
|
|
179
|
+
name: intl.get(event.currentTarget.getAttribute('data-tooltipName')),
|
|
188
180
|
value: event.currentTarget.getAttribute('data-value')
|
|
189
181
|
}]
|
|
190
182
|
};
|
|
@@ -279,7 +271,7 @@ class Completeness extends _chartComponent.default {
|
|
|
279
271
|
}).on('mouseleave', event => {
|
|
280
272
|
this.hiddenTooltip();
|
|
281
273
|
this.handleAcitveAndInActiveState('active', event);
|
|
282
|
-
}).append('xhtml:div').attr('style',
|
|
274
|
+
}).append('xhtml:div').attr('style', `width: 100%; height: 100%; background-color: ${rect.getAttribute('fill')}; border-radius: 0px ${xWidth * borderRadius}px ${xWidth * borderRadius}px 0px`);
|
|
283
275
|
|
|
284
276
|
// Remove old rect
|
|
285
277
|
d3.select(rect).remove();
|
|
@@ -294,12 +286,12 @@ class Completeness extends _chartComponent.default {
|
|
|
294
286
|
super.componentDidMount();
|
|
295
287
|
this.createChart();
|
|
296
288
|
this.drawChart();
|
|
297
|
-
this.debouncedHandleResize =
|
|
289
|
+
this.debouncedHandleResize = debounce(this.handleResize, 300);
|
|
298
290
|
window.addEventListener('resize', this.debouncedHandleResize);
|
|
299
291
|
}
|
|
300
292
|
componentDidUpdate(prevProps) {
|
|
301
293
|
super.componentDidUpdate(prevProps);
|
|
302
|
-
if (
|
|
294
|
+
if (BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
303
295
|
this.destroyChart();
|
|
304
296
|
this.createChart();
|
|
305
297
|
this.drawChart();
|
|
@@ -318,13 +310,13 @@ class Completeness extends _chartComponent.default {
|
|
|
318
310
|
tooltipData,
|
|
319
311
|
toolTipPosition
|
|
320
312
|
} = this.state;
|
|
321
|
-
return /*#__PURE__*/
|
|
313
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
322
314
|
ref: ref => this.container = ref,
|
|
323
|
-
className: (
|
|
315
|
+
className: classNames('sea-chart-container', {
|
|
324
316
|
'show-x-axis-label': this.isShowHorizontalAxisLabel(chart),
|
|
325
317
|
'show-y-axis-label': this.isShowVerticalAxisLabel(chart)
|
|
326
318
|
})
|
|
327
|
-
}, /*#__PURE__*/
|
|
319
|
+
}, /*#__PURE__*/React.createElement(ToolTip, {
|
|
328
320
|
tooltipData: tooltipData,
|
|
329
321
|
toolTipPosition: toolTipPosition,
|
|
330
322
|
chart: this.chart
|
|
@@ -332,15 +324,15 @@ class Completeness extends _chartComponent.default {
|
|
|
332
324
|
}
|
|
333
325
|
}
|
|
334
326
|
Completeness.propTypes = {
|
|
335
|
-
canvasStyle:
|
|
336
|
-
chart:
|
|
337
|
-
groupbyColumn:
|
|
338
|
-
columnGroupbyColumn:
|
|
339
|
-
summaryColumn:
|
|
340
|
-
result:
|
|
341
|
-
tables:
|
|
342
|
-
globalTheme:
|
|
343
|
-
chartColorTheme:
|
|
344
|
-
toggleRecords:
|
|
327
|
+
canvasStyle: PropTypes.object,
|
|
328
|
+
chart: PropTypes.object,
|
|
329
|
+
groupbyColumn: PropTypes.object,
|
|
330
|
+
columnGroupbyColumn: PropTypes.object,
|
|
331
|
+
summaryColumn: PropTypes.object,
|
|
332
|
+
result: PropTypes.array,
|
|
333
|
+
tables: PropTypes.array,
|
|
334
|
+
globalTheme: PropTypes.string,
|
|
335
|
+
chartColorTheme: PropTypes.string,
|
|
336
|
+
toggleRecords: PropTypes.func
|
|
345
337
|
};
|
|
346
|
-
|
|
338
|
+
export default Completeness;
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
var _lodashEs = require("lodash-es");
|
|
12
|
-
var d3 = _interopRequireWildcard(require("d3"));
|
|
13
|
-
var _constants = require("../../constants");
|
|
14
|
-
var _utils = require("../../utils");
|
|
15
|
-
var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
|
|
16
|
-
var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
17
|
-
class Dashboard extends _chartComponent.default {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { debounce } from 'lodash-es';
|
|
4
|
+
import * as d3 from 'd3';
|
|
5
|
+
import { CHART_THEME_COLOR } from '../../constants';
|
|
6
|
+
import { BaseUtils, isFunction } from '../../utils';
|
|
7
|
+
import ToolTip from '../../components/tooltip';
|
|
8
|
+
import ChartComponent from './chart-component';
|
|
9
|
+
class Dashboard extends ChartComponent {
|
|
18
10
|
constructor(props) {
|
|
19
11
|
super(props);
|
|
20
12
|
this.handleClickNumber = () => {
|
|
@@ -36,7 +28,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
36
28
|
this.componentDidMount = () => {
|
|
37
29
|
this.createChart();
|
|
38
30
|
this.drawChart();
|
|
39
|
-
this.debouncedHandleResize =
|
|
31
|
+
this.debouncedHandleResize = debounce(this.handleResize, 300);
|
|
40
32
|
window.addEventListener('resize', this.debouncedHandleResize);
|
|
41
33
|
};
|
|
42
34
|
this.handleResize = () => {
|
|
@@ -59,7 +51,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
59
51
|
customRender
|
|
60
52
|
} = this.props;
|
|
61
53
|
this.draw(data);
|
|
62
|
-
|
|
54
|
+
isFunction(customRender) && customRender(this.chart);
|
|
63
55
|
};
|
|
64
56
|
this.draw = data => {
|
|
65
57
|
const {
|
|
@@ -89,7 +81,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
89
81
|
const top = height / 2 + insertPadding;
|
|
90
82
|
const offsetX = (chartWidth - insertPadding - insertPadding - width) / 2;
|
|
91
83
|
const offsetY = (chartHeight - insertPadding - insertPadding - height) / 2;
|
|
92
|
-
d3.select(g.node().parentNode).attr('transform',
|
|
84
|
+
d3.select(g.node().parentNode).attr('transform', `translate(${left + offsetX}, ${top + offsetY})`);
|
|
93
85
|
|
|
94
86
|
// Draw uncompleted path
|
|
95
87
|
if (formatValue < 100) {
|
|
@@ -111,14 +103,17 @@ class Dashboard extends _chartComponent.default {
|
|
|
111
103
|
const {
|
|
112
104
|
globalTheme
|
|
113
105
|
} = this.props;
|
|
114
|
-
const theme =
|
|
106
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
115
107
|
const ticks = Array.from({
|
|
116
108
|
length: 51
|
|
117
109
|
}, (_, i) => i);
|
|
118
110
|
const lineInnerRadius = arc.innerRadius()();
|
|
119
111
|
const x = d3.scaleBand().domain(ticks).range([startAngle, endAngle]).paddingInner(1).paddingOuter(0);
|
|
120
|
-
this.chart.append('g').attr('class', 'ticks-line-wrapper').attr('transform',
|
|
121
|
-
return
|
|
112
|
+
this.chart.append('g').attr('class', 'ticks-line-wrapper').attr('transform', `translate(${left + offsetX}, ${top + offsetY})`).selectAll().data(x.domain()).join('g').attr('transform', (d, index) => {
|
|
113
|
+
return `
|
|
114
|
+
rotate(${x(d) * 180 / Math.PI - 90})
|
|
115
|
+
translate(${lineInnerRadius},0)
|
|
116
|
+
`;
|
|
122
117
|
}).attr('data-value', d => d).call(g => {
|
|
123
118
|
g.nodes().forEach(group => {
|
|
124
119
|
const value = Number(group.getAttribute('data-value'));
|
|
@@ -131,16 +126,16 @@ class Dashboard extends _chartComponent.default {
|
|
|
131
126
|
const rotateVal = ((x(value) + x.bandwidth() / 2) * 180 / Math.PI - 90) * -1; // -1 is Rotate the text
|
|
132
127
|
d3.select(group).append('text').attr('transform', () => {
|
|
133
128
|
if (x(value) <= -(Math.PI / 4)) {
|
|
134
|
-
return
|
|
129
|
+
return `translate(-25,-5) rotate(${rotateVal})`;
|
|
135
130
|
}
|
|
136
131
|
if (x(value) <= 0) {
|
|
137
|
-
return
|
|
132
|
+
return `translate(-30,-5) rotate(${rotateVal})`;
|
|
138
133
|
}
|
|
139
134
|
if (x(value) <= Math.PI / 4) {
|
|
140
|
-
return
|
|
135
|
+
return `translate(-30,-2) rotate(${rotateVal})`;
|
|
141
136
|
}
|
|
142
137
|
if (x(value) <= Math.PI) {
|
|
143
|
-
return
|
|
138
|
+
return `translate(-30,3) rotate(${rotateVal})`;
|
|
144
139
|
}
|
|
145
140
|
}).text(text).attr('fill', theme.textColor);
|
|
146
141
|
}
|
|
@@ -155,7 +150,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
155
150
|
|
|
156
151
|
// Pointer
|
|
157
152
|
d3.select(wrapper).append('g').attr('class', 'pointer-wrapper').append('rect').attr('x', -2).attr('y', -78).attr('width', 6).attr('height', 70).attr('fill', '#1890FF').attr('rx', 3).attr('transform', () => {
|
|
158
|
-
return
|
|
153
|
+
return `rotate(${rotate})`;
|
|
159
154
|
});
|
|
160
155
|
};
|
|
161
156
|
this.drawUncompletedPath = (wrapper, innerRadius, outerRadius, startAngle, endAngle) => {
|
|
@@ -170,7 +165,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
170
165
|
const {
|
|
171
166
|
name
|
|
172
167
|
} = chart.config;
|
|
173
|
-
const theme =
|
|
168
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
174
169
|
const {
|
|
175
170
|
height: chartHeight
|
|
176
171
|
} = this.chartBoundingClientRect;
|
|
@@ -219,7 +214,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
219
214
|
totalWrapper.append('text').attr('fill', label_font_color || theme.textColor).attr('font-size', card_label_font_size || (chartHeight > 240 ? 20 : 12)).attr('font-weight', label_font_weight).attr('text-anchor', titleAlign.textAnchor).attr('x', titleAlign.x).text(name).attr('dy', 50);
|
|
220
215
|
|
|
221
216
|
// total
|
|
222
|
-
totalWrapper.append('text').attr('fill', font_color || theme.textColor).attr('font-size', font_size || (chartHeight > 240 ? 36 : 16)).attr('font-weight', font_weight).attr('text-anchor', numberAlign.textAnchor).attr('x', numberAlign.x).text(
|
|
217
|
+
totalWrapper.append('text').attr('fill', font_color || theme.textColor).attr('font-size', font_size || (chartHeight > 240 ? 36 : 16)).attr('font-weight', font_weight).attr('text-anchor', numberAlign.textAnchor).attr('x', numberAlign.x).text(`${formatValue}%`).attr('dy', 90).style('cursor', toggleRecords ? 'pointer' : 'default').on('click', () => {
|
|
223
218
|
if (toggleRecords) {
|
|
224
219
|
this.handleClickNumber();
|
|
225
220
|
}
|
|
@@ -233,7 +228,7 @@ class Dashboard extends _chartComponent.default {
|
|
|
233
228
|
}
|
|
234
229
|
componentDidUpdate(prevProps) {
|
|
235
230
|
super.componentDidUpdate(prevProps);
|
|
236
|
-
if (
|
|
231
|
+
if (BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
237
232
|
this.destroyChart();
|
|
238
233
|
this.createChart();
|
|
239
234
|
this.drawChart();
|
|
@@ -248,10 +243,10 @@ class Dashboard extends _chartComponent.default {
|
|
|
248
243
|
tooltipData,
|
|
249
244
|
toolTipPosition
|
|
250
245
|
} = this.state;
|
|
251
|
-
return /*#__PURE__*/
|
|
246
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
252
247
|
ref: ref => this.container = ref,
|
|
253
248
|
className: "sea-chart-container"
|
|
254
|
-
}, /*#__PURE__*/
|
|
249
|
+
}, /*#__PURE__*/React.createElement(ToolTip, {
|
|
255
250
|
tooltipData: tooltipData,
|
|
256
251
|
toolTipPosition: toolTipPosition,
|
|
257
252
|
chart: this.chart
|
|
@@ -259,15 +254,15 @@ class Dashboard extends _chartComponent.default {
|
|
|
259
254
|
}
|
|
260
255
|
}
|
|
261
256
|
Dashboard.propTypes = {
|
|
262
|
-
canvasStyle:
|
|
263
|
-
chart:
|
|
264
|
-
groupbyColumn:
|
|
265
|
-
summaryColumn:
|
|
266
|
-
result:
|
|
267
|
-
tables:
|
|
268
|
-
globalTheme:
|
|
269
|
-
chartColorTheme:
|
|
270
|
-
toggleRecords:
|
|
271
|
-
customRender:
|
|
257
|
+
canvasStyle: PropTypes.object,
|
|
258
|
+
chart: PropTypes.object,
|
|
259
|
+
groupbyColumn: PropTypes.object,
|
|
260
|
+
summaryColumn: PropTypes.object,
|
|
261
|
+
result: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),
|
|
262
|
+
tables: PropTypes.array,
|
|
263
|
+
globalTheme: PropTypes.string,
|
|
264
|
+
chartColorTheme: PropTypes.string,
|
|
265
|
+
toggleRecords: PropTypes.func,
|
|
266
|
+
customRender: PropTypes.func
|
|
272
267
|
};
|
|
273
|
-
|
|
268
|
+
export default Dashboard;
|
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _lodashEs = require("lodash-es");
|
|
12
|
-
var d3 = _interopRequireWildcard(require("d3"));
|
|
13
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
14
|
-
var _constants = require("../../constants");
|
|
15
|
-
var _utils = require("../../utils");
|
|
16
|
-
var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
|
|
17
|
-
var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
18
|
-
class Funnel extends _chartComponent.default {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { debounce } from 'lodash-es';
|
|
4
|
+
import * as d3 from 'd3';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { FUNNEL_LABEL_FORMAT, FUNNEL_LABEL_POSITIONS, CHART_THEME_COLOR } from '../../constants';
|
|
7
|
+
import { BaseUtils, getSortedDataByGivenOrder } from '../../utils';
|
|
8
|
+
import ToolTip from '../../components/tooltip';
|
|
9
|
+
import ChartComponent from './chart-component';
|
|
10
|
+
class Funnel extends ChartComponent {
|
|
19
11
|
constructor(props) {
|
|
20
12
|
super(props);
|
|
21
13
|
this.handleResize = () => {
|
|
@@ -42,7 +34,7 @@ class Funnel extends _chartComponent.default {
|
|
|
42
34
|
funnel_accumulate_values
|
|
43
35
|
} = chart.config;
|
|
44
36
|
if (!x_axis_option_list.length) return;
|
|
45
|
-
const sortedData =
|
|
37
|
+
const sortedData = getSortedDataByGivenOrder(data, x_axis_option_list);
|
|
46
38
|
const formatSortedData = this.formatSortedData(sortedData, funnel_accumulate_values);
|
|
47
39
|
this.draw(formatSortedData);
|
|
48
40
|
};
|
|
@@ -63,7 +55,7 @@ class Funnel extends _chartComponent.default {
|
|
|
63
55
|
items: [{
|
|
64
56
|
color: colorScale(data === null || data === void 0 ? void 0 : data.name),
|
|
65
57
|
name: data === null || data === void 0 ? void 0 : data.name,
|
|
66
|
-
value:
|
|
58
|
+
value: BaseUtils.getSummaryValueDisplayString(summaryColumn, Number(data === null || data === void 0 ? void 0 : data.value), y_axis_summary_method)
|
|
67
59
|
}]
|
|
68
60
|
};
|
|
69
61
|
this.setState({
|
|
@@ -116,8 +108,8 @@ class Funnel extends _chartComponent.default {
|
|
|
116
108
|
height: chartHeight,
|
|
117
109
|
insertPadding
|
|
118
110
|
} = this.chartBoundingClientRect;
|
|
119
|
-
const theme =
|
|
120
|
-
const isInside = funnel_label_position ===
|
|
111
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
112
|
+
const isInside = funnel_label_position === FUNNEL_LABEL_POSITIONS.INSIDE;
|
|
121
113
|
const title = this.getTitle(tables, table_id, y_axis_summary_type, y_axis_column_key || y_axis_summary_column_key);
|
|
122
114
|
const nameDomain = new Set(data.map(item => item.name));
|
|
123
115
|
|
|
@@ -155,7 +147,12 @@ class Funnel extends _chartComponent.default {
|
|
|
155
147
|
points4X = x(0) + nextOffsetX;
|
|
156
148
|
points4Y = y(nextName);
|
|
157
149
|
}
|
|
158
|
-
contentWrapper.append('polygon').attr('opacity', 1).attr('fill', colorScale(curName)).attr('points',
|
|
150
|
+
contentWrapper.append('polygon').attr('opacity', 1).attr('fill', colorScale(curName)).attr('points', `
|
|
151
|
+
${x(0) + curOffsetX},${y(curName)}
|
|
152
|
+
${x(curValue) + curOffsetX},${y(curName)}
|
|
153
|
+
${points3X},${points3Y}
|
|
154
|
+
${points4X},${points4Y}
|
|
155
|
+
`).attr('data-left', `${Math.min(x(0) + curOffsetX, points4X)}`).attr('data-top', `${y(curName)}`).attr('data-name', curName).call(g => {
|
|
159
156
|
Array.from(g.node().parentNode.children).forEach((g, index) => {
|
|
160
157
|
// Add label
|
|
161
158
|
if (funnel_show_labels) {
|
|
@@ -245,20 +242,20 @@ class Funnel extends _chartComponent.default {
|
|
|
245
242
|
toolTipPosition: null
|
|
246
243
|
};
|
|
247
244
|
this.contentFormatterMap = {
|
|
248
|
-
[
|
|
249
|
-
[
|
|
250
|
-
[
|
|
245
|
+
[FUNNEL_LABEL_FORMAT.NUMBER]: obj => obj === null || obj === void 0 ? void 0 : obj.value,
|
|
246
|
+
[FUNNEL_LABEL_FORMAT.PERCENTAGE]: obj => ((obj === null || obj === void 0 ? void 0 : obj.percent) || 0) + '%',
|
|
247
|
+
[FUNNEL_LABEL_FORMAT.NUMBER_AND_PERCENTAGE]: obj => `${obj === null || obj === void 0 ? void 0 : obj.value} (${(obj === null || obj === void 0 ? void 0 : obj.percent) || 0}%)`
|
|
251
248
|
};
|
|
252
249
|
}
|
|
253
250
|
componentDidMount() {
|
|
254
251
|
this.createChart();
|
|
255
252
|
this.drawChart();
|
|
256
|
-
this.debouncedHandleResize =
|
|
253
|
+
this.debouncedHandleResize = debounce(this.handleResize, 300);
|
|
257
254
|
window.addEventListener('resize', this.debouncedHandleResize);
|
|
258
255
|
}
|
|
259
256
|
componentDidUpdate(prevProps) {
|
|
260
257
|
super.componentDidUpdate(prevProps);
|
|
261
|
-
if (
|
|
258
|
+
if (BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
262
259
|
this.destroyChart();
|
|
263
260
|
this.createChart();
|
|
264
261
|
this.drawChart();
|
|
@@ -276,13 +273,13 @@ class Funnel extends _chartComponent.default {
|
|
|
276
273
|
tooltipData,
|
|
277
274
|
toolTipPosition
|
|
278
275
|
} = this.state;
|
|
279
|
-
return /*#__PURE__*/
|
|
276
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
280
277
|
ref: ref => this.container = ref,
|
|
281
|
-
className: (
|
|
278
|
+
className: classNames('sea-chart-container', {
|
|
282
279
|
'show-x-axis-label': this.isShowXAxisLabel(chart),
|
|
283
280
|
'show-y-axis-label': this.isShowYAxisLabel(chart)
|
|
284
281
|
})
|
|
285
|
-
}, /*#__PURE__*/
|
|
282
|
+
}, /*#__PURE__*/React.createElement(ToolTip, {
|
|
286
283
|
tooltipData: tooltipData,
|
|
287
284
|
toolTipPosition: toolTipPosition,
|
|
288
285
|
chart: this.chart
|
|
@@ -290,16 +287,16 @@ class Funnel extends _chartComponent.default {
|
|
|
290
287
|
}
|
|
291
288
|
}
|
|
292
289
|
Funnel.propTypes = {
|
|
293
|
-
canvasStyle:
|
|
294
|
-
chart:
|
|
295
|
-
groupbyColumn:
|
|
296
|
-
columnGroupbyColumn:
|
|
297
|
-
summaryColumn:
|
|
298
|
-
result:
|
|
299
|
-
tables:
|
|
300
|
-
globalTheme:
|
|
301
|
-
chartColorTheme:
|
|
302
|
-
toggleRecords:
|
|
303
|
-
customRender:
|
|
290
|
+
canvasStyle: PropTypes.object,
|
|
291
|
+
chart: PropTypes.object,
|
|
292
|
+
groupbyColumn: PropTypes.object,
|
|
293
|
+
columnGroupbyColumn: PropTypes.object,
|
|
294
|
+
summaryColumn: PropTypes.object,
|
|
295
|
+
result: PropTypes.array,
|
|
296
|
+
tables: PropTypes.array,
|
|
297
|
+
globalTheme: PropTypes.string,
|
|
298
|
+
chartColorTheme: PropTypes.string,
|
|
299
|
+
toggleRecords: PropTypes.func,
|
|
300
|
+
customRender: PropTypes.func
|
|
304
301
|
};
|
|
305
|
-
|
|
302
|
+
export default Funnel;
|