sea-chart 2.0.37 → 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 +20 -69
- package/dist/assets/css/sea-chart-d3-tooltip.css +0 -1
- 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 +31 -37
- 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 +41 -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 +12 -23
- package/dist/components/index.js +7 -48
- package/dist/components/loading/index.js +6 -13
- package/dist/components/number-input/index.js +11 -24
- package/dist/components/pixel-editor/index.js +15 -23
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +13 -16
- package/dist/components/popover/hide-column-popover/hide-column-popover.css +5 -1
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +28 -38
- package/dist/components/popover/sort-popover/sort-popover-widgets/sort-utils.js +9 -18
- package/dist/components/popover/sort-popover/sort-popover.js +58 -69
- 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 +61 -68
- package/dist/components/tooltip/index.js +39 -28
- 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 +13 -16
- 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 +2 -7
- package/dist/locale/lang/en.js +2 -7
- package/dist/locale/lang/es.js +2 -7
- package/dist/locale/lang/fr.js +2 -7
- package/dist/locale/lang/pt.js +2 -7
- package/dist/locale/lang/ru.js +2 -7
- package/dist/locale/lang/zh_CN.js +2 -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 +14 -17
- 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 +14 -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 +66 -73
- 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 +51 -59
- package/dist/settings/basic-number-card/data-settings.js +50 -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 -64
- package/dist/settings/combination-settings/index.js +3 -20
- package/dist/settings/combination-settings/style-settings.js +67 -75
- 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 +44 -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 +22 -30
- 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 +57 -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 +49 -58
- package/dist/settings/table-element-settings/data-settings.js +21 -29
- package/dist/settings/table-element-settings/index.css +1 -31
- package/dist/settings/table-element-settings/index.js +2 -13
- package/dist/settings/table-settings/data-settings.js +113 -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 +44 -52
- 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 +59 -66
- 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 +27 -34
- package/dist/settings/widgets/data-filter/index.js +59 -59
- 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 +52 -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 +75 -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 +65 -72
- package/dist/utils/cell-format-utils.js +25 -33
- package/dist/utils/cell-value-utils.js +4 -11
- package/dist/utils/chart-utils/base-utils.js +467 -367
- package/dist/utils/chart-utils/index.js +29 -40
- package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +78 -85
- package/dist/utils/chart-utils/original-data-utils/card-calculator.js +20 -21
- 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 +28 -26
- 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 +94 -97
- package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +19 -25
- package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +50 -36
- package/dist/utils/chart-utils/sql-statistics-utils.js +385 -388
- 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 +88 -102
- package/dist/utils/common-utils.js +28 -53
- package/dist/utils/concurrency-manager.js +1 -7
- package/dist/utils/contexts.js +7 -11
- 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 +73 -219
- 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 +251 -183
- 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 +162 -172
- package/dist/utils/sql/index.js +3 -27
- package/dist/utils/trend-utils.js +50 -45
- package/dist/view/index.css +2 -8
- package/dist/view/index.js +102 -103
- package/dist/view/title/index.js +16 -24
- package/dist/view/wrapper/area-group.js +57 -57
- package/dist/view/wrapper/area.js +43 -51
- package/dist/view/wrapper/bar-compare.js +56 -48
- package/dist/view/wrapper/bar-custom-stack.js +73 -55
- package/dist/view/wrapper/bar-group.js +94 -73
- package/dist/view/wrapper/bar-stack.js +49 -57
- package/dist/view/wrapper/bar.js +40 -48
- package/dist/view/wrapper/basic-number-card.js +50 -34
- package/dist/view/wrapper/chart-component.js +164 -569
- package/dist/view/wrapper/combination.js +55 -63
- package/dist/view/wrapper/completeness-group.js +140 -93
- package/dist/view/wrapper/completeness.js +36 -44
- package/dist/view/wrapper/dashboard.js +104 -59
- 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 +70 -58
- package/dist/view/wrapper/horizontal-bar-stack.js +48 -56
- package/dist/view/wrapper/horizontal-bar.js +41 -49
- package/dist/view/wrapper/index.js +107 -115
- package/dist/view/wrapper/line-group.js +49 -52
- 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 +40 -47
- package/dist/view/wrapper/map-world.js +42 -49
- package/dist/view/wrapper/map.js +42 -50
- package/dist/view/wrapper/mirror.js +41 -49
- package/dist/view/wrapper/pie.js +45 -53
- package/dist/view/wrapper/ring.js +50 -58
- package/dist/view/wrapper/scatter.js +50 -56
- 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 -92
- 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 -16
- 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 +8 -13
- 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 +30 -43
- package/dist/view/wrapper/treemap.js +38 -46
- package/dist/view/wrapper/trend.js +80 -65
- package/package.json +15 -12
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
-
var _dtableUtils = require("dtable-utils");
|
|
14
|
-
var _constants = require("../../constants");
|
|
15
|
-
var _chartUtils = require("../../utils/chart-utils");
|
|
16
|
-
var _intl = _interopRequireDefault(require("../../intl"));
|
|
17
|
-
var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
|
|
18
|
-
var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
19
|
-
class BarCompare extends _chartComponent.default {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import * as d3 from 'd3';
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
import { getNumberDisplayString } from 'dtable-utils';
|
|
6
|
+
import { CHART_SUMMARY_SHOW, TITLE_AMOUNT, TITLE_INCREASE, CHART_THEME_COLOR } from '../../constants';
|
|
7
|
+
import { BaseUtils } from '../../utils/chart-utils';
|
|
8
|
+
import intl from '../../intl';
|
|
9
|
+
import ToolTip from '../../components/tooltip';
|
|
10
|
+
import ChartComponent from './chart-component';
|
|
11
|
+
class BarCompare extends ChartComponent {
|
|
20
12
|
constructor(props) {
|
|
21
13
|
super(props);
|
|
22
14
|
this.createChart = () => {
|
|
@@ -39,7 +31,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
39
31
|
let {
|
|
40
32
|
result: data
|
|
41
33
|
} = this.props;
|
|
42
|
-
data =
|
|
34
|
+
data = BaseUtils.formatEmptyName(data, '', intl.get('Empty'));
|
|
43
35
|
if (!Array.isArray(data)) return;
|
|
44
36
|
this.draw(data);
|
|
45
37
|
this.renderAxisLabel(this.props.chart, this.props.tables, this.container);
|
|
@@ -51,7 +43,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
51
43
|
chartColorTheme,
|
|
52
44
|
columnGroupbyColumn
|
|
53
45
|
} = this.props;
|
|
54
|
-
const theme =
|
|
46
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
55
47
|
const {
|
|
56
48
|
display_increase,
|
|
57
49
|
y_axis_auto_range = true,
|
|
@@ -68,13 +60,13 @@ class BarCompare extends _chartComponent.default {
|
|
|
68
60
|
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, d3.max(data, d => d.value)] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding]);
|
|
69
61
|
|
|
70
62
|
// Y axis
|
|
71
|
-
this.chart.append('g').attr('class', 'y-axis-wrapper').attr('transform',
|
|
63
|
+
this.chart.append('g').attr('class', 'y-axis-wrapper').attr('transform', `translate(${insertPadding},0)`).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => BaseUtils.getSummaryValueDisplayString(columnGroupbyColumn, d, y_axis_summary_method))).call(g => this.drawYaxis(g, theme));
|
|
72
64
|
const fx = d3.scaleBand().domain(d3.group(data, d => d.name).keys()).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
73
|
-
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(
|
|
65
|
+
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(BaseUtils.getCurrentTheme(chartColorTheme).colors).unknown('#ccc');
|
|
74
66
|
const x = d3.scaleBand().domain(d3.group(data, d => d.group_name).keys()).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
|
|
75
67
|
|
|
76
68
|
// X axis
|
|
77
|
-
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform',
|
|
69
|
+
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform', `translate(0,${chartHeight - insertPadding})`).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
78
70
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
79
71
|
g.selectAll('.tick line').attr('stroke', theme.XAxisColor);
|
|
80
72
|
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
@@ -87,7 +79,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
87
79
|
let [name, dum] = _ref;
|
|
88
80
|
// Each group is horizontally centered
|
|
89
81
|
const offset = (fx.bandwidth() - dum.length * x.bandwidth()) / 2;
|
|
90
|
-
return
|
|
82
|
+
return `translate(${fx(name) + offset},0)`;
|
|
91
83
|
})
|
|
92
84
|
// rect item
|
|
93
85
|
.selectAll().data(_ref2 => {
|
|
@@ -140,7 +132,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
140
132
|
if (isCircle) {
|
|
141
133
|
const circleEl = event.target;
|
|
142
134
|
newTooltipData = {
|
|
143
|
-
title:
|
|
135
|
+
title: intl.get(TITLE_INCREASE),
|
|
144
136
|
items: [{
|
|
145
137
|
color: increase_line_color || '#fbd44a',
|
|
146
138
|
name: circleEl.getAttribute('data-name'),
|
|
@@ -151,7 +143,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
151
143
|
const curGroup = event.target.parentNode;
|
|
152
144
|
const [, data] = curGroup.__data__;
|
|
153
145
|
newTooltipData = {
|
|
154
|
-
title: y_axis_summary_type === 'count' ?
|
|
146
|
+
title: y_axis_summary_type === 'count' ? intl.get(TITLE_AMOUNT) : intl.get(CHART_SUMMARY_SHOW[y_axis_summary_method]),
|
|
155
147
|
items: data.map(item => {
|
|
156
148
|
return {
|
|
157
149
|
color: colorScale(item.group_name),
|
|
@@ -193,10 +185,9 @@ class BarCompare extends _chartComponent.default {
|
|
|
193
185
|
chart,
|
|
194
186
|
globalTheme
|
|
195
187
|
} = this.props;
|
|
196
|
-
const theme =
|
|
188
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
197
189
|
const {
|
|
198
190
|
label_font_size,
|
|
199
|
-
y_axis_auto_range,
|
|
200
191
|
y_axis_min,
|
|
201
192
|
y_axis_max,
|
|
202
193
|
increase_line_color,
|
|
@@ -207,9 +198,26 @@ class BarCompare extends _chartComponent.default {
|
|
|
207
198
|
height: chartHeight,
|
|
208
199
|
insertPadding
|
|
209
200
|
} = this.chartBoundingClientRect;
|
|
201
|
+
if (!Array.isArray(increaseData) || increaseData.length === 0) return;
|
|
210
202
|
const circleData = increaseData.map(() => ({}));
|
|
211
203
|
const lineX = d3.scaleBand().domain(increaseData.map(d => d.name)).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
212
|
-
const
|
|
204
|
+
const autoMin = d3.min(increaseData, d => d.value);
|
|
205
|
+
const autoMax = d3.max(increaseData, d => d.value);
|
|
206
|
+
let min, max;
|
|
207
|
+
if (!(y_axis_min && y_axis_max)) {
|
|
208
|
+
min = autoMin;
|
|
209
|
+
max = autoMax;
|
|
210
|
+
} else {
|
|
211
|
+
min = y_axis_min;
|
|
212
|
+
max = y_axis_max;
|
|
213
|
+
}
|
|
214
|
+
let yDomain = [min, max];
|
|
215
|
+
// avoid y axis range is invalid
|
|
216
|
+
if (min === max) {
|
|
217
|
+
const padding = min === 0 ? 1 : Math.max(Math.abs(min) * 0.1, 0.1);
|
|
218
|
+
yDomain = [min - padding, max + padding];
|
|
219
|
+
}
|
|
220
|
+
const lineY = d3.scaleLinear().domain(yDomain).range([chartHeight - insertPadding, insertPadding]);
|
|
213
221
|
const line = d3.line().x((d, index) => {
|
|
214
222
|
const x = lineX(d.name) + lineX.bandwidth() / 2;
|
|
215
223
|
circleData[index]['x'] = x;
|
|
@@ -232,13 +240,13 @@ class BarCompare extends _chartComponent.default {
|
|
|
232
240
|
// circle label
|
|
233
241
|
if (display_increase_percentage) {
|
|
234
242
|
const curCircleEl = g.node();
|
|
235
|
-
wrapper.append('text').attr('stroke', '#fff').attr('stroke-width', 1).attr('paint-order', 'stroke').attr('fill', theme.labelColor).attr('font-size',
|
|
243
|
+
wrapper.append('text').attr('stroke', '#fff').attr('stroke-width', 1).attr('paint-order', 'stroke').attr('fill', theme.labelColor).attr('font-size', BaseUtils.getLabelFontSize(label_font_size)).text(curCircleEl.getAttribute('data-text')).call(g => {
|
|
236
244
|
const {
|
|
237
245
|
width
|
|
238
246
|
} = g.node().getBoundingClientRect();
|
|
239
247
|
const translateX = Number(curCircleEl.getAttribute('cx')) - width / 2;
|
|
240
248
|
const translateY = Number(curCircleEl.getAttribute('cy')) - 10;
|
|
241
|
-
g.attr('transform',
|
|
249
|
+
g.attr('transform', `translate(${translateX}, ${translateY})`);
|
|
242
250
|
});
|
|
243
251
|
}
|
|
244
252
|
}).on('mouseover', event => {
|
|
@@ -259,7 +267,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
259
267
|
const increaseValue = value.filter(d => (d === null || d === void 0 ? void 0 : d.increase_value) !== undefined) || [{
|
|
260
268
|
increaseValue: 0
|
|
261
269
|
}];
|
|
262
|
-
const formatValue =
|
|
270
|
+
const formatValue = getNumberDisplayString((_increaseValue$ = increaseValue[0]) === null || _increaseValue$ === void 0 ? void 0 : _increaseValue$.increase_value, {
|
|
263
271
|
format: 'percent'
|
|
264
272
|
});
|
|
265
273
|
const data = {
|
|
@@ -298,7 +306,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
298
306
|
}
|
|
299
307
|
componentDidUpdate(prevProps) {
|
|
300
308
|
super.componentDidUpdate(prevProps);
|
|
301
|
-
if (
|
|
309
|
+
if (BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
302
310
|
this.destroyChart();
|
|
303
311
|
this.createChart();
|
|
304
312
|
this.drawChart();
|
|
@@ -315,13 +323,13 @@ class BarCompare extends _chartComponent.default {
|
|
|
315
323
|
tooltipData,
|
|
316
324
|
toolTipPosition
|
|
317
325
|
} = this.state;
|
|
318
|
-
return /*#__PURE__*/
|
|
326
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
319
327
|
ref: ref => this.container = ref,
|
|
320
|
-
className: (
|
|
328
|
+
className: classNames('sea-chart-container', {
|
|
321
329
|
'show-x-axis-label': this.isShowXAxisLabel(chart),
|
|
322
330
|
'show-y-axis-label': this.isShowYAxisLabel(chart)
|
|
323
331
|
})
|
|
324
|
-
}, /*#__PURE__*/
|
|
332
|
+
}, /*#__PURE__*/React.createElement(ToolTip, {
|
|
325
333
|
tooltipData: tooltipData,
|
|
326
334
|
toolTipPosition: toolTipPosition,
|
|
327
335
|
chart: this.chart
|
|
@@ -329,15 +337,15 @@ class BarCompare extends _chartComponent.default {
|
|
|
329
337
|
}
|
|
330
338
|
}
|
|
331
339
|
BarCompare.propTypes = {
|
|
332
|
-
canvasStyle:
|
|
333
|
-
chart:
|
|
334
|
-
groupbyColumn:
|
|
335
|
-
columnGroupbyColumn:
|
|
336
|
-
summaryColumn:
|
|
337
|
-
result:
|
|
338
|
-
tables:
|
|
339
|
-
globalTheme:
|
|
340
|
-
chartColorTheme:
|
|
341
|
-
toggleRecords:
|
|
340
|
+
canvasStyle: PropTypes.object,
|
|
341
|
+
chart: PropTypes.object,
|
|
342
|
+
groupbyColumn: PropTypes.object,
|
|
343
|
+
columnGroupbyColumn: PropTypes.object,
|
|
344
|
+
summaryColumn: PropTypes.object,
|
|
345
|
+
result: PropTypes.array,
|
|
346
|
+
tables: PropTypes.array,
|
|
347
|
+
globalTheme: PropTypes.string,
|
|
348
|
+
chartColorTheme: PropTypes.string,
|
|
349
|
+
toggleRecords: PropTypes.func
|
|
342
350
|
};
|
|
343
|
-
|
|
351
|
+
export default BarCompare;
|
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _slugid = _interopRequireDefault(require("slugid"));
|
|
14
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
-
var _intl = _interopRequireDefault(require("../../intl"));
|
|
16
|
-
var _chartUtils = require("../../utils/chart-utils");
|
|
17
|
-
var _constants = require("../../constants");
|
|
18
|
-
var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
|
|
19
|
-
var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
20
|
-
class BarCustom 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 slugid from 'slugid';
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import intl from '../../intl';
|
|
8
|
+
import { BaseUtils } from '../../utils/chart-utils';
|
|
9
|
+
import { EMPTY_NAME, CHART_THEME_COLOR } from '../../constants';
|
|
10
|
+
import ToolTip from '../../components/tooltip';
|
|
11
|
+
import ChartComponent from './chart-component';
|
|
12
|
+
class BarCustom extends ChartComponent {
|
|
21
13
|
constructor(props) {
|
|
22
14
|
super(props);
|
|
23
|
-
this.handleResize =
|
|
15
|
+
this.handleResize = debounce(() => {
|
|
24
16
|
this.destroyChart();
|
|
25
17
|
this.createChart();
|
|
26
18
|
this.drawChart();
|
|
@@ -45,7 +37,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
45
37
|
let {
|
|
46
38
|
result: data
|
|
47
39
|
} = this.props;
|
|
48
|
-
data =
|
|
40
|
+
data = BaseUtils.formatEmptyName(data, '', intl.get('Empty'));
|
|
49
41
|
if (!Array.isArray(data)) return;
|
|
50
42
|
this.draw(data);
|
|
51
43
|
this.renderAxisLabel(this.props.chart, this.props.tables, this.container);
|
|
@@ -106,7 +98,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
106
98
|
key: itemKey,
|
|
107
99
|
value,
|
|
108
100
|
series,
|
|
109
|
-
slugid:
|
|
101
|
+
slugid: slugid.nice()
|
|
110
102
|
});
|
|
111
103
|
});
|
|
112
104
|
stacksData.push({
|
|
@@ -133,7 +125,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
133
125
|
globalTheme,
|
|
134
126
|
chartColorTheme
|
|
135
127
|
} = this.props;
|
|
136
|
-
const theme =
|
|
128
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
137
129
|
const {
|
|
138
130
|
display_each_block_data
|
|
139
131
|
} = chart.config;
|
|
@@ -148,18 +140,18 @@ class BarCustom extends _chartComponent.default {
|
|
|
148
140
|
insertPadding
|
|
149
141
|
} = this.chartBoundingClientRect;
|
|
150
142
|
const organizedData = this.organizeData(data);
|
|
151
|
-
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(
|
|
143
|
+
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(BaseUtils.getCurrentTheme(chartColorTheme).colors).unknown('#ccc');
|
|
152
144
|
const allSeries = this.getAllSeries(organizedData);
|
|
153
145
|
const niceEnd = d3.nice(0, d3.max(allSeries, d => d[1]), 5)[1];
|
|
154
146
|
const y = d3.scaleLinear().domain([0, niceEnd]).range([chartHeight - insertPadding, insertPadding]);
|
|
155
147
|
|
|
156
148
|
// Y axis
|
|
157
|
-
this.chart.append('g').attr('class', 'y-axis-wrapper').attr('transform',
|
|
149
|
+
this.chart.append('g').attr('class', 'y-axis-wrapper').attr('transform', `translate(${insertPadding},0)`).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
158
150
|
const fx = d3.scaleBand().domain(new Set(organizedData.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
159
151
|
const x = d3.scaleBand().domain(new Set(data.map(d => d.y_axis_type))).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
|
|
160
152
|
|
|
161
153
|
// X axis
|
|
162
|
-
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform',
|
|
154
|
+
this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform', `translate(0,${chartHeight - insertPadding})`).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
163
155
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
164
156
|
g.selectAll('.tick line').attr('stroke', theme.XAxisColor);
|
|
165
157
|
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
@@ -172,7 +164,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
172
164
|
const {
|
|
173
165
|
name
|
|
174
166
|
} = d;
|
|
175
|
-
return
|
|
167
|
+
return `translate(${fx(name)},0)`;
|
|
176
168
|
}).attr('data-transform', d => {
|
|
177
169
|
const {
|
|
178
170
|
name
|
|
@@ -182,16 +174,39 @@ class BarCustom extends _chartComponent.default {
|
|
|
182
174
|
const height = y(d[0][0]) - y(d[0][1]);
|
|
183
175
|
return isNaN(height) ? 0 : height;
|
|
184
176
|
}).attr('fill', d => color(d.key)).attr('data-value', d => d.stackData.value).attr('data-rectId', d => d.stackData.slugId).attr('data-groupName', d => d.stackData.group_name).attr('data-title', d => d.stackData.name).call(g => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
177
|
+
const {
|
|
178
|
+
borderRadius
|
|
179
|
+
} = this.chartBoundingClientRect;
|
|
180
|
+
const xWidth = x.bandwidth();
|
|
181
|
+
const stackGroupNodes = Array.from(g._parents);
|
|
182
|
+
const nameGroups = [];
|
|
183
|
+
stackGroupNodes.forEach(stackGroup => {
|
|
184
|
+
const nameGroup = stackGroup.parentNode;
|
|
185
|
+
if (nameGroup && !nameGroups.includes(nameGroup)) {
|
|
186
|
+
nameGroups.push(nameGroup);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
nameGroups.forEach(nameGroup => {
|
|
190
|
+
const stackGroups = Array.from(nameGroup.children);
|
|
191
|
+
let groupBorderRadius = Infinity;
|
|
192
|
+
stackGroups.forEach(stackGroup => {
|
|
193
|
+
const topRect = Array.from(stackGroup.children).reverse().find(rect => Number(rect.getAttribute('height')) !== 0);
|
|
194
|
+
if (!topRect) return;
|
|
195
|
+
const rectHeight = Number(topRect.getAttribute('height'));
|
|
196
|
+
const computedBorderRadius = Math.min(xWidth * borderRadius, rectHeight / 2, xWidth / 2);
|
|
197
|
+
groupBorderRadius = Math.min(groupBorderRadius, computedBorderRadius);
|
|
198
|
+
});
|
|
199
|
+
if (!Number.isFinite(groupBorderRadius)) {
|
|
200
|
+
groupBorderRadius = 0;
|
|
191
201
|
}
|
|
202
|
+
stackGroups.forEach(stackGroup => {
|
|
203
|
+
const topRect = Array.from(stackGroup.children).reverse().find(rect => Number(rect.getAttribute('height')) !== 0);
|
|
204
|
+
if (!topRect) return;
|
|
205
|
+
this.addMaskRect(stackGroup, topRect, xWidth, color, groupBorderRadius);
|
|
206
|
+
});
|
|
192
207
|
});
|
|
193
208
|
if (display_each_block_data) {
|
|
194
|
-
this.handleLabelToRectCenter(g,
|
|
209
|
+
this.handleLabelToRectCenter(g, xWidth);
|
|
195
210
|
}
|
|
196
211
|
}).on('click', (event, data) => {
|
|
197
212
|
this.props.toggleRecords(data);
|
|
@@ -223,7 +238,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
223
238
|
const {
|
|
224
239
|
label_font_size
|
|
225
240
|
} = chart.config;
|
|
226
|
-
const theme =
|
|
241
|
+
const theme = CHART_THEME_COLOR[globalTheme];
|
|
227
242
|
Array.from(g._parents).forEach(group => {
|
|
228
243
|
Array.from(group.children).forEach(rect => {
|
|
229
244
|
// The height is 0, and the label is not displayed.
|
|
@@ -241,10 +256,13 @@ class BarCustom extends _chartComponent.default {
|
|
|
241
256
|
});
|
|
242
257
|
});
|
|
243
258
|
};
|
|
244
|
-
this.addMaskRect = (topG, rect, xWidth, colorScale) => {
|
|
259
|
+
this.addMaskRect = (topG, rect, xWidth, colorScale, borderRadiusVal) => {
|
|
245
260
|
const {
|
|
246
261
|
borderRadius
|
|
247
262
|
} = this.chartBoundingClientRect;
|
|
263
|
+
const rectHeight = Number(rect.getAttribute('height'));
|
|
264
|
+
const computedBorderRadius = Math.min(xWidth * borderRadius, rectHeight / 2, xWidth / 2);
|
|
265
|
+
const safeBorderRadius = Math.min(borderRadiusVal !== null && borderRadiusVal !== void 0 ? borderRadiusVal : computedBorderRadius, rectHeight / 2, xWidth / 2);
|
|
248
266
|
// Add mask rect
|
|
249
267
|
d3.select(topG).append('foreignObject').attr('class', 'stack-wrapper').attr('opacity', rect.getAttribute('opacity')).attr('x', rect.getAttribute('x')).attr('data-x', topG.parentNode.getAttribute('data-transform')).attr('y', rect.getAttribute('y')).attr('width', xWidth).attr('height', rect.getAttribute('height')).attr('data-groupName', rect.getAttribute('data-groupName')).attr('data-value', rect.getAttribute('data-value')).attr('data-title', rect.getAttribute('data-title')).attr('data-rectId', rect.getAttribute('data-rectId')).on('click', (event, data) => {
|
|
250
268
|
this.props.toggleRecords(data);
|
|
@@ -256,7 +274,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
256
274
|
}).on('mouseleave', (event, data) => {
|
|
257
275
|
this.hiddenTooltip();
|
|
258
276
|
this.handleStacksAcitveAndInActiveState('active', event);
|
|
259
|
-
}).append('xhtml:div').attr('class', 'stack').attr('data-rectId', rect.getAttribute('data-rectId')).attr('style',
|
|
277
|
+
}).append('xhtml:div').attr('class', 'stack').attr('data-rectId', rect.getAttribute('data-rectId')).attr('style', `width: 100%; height: 100%; background-color: ${rect.getAttribute('fill')}; border-radius: ${safeBorderRadius}px ${safeBorderRadius}px 0px 0px`);
|
|
260
278
|
|
|
261
279
|
// Remove old rect
|
|
262
280
|
d3.select(rect).remove();
|
|
@@ -307,10 +325,10 @@ class BarCustom extends _chartComponent.default {
|
|
|
307
325
|
const name = event.currentTarget.getAttribute('data-groupName');
|
|
308
326
|
const value = event.currentTarget.getAttribute('data-value');
|
|
309
327
|
const newTooltipData = {
|
|
310
|
-
title: !title && typeof title !== 'number' ?
|
|
328
|
+
title: !title && typeof title !== 'number' ? intl.get(EMPTY_NAME) : title,
|
|
311
329
|
items: [{
|
|
312
330
|
color: colorScale(name),
|
|
313
|
-
name: !name && typeof name !== 'number' ?
|
|
331
|
+
name: !name && typeof name !== 'number' ? intl.get(EMPTY_NAME) : name,
|
|
314
332
|
value
|
|
315
333
|
}]
|
|
316
334
|
};
|
|
@@ -360,7 +378,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
360
378
|
}
|
|
361
379
|
componentDidUpdate(prevProps) {
|
|
362
380
|
super.componentDidUpdate(prevProps);
|
|
363
|
-
if (
|
|
381
|
+
if (BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
364
382
|
this.destroyChart();
|
|
365
383
|
this.createChart();
|
|
366
384
|
this.drawChart();
|
|
@@ -378,13 +396,13 @@ class BarCustom extends _chartComponent.default {
|
|
|
378
396
|
tooltipData,
|
|
379
397
|
toolTipPosition
|
|
380
398
|
} = this.state;
|
|
381
|
-
return /*#__PURE__*/
|
|
399
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
382
400
|
ref: ref => this.container = ref,
|
|
383
|
-
className: (
|
|
401
|
+
className: classNames('sea-chart-container', {
|
|
384
402
|
'show-x-axis-label': this.isShowXAxisLabel(chart),
|
|
385
403
|
'show-y-axis-label': this.isShowYAxisLabel(chart)
|
|
386
404
|
})
|
|
387
|
-
}, /*#__PURE__*/
|
|
405
|
+
}, /*#__PURE__*/React.createElement(ToolTip, {
|
|
388
406
|
tooltipData: tooltipData,
|
|
389
407
|
toolTipPosition: toolTipPosition,
|
|
390
408
|
chart: this.chart
|
|
@@ -392,15 +410,15 @@ class BarCustom extends _chartComponent.default {
|
|
|
392
410
|
}
|
|
393
411
|
}
|
|
394
412
|
BarCustom.propTypes = {
|
|
395
|
-
canvasStyle:
|
|
396
|
-
chart:
|
|
397
|
-
groupbyColumn:
|
|
398
|
-
columnGroupbyColumn:
|
|
399
|
-
summaryColumn:
|
|
400
|
-
result:
|
|
401
|
-
tables:
|
|
402
|
-
globalTheme:
|
|
403
|
-
chartColorTheme:
|
|
404
|
-
toggleRecords:
|
|
413
|
+
canvasStyle: PropTypes.object,
|
|
414
|
+
chart: PropTypes.object,
|
|
415
|
+
groupbyColumn: PropTypes.object,
|
|
416
|
+
columnGroupbyColumn: PropTypes.object,
|
|
417
|
+
summaryColumn: PropTypes.object,
|
|
418
|
+
result: PropTypes.array,
|
|
419
|
+
tables: PropTypes.array,
|
|
420
|
+
globalTheme: PropTypes.string,
|
|
421
|
+
chartColorTheme: PropTypes.string,
|
|
422
|
+
toggleRecords: PropTypes.func
|
|
405
423
|
};
|
|
406
|
-
|
|
424
|
+
export default BarCustom;
|