sea-chart 0.0.1-beta

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.
Files changed (213) hide show
  1. package/README.md +120 -0
  2. package/dist/assets/icons/area-chart.svg +10 -0
  3. package/dist/assets/icons/bar-chart.svg +12 -0
  4. package/dist/assets/icons/card.svg +22 -0
  5. package/dist/assets/icons/combination-chart.svg +17 -0
  6. package/dist/assets/icons/dtable-logo.svg +16 -0
  7. package/dist/assets/icons/facet-chart.svg +12 -0
  8. package/dist/assets/icons/gauge.svg +18 -0
  9. package/dist/assets/icons/heat-map.svg +14 -0
  10. package/dist/assets/icons/histogram.svg +12 -0
  11. package/dist/assets/icons/line-chart.svg +12 -0
  12. package/dist/assets/icons/map.svg +20 -0
  13. package/dist/assets/icons/pie-chart.svg +11 -0
  14. package/dist/assets/icons/rectangular-tree-diagram.svg +10 -0
  15. package/dist/assets/icons/scatter-chart.svg +15 -0
  16. package/dist/assets/icons/type-change.svg +17 -0
  17. package/dist/assets/img/area-chart.png +0 -0
  18. package/dist/assets/img/area-group-chart.png +0 -0
  19. package/dist/assets/img/bar-group.png +0 -0
  20. package/dist/assets/img/bar-stack.png +0 -0
  21. package/dist/assets/img/bar.png +0 -0
  22. package/dist/assets/img/combination-chart.png +0 -0
  23. package/dist/assets/img/compared-chart.png +0 -0
  24. package/dist/assets/img/completeness-chart.png +0 -0
  25. package/dist/assets/img/custom-bar.png +0 -0
  26. package/dist/assets/img/dashboard-chart.png +0 -0
  27. package/dist/assets/img/group-completeness-chart.png +0 -0
  28. package/dist/assets/img/group_line.png +0 -0
  29. package/dist/assets/img/heat-map.png +0 -0
  30. package/dist/assets/img/horizontal-bar.png +0 -0
  31. package/dist/assets/img/horizontal-group-bar.png +0 -0
  32. package/dist/assets/img/line.png +0 -0
  33. package/dist/assets/img/map-bubble.png +0 -0
  34. package/dist/assets/img/map.png +0 -0
  35. package/dist/assets/img/mirror.png +0 -0
  36. package/dist/assets/img/number-card.png +0 -0
  37. package/dist/assets/img/pie.png +0 -0
  38. package/dist/assets/img/pivot-table.png +0 -0
  39. package/dist/assets/img/ring.png +0 -0
  40. package/dist/assets/img/scatter.png +0 -0
  41. package/dist/assets/img/stacked-horizontal-bar.png +0 -0
  42. package/dist/assets/img/treemap.png +0 -0
  43. package/dist/assets/img/trend-chart.png +0 -0
  44. package/dist/assets/img/world-map-bubble.png +0 -0
  45. package/dist/assets/img/world-map.png +0 -0
  46. package/dist/components/collaborator/index.js +26 -0
  47. package/dist/components/icon/index.css +5 -0
  48. package/dist/components/icon/index.js +24 -0
  49. package/dist/components/index.js +8 -0
  50. package/dist/components/loading/index.css +54 -0
  51. package/dist/components/loading/index.js +12 -0
  52. package/dist/components/number-input/index.js +31 -0
  53. package/dist/components/pixel-editor/index.css +29 -0
  54. package/dist/components/pixel-editor/index.js +38 -0
  55. package/dist/components/select-group/index.css +67 -0
  56. package/dist/components/select-group/index.js +52 -0
  57. package/dist/components/types-dialog/index.css +97 -0
  58. package/dist/components/types-dialog/index.js +116 -0
  59. package/dist/constants/geolocation.js +11 -0
  60. package/dist/constants/index.js +184 -0
  61. package/dist/constants/model.js +187 -0
  62. package/dist/constants/style.js +15 -0
  63. package/dist/constants/type-image.js +59 -0
  64. package/dist/constants/type.js +124 -0
  65. package/dist/context.js +33 -0
  66. package/dist/editor/index.css +0 -0
  67. package/dist/editor/index.js +36 -0
  68. package/dist/index.js +6 -0
  69. package/dist/intl.js +37 -0
  70. package/dist/locale/index.js +18 -0
  71. package/dist/locale/lang/de.js +141 -0
  72. package/dist/locale/lang/en.js +143 -0
  73. package/dist/locale/lang/es.js +141 -0
  74. package/dist/locale/lang/fr.js +141 -0
  75. package/dist/locale/lang/pt.js +141 -0
  76. package/dist/locale/lang/ru.js +141 -0
  77. package/dist/locale/lang/zh_CN.js +143 -0
  78. package/dist/model/area-group.js +41 -0
  79. package/dist/model/area.js +32 -0
  80. package/dist/model/bar-group.js +44 -0
  81. package/dist/model/bar-stack.js +41 -0
  82. package/dist/model/bar.js +38 -0
  83. package/dist/model/base-model.js +9 -0
  84. package/dist/model/basic-number-card.js +22 -0
  85. package/dist/model/chart.js +23 -0
  86. package/dist/model/combination.js +38 -0
  87. package/dist/model/compare-bar.js +39 -0
  88. package/dist/model/completeness-group.js +24 -0
  89. package/dist/model/completeness.js +18 -0
  90. package/dist/model/dashboard.js +16 -0
  91. package/dist/model/generic-model.js +224 -0
  92. package/dist/model/heat-map.js +23 -0
  93. package/dist/model/horizontal-bar.js +38 -0
  94. package/dist/model/horizontal-group-bar.js +43 -0
  95. package/dist/model/index.js +63 -0
  96. package/dist/model/line-group.js +44 -0
  97. package/dist/model/line.js +38 -0
  98. package/dist/model/map-bubble.js +27 -0
  99. package/dist/model/map.js +27 -0
  100. package/dist/model/mirror.js +26 -0
  101. package/dist/model/pie.js +26 -0
  102. package/dist/model/ring.js +26 -0
  103. package/dist/model/scatter.js +19 -0
  104. package/dist/model/stacked-horizontal-bar.js +32 -0
  105. package/dist/model/table.js +23 -0
  106. package/dist/model/tree-map.js +20 -0
  107. package/dist/model/trend.js +24 -0
  108. package/dist/model/user.js +15 -0
  109. package/dist/model/world-map-bubble.js +26 -0
  110. package/dist/model/world-map.js +26 -0
  111. package/dist/settings/advance-bar-settings/data-settings.js +143 -0
  112. package/dist/settings/advance-bar-settings/index.js +3 -0
  113. package/dist/settings/advance-bar-settings/style-settings.js +161 -0
  114. package/dist/settings/bar-settings/data-settings.js +162 -0
  115. package/dist/settings/bar-settings/index.js +3 -0
  116. package/dist/settings/bar-settings/style-settings.js +179 -0
  117. package/dist/settings/basic-number-card/data-settings.js +126 -0
  118. package/dist/settings/basic-number-card/index.js +3 -0
  119. package/dist/settings/basic-number-card/style-settings.js +42 -0
  120. package/dist/settings/combination-settings/data-settings.js +279 -0
  121. package/dist/settings/combination-settings/index.js +3 -0
  122. package/dist/settings/combination-settings/style-settings.js +174 -0
  123. package/dist/settings/dashboard-settings/data-settings.js +179 -0
  124. package/dist/settings/dashboard-settings/index.js +2 -0
  125. package/dist/settings/data-settings.js +73 -0
  126. package/dist/settings/horizontal-bar-settings/data-settings.js +55 -0
  127. package/dist/settings/horizontal-bar-settings/index.js +3 -0
  128. package/dist/settings/horizontal-bar-settings/style-settings.js +46 -0
  129. package/dist/settings/index.css +85 -0
  130. package/dist/settings/index.js +76 -0
  131. package/dist/settings/pie-settings/data-settings.js +146 -0
  132. package/dist/settings/pie-settings/index.js +3 -0
  133. package/dist/settings/pie-settings/style-settings.js +141 -0
  134. package/dist/settings/style-settings.js +118 -0
  135. package/dist/settings/table-settings/data-settings.js +549 -0
  136. package/dist/settings/table-settings/index.js +2 -0
  137. package/dist/settings/time-comparison-settings/data-settings.js +172 -0
  138. package/dist/settings/time-comparison-settings/index.js +3 -0
  139. package/dist/settings/time-comparison-settings/style-settings.js +213 -0
  140. package/dist/settings/widgets/basic-summary/index.css +12 -0
  141. package/dist/settings/widgets/basic-summary/index.js +176 -0
  142. package/dist/settings/widgets/chart-type/index.css +31 -0
  143. package/dist/settings/widgets/chart-type/index.js +59 -0
  144. package/dist/settings/widgets/common-data-settings.js +48 -0
  145. package/dist/settings/widgets/data-filter/index.css +17 -0
  146. package/dist/settings/widgets/data-filter/index.js +89 -0
  147. package/dist/settings/widgets/data-sort.js +44 -0
  148. package/dist/settings/widgets/date-summary-item.js +111 -0
  149. package/dist/settings/widgets/display-values-settings/index.css +13 -0
  150. package/dist/settings/widgets/display-values-settings/index.js +42 -0
  151. package/dist/settings/widgets/divider/index.css +4 -0
  152. package/dist/settings/widgets/divider/index.js +12 -0
  153. package/dist/settings/widgets/font-settings/font-size-settings.js +33 -0
  154. package/dist/settings/widgets/font-settings/font-weight-settings.js +44 -0
  155. package/dist/settings/widgets/font-settings/index.js +3 -0
  156. package/dist/settings/widgets/group-by.js +160 -0
  157. package/dist/settings/widgets/label-color.js +30 -0
  158. package/dist/settings/widgets/min-max-setting.js +52 -0
  159. package/dist/settings/widgets/mininum-slice-percent.js +63 -0
  160. package/dist/settings/widgets/numeric-summary-item.js +90 -0
  161. package/dist/settings/widgets/select-table/index.css +0 -0
  162. package/dist/settings/widgets/select-table/index.js +38 -0
  163. package/dist/settings/widgets/stack.js +50 -0
  164. package/dist/settings/widgets/summary-method-setting.js +66 -0
  165. package/dist/settings/widgets/summary-settings.js +411 -0
  166. package/dist/settings/widgets/switch/index.css +37 -0
  167. package/dist/settings/widgets/switch/index.js +24 -0
  168. package/dist/settings/widgets/text-horizontal-settings.js +25 -0
  169. package/dist/settings/widgets/time-picker.js +173 -0
  170. package/dist/settings/widgets/title-settings/index.js +60 -0
  171. package/dist/settings/widgets/title-settings/title-text.js +25 -0
  172. package/dist/settings/widgets/x-axios.js +0 -0
  173. package/dist/settings/widgets/y-axis-group-settings.js +438 -0
  174. package/dist/utils/cell-format-utils.js +42 -0
  175. package/dist/utils/chart-data-sql.js +606 -0
  176. package/dist/utils/chart-utils.js +1800 -0
  177. package/dist/utils/chart.js +6 -0
  178. package/dist/utils/collaborator-utils.js +39 -0
  179. package/dist/utils/column-2-sql-column.js +551 -0
  180. package/dist/utils/column-utils.js +208 -0
  181. package/dist/utils/custom-g2.js +612 -0
  182. package/dist/utils/date-translate.js +66 -0
  183. package/dist/utils/index.js +48 -0
  184. package/dist/utils/key-generator.js +13 -0
  185. package/dist/utils/object-utils.js +45 -0
  186. package/dist/utils/options-utils.js +60 -0
  187. package/dist/view/index.css +53 -0
  188. package/dist/view/index.js +189 -0
  189. package/dist/view/title/index.css +3 -0
  190. package/dist/view/title/index.js +46 -0
  191. package/dist/view/wrapper/area.js +150 -0
  192. package/dist/view/wrapper/bar-group.js +148 -0
  193. package/dist/view/wrapper/bar.js +138 -0
  194. package/dist/view/wrapper/basic-number-card.js +127 -0
  195. package/dist/view/wrapper/chart-component.js +261 -0
  196. package/dist/view/wrapper/combination.js +399 -0
  197. package/dist/view/wrapper/dashboard.js +164 -0
  198. package/dist/view/wrapper/horizontal-bar-group.js +149 -0
  199. package/dist/view/wrapper/horizontal-bar.js +140 -0
  200. package/dist/view/wrapper/horizontal-component.js +78 -0
  201. package/dist/view/wrapper/index.js +200 -0
  202. package/dist/view/wrapper/line-group.js +145 -0
  203. package/dist/view/wrapper/line.js +157 -0
  204. package/dist/view/wrapper/pie.js +185 -0
  205. package/dist/view/wrapper/ring.js +264 -0
  206. package/dist/view/wrapper/table/index.css +103 -0
  207. package/dist/view/wrapper/table/index.js +31 -0
  208. package/dist/view/wrapper/table/one-dimension-table-no-numeric-columns.js +144 -0
  209. package/dist/view/wrapper/table/one-dimension-table-with-numeric-columns.js +198 -0
  210. package/dist/view/wrapper/table/pivot-table-display-name.js +247 -0
  211. package/dist/view/wrapper/table/two-dimension-table.js +249 -0
  212. package/dist/view/wrapper/treemap.js +186 -0
  213. package/package.json +151 -0
@@ -0,0 +1,179 @@
1
+ import React, { useMemo, useCallback } from 'react';
2
+ import { Label, FormGroup } from 'reactstrap';
3
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
4
+ import Switch from '../widgets/switch';
5
+ import Divider from '../widgets/divider';
6
+ import LabelColor from '../widgets/label-color';
7
+ import MinMaxSetting from '../widgets/min-max-setting';
8
+ import DisplayValuesSettings from '../widgets/display-values-settings';
9
+ import { eventStopPropagation } from '../../utils';
10
+ import { X_LABEL_POSITIONS, Y_LABEL_POSITIONS, LABEL_POSITION_TYPE_SHOW } from '../../constants';
11
+ import intl from '../../intl';
12
+ const StyleSettings = _ref => {
13
+ let {
14
+ chart,
15
+ xLabel,
16
+ yLabel,
17
+ onChange
18
+ } = _ref;
19
+ const xAxisLabelOptions = useMemo(() => {
20
+ return X_LABEL_POSITIONS.map(item => {
21
+ return {
22
+ value: item,
23
+ label: intl.get(LABEL_POSITION_TYPE_SHOW[item])
24
+ };
25
+ });
26
+ }, []);
27
+ const yAxisLabelOptions = useMemo(() => {
28
+ return Y_LABEL_POSITIONS.map(item => {
29
+ return {
30
+ value: item,
31
+ label: intl.get(LABEL_POSITION_TYPE_SHOW[item])
32
+ };
33
+ });
34
+ }, []);
35
+ const onAxisLabelShowChange = useCallback((event, labelKey) => {
36
+ eventStopPropagation(event);
37
+ const {
38
+ config
39
+ } = chart;
40
+ const value = config[labelKey];
41
+ onChange && onChange({
42
+ [labelKey]: !value
43
+ });
44
+ }, [chart, onChange]);
45
+ const onAxisLabelPositionChange = useCallback((option, positionKey) => {
46
+ const position = option.value;
47
+ const {
48
+ config
49
+ } = chart;
50
+ const oldValue = config[positionKey];
51
+ if (position === oldValue) return;
52
+ onChange && onChange({
53
+ [positionKey]: position
54
+ });
55
+ }, [chart, onChange]);
56
+ const onYAxisAutoRangeChange = useCallback(event => {
57
+ eventStopPropagation(event);
58
+ const {
59
+ config
60
+ } = chart;
61
+ const {
62
+ y_axis_auto_range
63
+ } = config;
64
+ onChange && onChange({
65
+ y_axis_auto_range: !y_axis_auto_range
66
+ });
67
+ }, [chart, onChange]);
68
+ const onYAxisMinChange = useCallback(min => {
69
+ const newMin = parseInt(min);
70
+ if (Number.isNaN(newMin)) return;
71
+ const {
72
+ config
73
+ } = chart;
74
+ const {
75
+ y_axis_min
76
+ } = config;
77
+ if (y_axis_min === newMin) return;
78
+ onChange && onChange({
79
+ y_axis_min: newMin
80
+ });
81
+ }, [chart, onChange]);
82
+ const onYAxisMaxChange = useCallback(max => {
83
+ const newMax = parseInt(max);
84
+ if (Number.isNaN(newMax)) return;
85
+ const {
86
+ config
87
+ } = chart;
88
+ const {
89
+ y_axis_max
90
+ } = config;
91
+ if (y_axis_max === newMax) return;
92
+ onChange && onChange({
93
+ y_axis_max: newMax
94
+ });
95
+ }, [chart, onChange]);
96
+ const onLabelColorChange = useCallback((event, color) => {
97
+ eventStopPropagation(event);
98
+ const {
99
+ config
100
+ } = chart;
101
+ const {
102
+ y_axis_label_color
103
+ } = config;
104
+ if (y_axis_label_color === color) return;
105
+ onChange && onChange({
106
+ y_axis_label_color: color
107
+ });
108
+ }, [chart, onChange]);
109
+ const onDisplayValueChange = useCallback(update => {
110
+ onChange && onChange(update);
111
+ }, [onChange]);
112
+ const {
113
+ config
114
+ } = chart;
115
+ const {
116
+ x_axis_show_label,
117
+ x_axis_label_position,
118
+ y_axis_show_label,
119
+ y_axis_label_position,
120
+ y_axis_auto_range = true,
121
+ y_axis_min,
122
+ y_axis_max,
123
+ y_axis_show_value,
124
+ label_font_size,
125
+ y_axis_label_color
126
+ } = config;
127
+ const xAxisLabelPosition = xAxisLabelOptions.find(option => option.value === x_axis_label_position) || xAxisLabelOptions[0];
128
+ const yAxisLabelPosition = yAxisLabelOptions.find(option => option.value === y_axis_label_position) || yAxisLabelOptions[0];
129
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormGroup, {
130
+ className: "sea-chart-parameter-item"
131
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get(xLabel)), /*#__PURE__*/React.createElement(Switch, {
132
+ key: "x_axis_show_label",
133
+ checked: x_axis_show_label || false,
134
+ placeholder: intl.get('Display_title'),
135
+ onChange: event => onAxisLabelShowChange(event, 'x_axis_show_label')
136
+ }), x_axis_show_label && /*#__PURE__*/React.createElement(DTableSelect, {
137
+ value: xAxisLabelPosition,
138
+ options: xAxisLabelOptions,
139
+ onChange: option => onAxisLabelPositionChange(option, 'x_axis_label_position')
140
+ })), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(FormGroup, {
141
+ className: "sea-chart-parameter-item"
142
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get(yLabel)), /*#__PURE__*/React.createElement(Switch, {
143
+ key: "y_axis_show_label",
144
+ checked: y_axis_show_label || false,
145
+ placeholder: intl.get('Display_title'),
146
+ onChange: event => onAxisLabelShowChange(event, 'y_axis_show_label')
147
+ }), y_axis_show_label && /*#__PURE__*/React.createElement("div", {
148
+ className: "sea-chart-parameter-container"
149
+ }, /*#__PURE__*/React.createElement(DTableSelect, {
150
+ value: yAxisLabelPosition,
151
+ classNamePrefix: "chart-y-axis-label-position",
152
+ options: yAxisLabelOptions,
153
+ onChange: option => onAxisLabelPositionChange(option, 'y_axis_label_position')
154
+ })), /*#__PURE__*/React.createElement(Switch, {
155
+ key: "y_axis_auto_range",
156
+ checked: y_axis_auto_range,
157
+ placeholder: intl.get('Auto_range'),
158
+ onChange: onYAxisAutoRangeChange
159
+ }), !y_axis_auto_range && /*#__PURE__*/React.createElement(MinMaxSetting, {
160
+ min: y_axis_min,
161
+ max: y_axis_max,
162
+ onMinChange: onYAxisMinChange,
163
+ onMaxChange: onYAxisMaxChange
164
+ })), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(LabelColor, {
165
+ labelColor: y_axis_label_color,
166
+ onChange: onLabelColorChange
167
+ }), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(DisplayValuesSettings, {
168
+ isShowValueKey: "y_axis_show_value",
169
+ isShowValue: y_axis_show_value,
170
+ fontSizeKey: "label_font_size",
171
+ fontSize: label_font_size,
172
+ onChange: onDisplayValueChange
173
+ }));
174
+ };
175
+ StyleSettings.defaultProps = {
176
+ xLabel: 'X_axis',
177
+ yLabel: 'Y_axis'
178
+ };
179
+ export default StyleSettings;
@@ -0,0 +1,126 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { FormGroup } from 'reactstrap';
3
+ import { COLUMNS_ICON_CONFIG, getTableById } from 'dtable-utils';
4
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
5
+ import CommonDataSettings from '../widgets/common-data-settings';
6
+ import { ChartUtils } from '../../utils';
7
+ import { CHART_SUMMARY_SHOW, CHART_SUMMARY_CALCULATION_METHOD, CHART_SUPPORT_COLUMNS, BASIC_NUMBER_CARD_CALCULATION_METHOD } from '../../constants';
8
+ import intl from '../../intl';
9
+ const DataSettings = _ref => {
10
+ let {
11
+ tables,
12
+ chart,
13
+ onChange
14
+ } = _ref;
15
+ const summaryMethodsOptions = useMemo(() => {
16
+ const numberCardSummaryMethod = [BASIC_NUMBER_CARD_CALCULATION_METHOD, ...CHART_SUMMARY_CALCULATION_METHOD];
17
+ return numberCardSummaryMethod.map(method => {
18
+ return {
19
+ label: /*#__PURE__*/React.createElement("span", {
20
+ className: "select-option-name"
21
+ }, intl.get(CHART_SUMMARY_SHOW[method])),
22
+ value: method
23
+ };
24
+ });
25
+ }, []);
26
+ const selectedTable = useMemo(() => {
27
+ const {
28
+ table_id: selectedTableId
29
+ } = chart.config;
30
+ return getTableById(tables, selectedTableId);
31
+ }, [chart.config, tables]);
32
+ const validColumns = useMemo(() => {
33
+ const columns = selectedTable && Array.isArray(selectedTable.columns) ? selectedTable.columns : [];
34
+ if (!columns || !Array.isArray(columns)) return [];
35
+ return columns.filter(column => CHART_SUPPORT_COLUMNS.includes(column.type));
36
+ }, [selectedTable]);
37
+ const numericColumns = useMemo(() => {
38
+ return validColumns.filter(column => ChartUtils.isNumericSummaryColumn(column));
39
+ }, [validColumns]);
40
+ const numericColumnOptions = useMemo(() => {
41
+ const options = numericColumns.map(column => {
42
+ return {
43
+ value: column,
44
+ label: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
45
+ className: "sea-chart-column-icon"
46
+ }, /*#__PURE__*/React.createElement("i", {
47
+ className: COLUMNS_ICON_CONFIG[column.type]
48
+ })), /*#__PURE__*/React.createElement("span", {
49
+ className: 'select-module select-module-name ml-0'
50
+ }, column.name))
51
+ };
52
+ });
53
+ return [{
54
+ value: {
55
+ key: 'Groupby_null'
56
+ },
57
+ label: /*#__PURE__*/React.createElement("span", {
58
+ className: 'select-module select-module-name null-option-name ml-0'
59
+ }, intl.get('Select_a_column')),
60
+ style: {
61
+ color: 'rgba(0, 0, 0, .25)'
62
+ }
63
+ }, ...options];
64
+ }, [numericColumns]);
65
+ const onSelectColumnChange = useCallback(option => {
66
+ const {
67
+ config
68
+ } = chart;
69
+ const {
70
+ numeric_column_key
71
+ } = config;
72
+ const newColumnKey = option.value.key;
73
+ if (numeric_column_key === newColumnKey) return;
74
+ onChange && onChange({
75
+ numeric_column_key: newColumnKey
76
+ });
77
+ }, [chart, onChange]);
78
+ const onSelectSummaryMethod = useCallback(option => {
79
+ const {
80
+ config
81
+ } = chart;
82
+ const {
83
+ summary_method
84
+ } = config;
85
+ const newSummaryMethod = option.value;
86
+ if (newSummaryMethod === summary_method) return;
87
+ onChange && onChange({
88
+ summary_method: newSummaryMethod
89
+ });
90
+ }, [chart, onChange]);
91
+ const getSelectedMethodOption = useCallback((method, summaryMethodsOptions) => {
92
+ return summaryMethodsOptions.find(m => m.value === method) || summaryMethodsOptions[0];
93
+ }, []);
94
+ const renderSummaryMethod = useCallback(() => {
95
+ const {
96
+ summary_method
97
+ } = chart.config;
98
+ const selectedMethodOption = getSelectedMethodOption(summary_method, summaryMethodsOptions);
99
+ return /*#__PURE__*/React.createElement("div", {
100
+ className: "dtable-plugin-stat-parameter-item"
101
+ }, /*#__PURE__*/React.createElement("label", null, intl.get('Summary_method')), /*#__PURE__*/React.createElement(DTableSelect, {
102
+ value: selectedMethodOption,
103
+ onChange: onSelectSummaryMethod,
104
+ options: summaryMethodsOptions
105
+ }));
106
+ }, [chart, getSelectedMethodOption, onSelectSummaryMethod, summaryMethodsOptions]);
107
+ const {
108
+ config
109
+ } = chart;
110
+ const selectedColumnOption = numericColumnOptions.find(option => option.value.key === config.numeric_column_key) || numericColumnOptions[0];
111
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonDataSettings, {
112
+ chart: chart,
113
+ tables: tables,
114
+ onChange: onChange
115
+ }), /*#__PURE__*/React.createElement(FormGroup, {
116
+ className: "sea-chart-parameter-item"
117
+ }, /*#__PURE__*/React.createElement("label", null, intl.get('Statistic_field')), /*#__PURE__*/React.createElement(DTableSelect, {
118
+ value: selectedColumnOption,
119
+ options: numericColumnOptions,
120
+ placeholder: intl.get('Select_a_column'),
121
+ onChange: onSelectColumnChange
122
+ })), /*#__PURE__*/React.createElement(FormGroup, {
123
+ className: "sea-chart-parameter-item"
124
+ }, renderSummaryMethod()));
125
+ };
126
+ export default DataSettings;
@@ -0,0 +1,3 @@
1
+ import BasicNumberCardDataSettings from './data-settings';
2
+ import BasicNumberCardStyleSettings from './style-settings';
3
+ export { BasicNumberCardDataSettings, BasicNumberCardStyleSettings };
@@ -0,0 +1,42 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ import { Input, FormGroup } from 'reactstrap';
3
+ import intl from '../../intl';
4
+ const StyleSettings = _ref => {
5
+ let {
6
+ chart,
7
+ onChange
8
+ } = _ref;
9
+ const [name, setName] = useState(chart.config.name || '');
10
+ const onChangeName = useCallback(event => {
11
+ const newName = event.target.value;
12
+ if (newName === name) return;
13
+ setName(newName);
14
+ }, [name]);
15
+ const onSaveName = useCallback(() => {
16
+ const oldName = chart.config.name || '';
17
+ if (oldName === name) return;
18
+ onChange && onChange({
19
+ name
20
+ });
21
+ }, [name, chart, onChange]);
22
+ const onKeyDown = useCallback(e => {
23
+ if (e.key === 'Enter') {
24
+ e.preventDefault();
25
+ e.target.blur();
26
+ }
27
+ }, []);
28
+ const {
29
+ config
30
+ } = chart;
31
+ return /*#__PURE__*/React.createElement(FormGroup, {
32
+ className: "sea-chart-parameter-item"
33
+ }, /*#__PURE__*/React.createElement("label", null, intl.get('Label')), /*#__PURE__*/React.createElement(Input, {
34
+ type: "text",
35
+ value: name,
36
+ placeholder: config.name || '',
37
+ onBlur: onSaveName,
38
+ onChange: onChangeName,
39
+ onKeyDown: onKeyDown
40
+ }));
41
+ };
42
+ export default StyleSettings;
@@ -0,0 +1,279 @@
1
+ import React, { useCallback } from 'react';
2
+ import { CellType, DATE_COLUMN_OPTIONS } from 'dtable-utils';
3
+ import CommonDataSettings from '../widgets/common-data-settings';
4
+ import Divider from '../widgets/divider';
5
+ import GroupBy from '../widgets/group-by';
6
+ import Switch from '../widgets/switch';
7
+ import SummarySettings from '../widgets/summary-settings';
8
+ import { eventStopPropagation } from '../../utils';
9
+ import { CHART_SUMMARY_TYPE, CHART_Y_GROUP_TYPE, CHART_SUMMARY_CALCULATION_METHOD, GEOLOCATION_FORMAT_CITY, GEOLOCATION_FORMAT_MAP, COMBINATION_POSITION } from '../../constants';
10
+ import intl from '../../intl';
11
+ const DataSettings = _ref => {
12
+ let {
13
+ chart,
14
+ tables,
15
+ xLabel,
16
+ onChange
17
+ } = _ref;
18
+ const onXAxisColumnChange = useCallback(option => {
19
+ const {
20
+ config
21
+ } = chart;
22
+ const {
23
+ x_axis_column_key
24
+ } = config;
25
+ const column = option.value;
26
+ const {
27
+ key: newXAxisColumnKey,
28
+ type
29
+ } = column;
30
+ const validValue = newXAxisColumnKey === 'Groupby_null' ? null : newXAxisColumnKey;
31
+ if (x_axis_column_key === validValue) return;
32
+ let update = {
33
+ x_axis_column_key: validValue
34
+ };
35
+ if (!validValue) {
36
+ update['x_axis_date_granularity'] = null;
37
+ update['x_axis_geolocation_granularity'] = null;
38
+ } else {
39
+ if (DATE_COLUMN_OPTIONS.includes(type)) {
40
+ update['x_axis_date_granularity'] = CHART_SUMMARY_TYPE.MONTH;
41
+ update['x_axis_geolocation_granularity'] = null;
42
+ } else if (type === CellType.GEOLOCATION) {
43
+ const {
44
+ geo_format
45
+ } = column.data || {};
46
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
47
+ update['x_axis_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
48
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
49
+ update['x_axis_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
50
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
51
+ update['x_axis_geolocation_granularity'] = 'district';
52
+ } else {
53
+ update['x_axis_geolocation_granularity'] = null;
54
+ }
55
+ update['x_axis_date_granularity'] = null;
56
+ }
57
+ }
58
+ onChange && onChange(update);
59
+ }, [chart, onChange]);
60
+ const onGroupbyDateGranularityChange = useCallback(option => {
61
+ const {
62
+ config
63
+ } = chart;
64
+ const {
65
+ x_axis_date_granularity
66
+ } = config;
67
+ const value = option.value;
68
+ if (value === x_axis_date_granularity) return;
69
+ onChange && onChange({
70
+ x_axis_date_granularity: value
71
+ });
72
+ }, [chart, onChange]);
73
+ const onGroupbyGeolocationGranularityChange = useCallback(option => {
74
+ const {
75
+ config
76
+ } = chart;
77
+ const {
78
+ x_axis_geolocation_granularity
79
+ } = config;
80
+ const value = option.value;
81
+ if (value === x_axis_geolocation_granularity) return;
82
+ onChange && onChange({
83
+ x_axis_geolocation_granularity: value
84
+ });
85
+ }, [chart, onChange]);
86
+ const onIncludeEmptyChange = useCallback(event => {
87
+ eventStopPropagation(event);
88
+ const {
89
+ config
90
+ } = chart;
91
+ const {
92
+ x_axis_include_empty_cells
93
+ } = config;
94
+ onChange && onChange({
95
+ x_axis_include_empty_cells: !x_axis_include_empty_cells
96
+ });
97
+ }, [chart, onChange]);
98
+ const onChangeSummaryType = useCallback((option, position) => {
99
+ const {
100
+ config
101
+ } = chart;
102
+ let {
103
+ y_axis_right_summary_type,
104
+ y_axis_left_summary_type,
105
+ y_axis_right_summary_column,
106
+ y_axis_left_summary_column,
107
+ y_axis_left_group_by_multiple_numeric_column,
108
+ y_axis_left_summary_method,
109
+ y_axis_left_group_by_numeric_columns
110
+ } = config;
111
+ let newSummaryType = option === CHART_Y_GROUP_TYPE.COUNT ? CHART_SUMMARY_TYPE.COUNT : CHART_SUMMARY_TYPE.ADVANCED;
112
+ if (position === COMBINATION_POSITION.LEFT) {
113
+ if (newSummaryType === CHART_SUMMARY_TYPE.COUNT && y_axis_left_summary_type === CHART_SUMMARY_TYPE.COUNT) return;
114
+ if (option === CHART_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN && !y_axis_left_group_by_multiple_numeric_column && y_axis_left_summary_type !== CHART_SUMMARY_TYPE.COUNT) return;
115
+ if (option === CHART_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN && y_axis_left_group_by_multiple_numeric_column) return;
116
+ if (option === CHART_Y_GROUP_TYPE.COUNT) {
117
+ y_axis_left_summary_column = null;
118
+ y_axis_left_summary_method = 'sum';
119
+ y_axis_left_group_by_multiple_numeric_column = false;
120
+ y_axis_left_group_by_numeric_columns = [];
121
+ }
122
+ if (option === CHART_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN) {
123
+ y_axis_left_summary_column = null;
124
+ y_axis_left_summary_method = CHART_SUMMARY_CALCULATION_METHOD[0];
125
+ y_axis_left_group_by_multiple_numeric_column = false;
126
+ y_axis_left_group_by_numeric_columns = [];
127
+ }
128
+ if (option === CHART_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN) {
129
+ y_axis_left_summary_column = null;
130
+ y_axis_left_summary_method = CHART_SUMMARY_CALCULATION_METHOD[0];
131
+ y_axis_left_group_by_multiple_numeric_column = true;
132
+ y_axis_left_group_by_numeric_columns = [];
133
+ }
134
+ onChange && onChange({
135
+ y_axis_left_summary_type: newSummaryType,
136
+ y_axis_left_summary_column,
137
+ y_axis_left_summary_method,
138
+ y_axis_left_group_by_multiple_numeric_column,
139
+ y_axis_left_group_by_numeric_columns
140
+ });
141
+ return;
142
+ }
143
+ if (y_axis_right_summary_type === newSummaryType) return;
144
+ y_axis_right_summary_type = newSummaryType;
145
+ let y_axis_right_summary_method = CHART_SUMMARY_CALCULATION_METHOD[0];
146
+ if (newSummaryType === CHART_SUMMARY_TYPE.COUNT) {
147
+ y_axis_right_summary_column = null;
148
+ y_axis_right_summary_method = 'sum';
149
+ }
150
+ onChange && onChange({
151
+ y_axis_right_summary_type: newSummaryType,
152
+ y_axis_right_summary_column,
153
+ y_axis_right_summary_method
154
+ });
155
+ }, [chart, onChange]);
156
+ const onSelectSummaryColumn = useCallback((option, position) => {
157
+ const {
158
+ config
159
+ } = chart;
160
+ let {
161
+ y_axis_right_summary_column,
162
+ y_axis_left_summary_column,
163
+ y_axis_left_summary_method,
164
+ y_axis_right_summary_method
165
+ } = config;
166
+ const newSummaryColumnKey = option;
167
+ if (position === COMBINATION_POSITION.LEFT) {
168
+ if (y_axis_left_summary_column === newSummaryColumnKey) return;
169
+ if (!y_axis_left_summary_method) {
170
+ y_axis_left_summary_method = 'Sum';
171
+ }
172
+ onChange && onChange({
173
+ y_axis_left_summary_column: newSummaryColumnKey,
174
+ y_axis_left_summary_method
175
+ });
176
+ return;
177
+ }
178
+ if (y_axis_right_summary_column === newSummaryColumnKey) return;
179
+ if (!y_axis_right_summary_method) {
180
+ y_axis_right_summary_method = 'Sum';
181
+ }
182
+ onChange && onChange({
183
+ y_axis_right_summary_column: newSummaryColumnKey,
184
+ y_axis_right_summary_method
185
+ });
186
+ }, [chart, onChange]);
187
+ const onSelectSummaryMethod = useCallback((option, position) => {
188
+ const {
189
+ config
190
+ } = chart;
191
+ const {
192
+ y_axis_right_summary_method,
193
+ y_axis_left_summary_method
194
+ } = config;
195
+ const newSummaryColumnMethod = option;
196
+ if (position === COMBINATION_POSITION.LEFT) {
197
+ if (y_axis_left_summary_method !== newSummaryColumnMethod) {
198
+ onChange && onChange({
199
+ y_axis_left_summary_method: newSummaryColumnMethod
200
+ });
201
+ }
202
+ return;
203
+ }
204
+ if (y_axis_right_summary_method === newSummaryColumnMethod) return;
205
+ onChange && onChange({
206
+ y_axis_right_summary_method: newSummaryColumnMethod
207
+ });
208
+ }, [chart, onChange]);
209
+ const {
210
+ config
211
+ } = chart;
212
+ const {
213
+ table_id,
214
+ x_axis_column_key,
215
+ x_axis_date_granularity,
216
+ x_axis_geolocation_granularity,
217
+ x_axis_include_empty_cells,
218
+ y_axis_right_summary_type,
219
+ y_axis_right_summary_method,
220
+ y_axis_right_summary_column,
221
+ y_axis_left_summary_type,
222
+ y_axis_left_summary_method,
223
+ y_axis_left_summary_column
224
+ } = config;
225
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonDataSettings, {
226
+ chart: chart,
227
+ tables: tables,
228
+ onChange: onChange
229
+ }), /*#__PURE__*/React.createElement(GroupBy, {
230
+ tables: tables,
231
+ className: "selected-x-axis",
232
+ label: intl.get(xLabel),
233
+ selectedTableId: table_id,
234
+ selectedColumnKey: x_axis_column_key,
235
+ selectedDateGranularity: x_axis_date_granularity,
236
+ selectedGeolocationGranularity: x_axis_geolocation_granularity,
237
+ onGroupByChange: onXAxisColumnChange,
238
+ onGroupbyDateGranularityChange: onGroupbyDateGranularityChange,
239
+ onGroupbyGeolocationGranularityChange: onGroupbyGeolocationGranularityChange
240
+ }), /*#__PURE__*/React.createElement(Switch, {
241
+ key: "x_axis_include_empty_cells",
242
+ checked: x_axis_include_empty_cells,
243
+ placeholder: intl.get('Include_empty'),
244
+ onChange: onIncludeEmptyChange
245
+ }), /*#__PURE__*/React.createElement(Divider, {
246
+ className: "mt-4"
247
+ }), /*#__PURE__*/React.createElement(SummarySettings, {
248
+ chartType: 'combination_chart',
249
+ label: intl.get('Y-axis(left side)'),
250
+ config: config,
251
+ chart: chart,
252
+ summaryType: y_axis_left_summary_type,
253
+ summaryMethod: y_axis_left_summary_method,
254
+ summaryColumn: y_axis_left_summary_column,
255
+ onChangeSummaryType: option => onChangeSummaryType(option, COMBINATION_POSITION.LEFT),
256
+ onSelectSummaryColumn: option => onSelectSummaryColumn(option, COMBINATION_POSITION.LEFT),
257
+ onSelectSummaryMethod: option => onSelectSummaryMethod(option, COMBINATION_POSITION.LEFT),
258
+ useMultipleSummaryColumns: true,
259
+ tables: tables,
260
+ onChange: onChange
261
+ }), /*#__PURE__*/React.createElement(SummarySettings, {
262
+ chartType: 'combination_chart',
263
+ label: intl.get('Y-axis(right side)'),
264
+ config: config,
265
+ summaryType: y_axis_right_summary_type,
266
+ summaryMethod: y_axis_right_summary_method,
267
+ summaryColumn: y_axis_right_summary_column,
268
+ onChangeSummaryType: option => onChangeSummaryType(option, COMBINATION_POSITION.RIGHT),
269
+ onSelectSummaryColumn: option => onSelectSummaryColumn(option, COMBINATION_POSITION.RIGHT),
270
+ onSelectSummaryMethod: option => onSelectSummaryMethod(option, COMBINATION_POSITION.RIGHT),
271
+ tables: tables,
272
+ chart: chart,
273
+ onChange: onChange
274
+ }));
275
+ };
276
+ DataSettings.defaultProps = {
277
+ xLabel: 'X_axis'
278
+ };
279
+ export default DataSettings;
@@ -0,0 +1,3 @@
1
+ import CombinationDataSettings from './data-settings';
2
+ import CombinationStyleSettings from './style-settings';
3
+ export { CombinationDataSettings, CombinationStyleSettings };