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,549 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { FormGroup, Label } from 'reactstrap';
3
+ import { CellType, COLUMNS_ICON_CONFIG, DATE_COLUMN_OPTIONS, getTableById, getTableColumnByKey } from 'dtable-utils';
4
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
5
+ import CommonDataSettings from '../widgets/common-data-settings';
6
+ import Divider from '../widgets/divider';
7
+ import GroupBy from '../widgets/group-by';
8
+ import Switch from '../widgets/switch';
9
+ import BasicSummary from '../widgets/basic-summary';
10
+ import NumericSummaryItem from '../widgets/numeric-summary-item';
11
+ import { eventStopPropagation, ChartUtils } from '../../utils';
12
+ import { CHART_SUMMARY_TYPE, CHART_Y_GROUP_TYPE, CHART_SUMMARY_SHOW, CHART_SUMMARY_CALCULATION_METHOD, CHART_DATE_SUMMARY_CALCULATION_METHOD, GEOLOCATION_FORMAT_CITY, GEOLOCATION_FORMAT_MAP } from '../../constants';
13
+ import intl from '../../intl';
14
+ const DataSettings = _ref => {
15
+ let {
16
+ chart,
17
+ tables,
18
+ onChange
19
+ } = _ref;
20
+ const selectedTable = useMemo(() => {
21
+ const {
22
+ table_id
23
+ } = chart.config;
24
+ return getTableById(tables, table_id);
25
+ }, [tables, chart.config]);
26
+ const numericColumns = useMemo(() => {
27
+ if (!selectedTable) return [];
28
+ const {
29
+ columns
30
+ } = selectedTable;
31
+ return columns.filter(column => ChartUtils.isNumericSummaryColumn(column) || ChartUtils.isDateSummaryColumn(column));
32
+ }, [selectedTable]);
33
+ const numericColumnOptions = useMemo(() => {
34
+ return numericColumns.map(column => {
35
+ return {
36
+ value: column,
37
+ label: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
38
+ className: "sea-chart-column-icon"
39
+ }, /*#__PURE__*/React.createElement("i", {
40
+ className: COLUMNS_ICON_CONFIG[column.type]
41
+ })), /*#__PURE__*/React.createElement("span", {
42
+ className: "select-module select-module-name ml-0"
43
+ }, column.name))
44
+ };
45
+ });
46
+ }, [numericColumns]);
47
+ const groupTypeOptions = useMemo(() => {
48
+ const {
49
+ column_groupby_column_key
50
+ } = chart.config;
51
+ let options = [{
52
+ value: CHART_Y_GROUP_TYPE.COUNT,
53
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
54
+ className: "select-module select-module-name ml-0"
55
+ }, intl.get(CHART_SUMMARY_SHOW['count'])), /*#__PURE__*/React.createElement("div", {
56
+ className: "summary-type-explanation"
57
+ }, intl.get('Count_the_number_of_records_in_each_group')))
58
+ }, {
59
+ value: CHART_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN,
60
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
61
+ className: "select-module select-module-name ml-0"
62
+ }, intl.get(CHART_SUMMARY_SHOW['advanced'])), /*#__PURE__*/React.createElement("div", {
63
+ className: "summary-type-explanation"
64
+ }, intl.get('Compute_the_sum_maximum_or_minimum_value_of_records_in_each_group_by_a_field')))
65
+ }];
66
+ if (!column_groupby_column_key) {
67
+ options.push({
68
+ value: CHART_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN,
69
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
70
+ className: "select-module select-module-name ml-0"
71
+ }, intl.get('Summarize_multiple_fields')), /*#__PURE__*/React.createElement("div", {
72
+ className: "summary-type-explanation"
73
+ }, intl.get('Compute_the_sum_maximum_or_minimum_value_of_records_in_each_group_by_multiple_fields')))
74
+ });
75
+ }
76
+ return options;
77
+ }, [chart.config]);
78
+ const onGroupByColumnChange = useCallback(option => {
79
+ const {
80
+ config
81
+ } = chart;
82
+ const {
83
+ groupby_column_key
84
+ } = config;
85
+ const column = option.value;
86
+ const {
87
+ key: newColumnKey,
88
+ type
89
+ } = column;
90
+ const validValue = newColumnKey === 'Groupby_null' ? null : newColumnKey;
91
+ if (groupby_column_key === validValue) return;
92
+ let update = {
93
+ groupby_column_key: validValue
94
+ };
95
+ if (!validValue) {
96
+ update['groupby_date_granularity'] = null;
97
+ update['groupby_geolocation_granularity'] = null;
98
+ } else {
99
+ if (ChartUtils.isDateSummaryColumn(column)) {
100
+ update['groupby_date_granularity'] = CHART_SUMMARY_TYPE.MONTH;
101
+ update['groupby_geolocation_granularity'] = null;
102
+ } else if (type === CellType.GEOLOCATION) {
103
+ const {
104
+ geo_format
105
+ } = column.data || {};
106
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
107
+ update['groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
108
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
109
+ update['groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
110
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
111
+ update['groupby_geolocation_granularity'] = 'district';
112
+ } else {
113
+ update['groupby_geolocation_granularity'] = null;
114
+ }
115
+ update['groupby_date_granularity'] = null;
116
+ }
117
+ }
118
+ onChange && onChange(update);
119
+ }, [chart, onChange]);
120
+ const onGroupbyDateGranularityChange = useCallback(option => {
121
+ const {
122
+ config
123
+ } = chart;
124
+ const {
125
+ groupby_date_granularity
126
+ } = config;
127
+ const value = option.value;
128
+ if (value === groupby_date_granularity) return;
129
+ onChange && onChange({
130
+ groupby_date_granularity: value
131
+ });
132
+ }, [chart, onChange]);
133
+ const onGroupbyGeolocationGranularityChange = useCallback(option => {
134
+ const {
135
+ config
136
+ } = chart;
137
+ const {
138
+ groupby_geolocation_granularity
139
+ } = config;
140
+ const value = option.value;
141
+ if (value === groupby_geolocation_granularity) return;
142
+ onChange && onChange({
143
+ groupby_geolocation_granularity: value
144
+ });
145
+ }, [chart, onChange]);
146
+ const onColumnGroupByColumnChange = useCallback(option => {
147
+ const {
148
+ config
149
+ } = chart;
150
+ const {
151
+ column_groupby_column_key
152
+ } = config;
153
+ const column = option.value;
154
+ const {
155
+ key: newColumnKey,
156
+ type
157
+ } = column;
158
+ const validValue = newColumnKey === 'Groupby_null' ? null : newColumnKey;
159
+ if (column_groupby_column_key === validValue) return;
160
+ let update = {
161
+ column_groupby_column_key: validValue,
162
+ summary_columns: []
163
+ };
164
+ if (!validValue) {
165
+ update['column_groupby_date_granularity'] = null;
166
+ update['column_groupby_geolocation_granularity'] = null;
167
+ } else {
168
+ if (DATE_COLUMN_OPTIONS.includes(type)) {
169
+ update['column_groupby_date_granularity'] = CHART_SUMMARY_TYPE.MONTH;
170
+ update['column_groupby_geolocation_granularity'] = null;
171
+ } else if (type === CellType.GEOLOCATION) {
172
+ const {
173
+ geo_format
174
+ } = column.data || {};
175
+ if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE) {
176
+ update['column_groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_MAP.PROVINCE;
177
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.PROVINCE_CITY) {
178
+ update['column_groupby_geolocation_granularity'] = GEOLOCATION_FORMAT_CITY;
179
+ } else if (geo_format === GEOLOCATION_FORMAT_MAP.GEOLOCATION || !geo_format) {
180
+ update['column_groupby_geolocation_granularity'] = 'district';
181
+ } else {
182
+ update['column_groupby_geolocation_granularity'] = null;
183
+ }
184
+ update['column_groupby_date_granularity'] = null;
185
+ }
186
+ }
187
+ onChange && onChange(update);
188
+ }, [chart, onChange]);
189
+ const onColumnGroupbyDateGranularityChange = useCallback(option => {
190
+ const {
191
+ config
192
+ } = chart;
193
+ const {
194
+ column_groupby_date_granularity
195
+ } = config;
196
+ const value = option.value;
197
+ if (value === column_groupby_date_granularity) return;
198
+ onChange && onChange({
199
+ column_groupby_date_granularity: value
200
+ });
201
+ }, [chart, onChange]);
202
+ const onColumnGroupbyGeolocationGranularityChange = useCallback(option => {
203
+ const {
204
+ config
205
+ } = chart;
206
+ const {
207
+ column_groupby_geolocation_granularity
208
+ } = config;
209
+ const value = option.value;
210
+ if (value === column_groupby_geolocation_granularity) return;
211
+ onChange && onChange({
212
+ column_groupby_geolocation_granularity: value
213
+ });
214
+ }, [chart, onChange]);
215
+ const onIncludeEmptyChange = useCallback(event => {
216
+ eventStopPropagation(event);
217
+ const {
218
+ config
219
+ } = chart;
220
+ const {
221
+ groupby_include_empty_cells
222
+ } = config;
223
+ onChange && onChange({
224
+ groupby_include_empty_cells: !groupby_include_empty_cells
225
+ });
226
+ }, [chart, onChange]);
227
+ const onGroupTypeChange = useCallback(option => {
228
+ const value = option.value;
229
+ const {
230
+ config
231
+ } = chart;
232
+ let {
233
+ column_groupby_column_key,
234
+ column_groupby_date_granularity,
235
+ column_groupby_geolocation_granularity,
236
+ column_groupby_multiple_numeric_column,
237
+ summary_columns,
238
+ summary_type,
239
+ summary_method,
240
+ summary_column_key
241
+ } = config;
242
+ column_groupby_column_key = column_groupby_column_key || null;
243
+ column_groupby_date_granularity = column_groupby_date_granularity || null;
244
+ column_groupby_geolocation_granularity = column_groupby_geolocation_granularity || null;
245
+ if (value === CHART_Y_GROUP_TYPE.COUNT) {
246
+ summary_type = CHART_SUMMARY_TYPE.COUNT;
247
+ column_groupby_multiple_numeric_column = false;
248
+ summary_columns = [];
249
+ summary_column_key = null;
250
+ summary_method = '';
251
+ } else if (value === CHART_Y_GROUP_TYPE.SINGLE_NUMERIC_COLUMN) {
252
+ summary_type = CHART_SUMMARY_TYPE.ADVANCED;
253
+ column_groupby_multiple_numeric_column = false;
254
+ summary_columns = [];
255
+ summary_method = summary_method || CHART_SUMMARY_CALCULATION_METHOD[0];
256
+ summary_column_key = null;
257
+ if (numericColumns && numericColumns[0]) {
258
+ summary_column_key = numericColumns[0].key;
259
+ summary_method = ChartUtils.isDateSummaryColumn(numericColumns[0]) ? CHART_DATE_SUMMARY_CALCULATION_METHOD[0] : CHART_SUMMARY_CALCULATION_METHOD[0];
260
+ }
261
+ } else if (value === CHART_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN) {
262
+ summary_type = CHART_SUMMARY_TYPE.ADVANCED;
263
+ column_groupby_multiple_numeric_column = true;
264
+ summary_columns = [];
265
+ column_groupby_column_key = null;
266
+ column_groupby_date_granularity = null;
267
+ column_groupby_geolocation_granularity = null;
268
+ summary_method = summary_method || CHART_SUMMARY_CALCULATION_METHOD[0];
269
+ summary_column_key = null;
270
+ if (numericColumns && numericColumns[0]) {
271
+ summary_column_key = numericColumns[0].key;
272
+ summary_method = ChartUtils.isDateSummaryColumn(numericColumns[0]) ? CHART_DATE_SUMMARY_CALCULATION_METHOD[0] : CHART_SUMMARY_CALCULATION_METHOD[0];
273
+ }
274
+ }
275
+ const update = {
276
+ column_groupby_column_key,
277
+ column_groupby_date_granularity,
278
+ column_groupby_geolocation_granularity,
279
+ column_groupby_multiple_numeric_column,
280
+ summary_columns,
281
+ summary_type,
282
+ summary_method,
283
+ summary_column_key
284
+ };
285
+ onChange && onChange(update);
286
+ }, [chart, numericColumns, onChange]);
287
+ const getSelectedGroupType = useCallback(() => {
288
+ const {
289
+ config
290
+ } = chart;
291
+ const {
292
+ column_groupby_multiple_numeric_column,
293
+ summary_type,
294
+ column_groupby_column_key
295
+ } = config;
296
+ if (summary_type === CHART_SUMMARY_TYPE.ADVANCED && column_groupby_column_key) {
297
+ return groupTypeOptions[1];
298
+ }
299
+ if (column_groupby_multiple_numeric_column) {
300
+ return groupTypeOptions.find(item => item.value === CHART_Y_GROUP_TYPE.MULTIPLE_NUMERIC_COLUMN);
301
+ }
302
+ if (summary_type === CHART_SUMMARY_TYPE.COUNT) {
303
+ return groupTypeOptions[0];
304
+ }
305
+ if (summary_type === CHART_SUMMARY_TYPE.ADVANCED) {
306
+ return groupTypeOptions[1];
307
+ }
308
+ }, [chart, groupTypeOptions]);
309
+ const onAddNumericColumn = useCallback(column => {
310
+ const {
311
+ config
312
+ } = chart;
313
+ let {
314
+ summary_columns
315
+ } = config;
316
+ const columnKey = column.key;
317
+ let newSummaryColumns = [];
318
+ const summaryMethod = ChartUtils.isDateSummaryColumn(column) ? CHART_DATE_SUMMARY_CALCULATION_METHOD[0] : CHART_SUMMARY_CALCULATION_METHOD[0];
319
+ if (Array.isArray(summary_columns)) {
320
+ newSummaryColumns = summary_columns.slice(0);
321
+ newSummaryColumns.push({
322
+ column_key: columnKey,
323
+ summary_method: summaryMethod
324
+ });
325
+ } else {
326
+ newSummaryColumns = [{
327
+ column_key: columnKey,
328
+ summary_method: summaryMethod
329
+ }];
330
+ }
331
+ onChange && onChange({
332
+ summary_columns: newSummaryColumns
333
+ });
334
+ }, [chart, onChange]);
335
+ const onDeleteNumericColumnItem = useCallback(index => {
336
+ const {
337
+ config
338
+ } = chart;
339
+ let {
340
+ summary_columns
341
+ } = config;
342
+ summary_columns = summary_columns || [];
343
+ let newSummaryColumns = summary_columns.slice(0);
344
+ newSummaryColumns.splice(index - 1, 1);
345
+ onChange && onChange({
346
+ summary_columns: newSummaryColumns
347
+ });
348
+ }, [chart, onChange]);
349
+ const onGroupbyNumericColumnChange = useCallback((option, index) => {
350
+ const column = option.value;
351
+ const {
352
+ config
353
+ } = chart;
354
+ const summaryMethods = ChartUtils.isDateSummaryColumn(column) ? CHART_DATE_SUMMARY_CALCULATION_METHOD : CHART_SUMMARY_CALCULATION_METHOD;
355
+ if (index === 0) {
356
+ const {
357
+ summary_method
358
+ } = config;
359
+ const summaryMethod = summaryMethods.includes(summary_method) ? summary_method : summaryMethods[0];
360
+ onChange && onChange({
361
+ summary_column_key: column.key,
362
+ summary_method: summaryMethod
363
+ });
364
+ return;
365
+ }
366
+ let {
367
+ summary_columns
368
+ } = config;
369
+ summary_columns = summary_columns || [];
370
+ let newSummaryColumns = summary_columns.slice(0);
371
+ let selectedItem = summary_columns[index - 1];
372
+ const {
373
+ summary_method
374
+ } = selectedItem;
375
+ if (summaryMethods.includes(summary_method)) {
376
+ selectedItem = Object.assign({}, selectedItem, {
377
+ column_key: column.key
378
+ });
379
+ } else {
380
+ selectedItem = Object.assign({}, selectedItem, {
381
+ column_key: column.key,
382
+ summary_method: summaryMethods[0]
383
+ });
384
+ }
385
+ newSummaryColumns[index - 1] = selectedItem;
386
+ onChange && onChange({
387
+ summary_columns: newSummaryColumns
388
+ });
389
+ }, [chart, onChange]);
390
+ const onSummaryMethodChange = useCallback((option, index) => {
391
+ const value = option.value;
392
+ const {
393
+ config
394
+ } = chart;
395
+ if (index === 0) {
396
+ onChange && onChange({
397
+ summary_method: value
398
+ });
399
+ return;
400
+ }
401
+ let {
402
+ summary_columns
403
+ } = config;
404
+ summary_columns = summary_columns || [];
405
+ let newSummaryColumns = summary_columns.slice(0);
406
+ let selectedItem = summary_columns[index - 1];
407
+ selectedItem = Object.assign({}, selectedItem, {
408
+ summary_method: value
409
+ });
410
+ newSummaryColumns[index - 1] = selectedItem;
411
+ onChange && onChange({
412
+ summary_columns: newSummaryColumns
413
+ });
414
+ }, [chart, onChange]);
415
+ const renderGroupbyNumericColumns = useCallback(() => {
416
+ const {
417
+ config
418
+ } = chart;
419
+ let {
420
+ summary_columns,
421
+ summary_column_key
422
+ } = config;
423
+ if (!summary_columns || !Array.isArray(summary_columns)) return null;
424
+ let usedSummaryColumnKeys = summary_columns.map(item => item.column_key);
425
+ usedSummaryColumnKeys.push(summary_column_key);
426
+ return summary_columns.map((item, index) => {
427
+ const currentUsedSummaryColumnKeys = usedSummaryColumnKeys.filter(columnKey => item.column_key !== columnKey);
428
+ return /*#__PURE__*/React.createElement(NumericSummaryItem, {
429
+ key: "number-column-".concat(index),
430
+ chart: chart,
431
+ numericColumnOptions: numericColumnOptions.filter(item => !currentUsedSummaryColumnKeys.includes(item.value.key)),
432
+ index: index + 1,
433
+ value: item,
434
+ onDelete: onDeleteNumericColumnItem,
435
+ onColumnOptionChange: onGroupbyNumericColumnChange,
436
+ onSummaryMethodChange: onSummaryMethodChange
437
+ });
438
+ });
439
+ }, [chart, numericColumnOptions, onDeleteNumericColumnItem, onGroupbyNumericColumnChange, onSummaryMethodChange]);
440
+ const renderAdvancedStatistic = useCallback(() => {
441
+ const {
442
+ config
443
+ } = chart;
444
+ const {
445
+ table_id,
446
+ column_groupby_column_key,
447
+ summary_type,
448
+ column_groupby_multiple_numeric_column,
449
+ summary_column_key,
450
+ summary_method,
451
+ summary_columns
452
+ } = config;
453
+ if (summary_type !== CHART_SUMMARY_TYPE.ADVANCED) return null;
454
+ if (column_groupby_multiple_numeric_column) {
455
+ const columnGroupbyColumn = getTableColumnByKey(selectedTable, column_groupby_column_key);
456
+ const usedSummaryColumnKeys = Array.isArray(summary_columns) ? summary_columns.map(item => item.column_key) : [];
457
+ const unUsedSummaryColumns = numericColumns.filter(column => column.key !== summary_column_key && !usedSummaryColumnKeys.includes(column.key));
458
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !columnGroupbyColumn && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(NumericSummaryItem, {
459
+ index: 0,
460
+ value: {
461
+ column_key: summary_column_key,
462
+ summary_method: summary_method
463
+ },
464
+ chart: chart,
465
+ numericColumnOptions: numericColumnOptions.filter(item => !usedSummaryColumnKeys.includes(item.value.key)),
466
+ onColumnOptionChange: onGroupbyNumericColumnChange,
467
+ onSummaryMethodChange: onSummaryMethodChange
468
+ }), /*#__PURE__*/React.createElement("div", {
469
+ className: "statistic-add-number"
470
+ }, renderGroupbyNumericColumns()), Array.isArray(unUsedSummaryColumns) && unUsedSummaryColumns.length > 0 && /*#__PURE__*/React.createElement("div", {
471
+ className: "statistic-add-number-columns d-flex align-items-center",
472
+ onClick: () => onAddNumericColumn(unUsedSummaryColumns[0])
473
+ }, /*#__PURE__*/React.createElement("i", {
474
+ className: "dtable-font dtable-icon-add-table mr-2"
475
+ }), /*#__PURE__*/React.createElement("span", {
476
+ className: "number-column-item add-number-column-description"
477
+ }, intl.get('Add_new_field')))));
478
+ }
479
+ return /*#__PURE__*/React.createElement(BasicSummary, {
480
+ showSummaryTypes: false,
481
+ className: "selected-y-axis",
482
+ label: intl.get('Summary_field'),
483
+ chart: chart,
484
+ selectedTableId: table_id,
485
+ tables: tables,
486
+ summaryTypeKey: 'summary_type',
487
+ summaryMethodKey: 'summary_method',
488
+ summaryColumnKey: 'summary_column_key',
489
+ onChange: onChange
490
+ });
491
+ }, [chart, tables, numericColumns, selectedTable, onChange, numericColumnOptions, onGroupbyNumericColumnChange, onSummaryMethodChange, renderGroupbyNumericColumns, onAddNumericColumn]);
492
+ const {
493
+ config
494
+ } = chart;
495
+ const {
496
+ table_id,
497
+ groupby_column_key,
498
+ groupby_date_granularity,
499
+ groupby_geolocation_granularity,
500
+ groupby_include_empty_cells,
501
+ column_groupby_column_key,
502
+ column_groupby_date_granularity,
503
+ column_groupby_geolocation_granularity
504
+ } = config;
505
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CommonDataSettings, {
506
+ chart: chart,
507
+ tables: tables,
508
+ onChange: onChange
509
+ }), /*#__PURE__*/React.createElement(GroupBy, {
510
+ tables: tables,
511
+ className: "selected-x-axis",
512
+ label: intl.get('Row_grouping_field'),
513
+ selectedTableId: table_id,
514
+ selectedColumnKey: groupby_column_key,
515
+ selectedDateGranularity: groupby_date_granularity,
516
+ selectedGeolocationGranularity: groupby_geolocation_granularity,
517
+ onGroupByChange: onGroupByColumnChange,
518
+ onGroupbyDateGranularityChange: onGroupbyDateGranularityChange,
519
+ onGroupbyGeolocationGranularityChange: onGroupbyGeolocationGranularityChange
520
+ }), /*#__PURE__*/React.createElement(Switch, {
521
+ key: "groupby_include_empty_cells",
522
+ checked: groupby_include_empty_cells,
523
+ placeholder: intl.get('Include_empty'),
524
+ onChange: onIncludeEmptyChange
525
+ }), /*#__PURE__*/React.createElement(Divider, {
526
+ className: "mt-4"
527
+ }), /*#__PURE__*/React.createElement(GroupBy, {
528
+ tables: tables,
529
+ className: "selected-x-axis",
530
+ label: intl.get('Column_grouping_field'),
531
+ selectedTableId: table_id,
532
+ selectedColumnKey: column_groupby_column_key,
533
+ selectedDateGranularity: column_groupby_date_granularity,
534
+ selectedGeolocationGranularity: column_groupby_geolocation_granularity,
535
+ onGroupByChange: onColumnGroupByColumnChange,
536
+ onGroupbyDateGranularityChange: onColumnGroupbyDateGranularityChange,
537
+ onGroupbyGeolocationGranularityChange: onColumnGroupbyGeolocationGranularityChange
538
+ }), /*#__PURE__*/React.createElement(Divider, {
539
+ className: "mt-4"
540
+ }), /*#__PURE__*/React.createElement(FormGroup, {
541
+ className: "sea-chart-parameter-item"
542
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Summary_type')), /*#__PURE__*/React.createElement(DTableSelect, {
543
+ classNamePrefix: "chart-summary-types",
544
+ value: getSelectedGroupType(),
545
+ onChange: onGroupTypeChange,
546
+ options: groupTypeOptions
547
+ })), renderAdvancedStatistic);
548
+ };
549
+ export default DataSettings;
@@ -0,0 +1,2 @@
1
+ import TableDataSettings from './data-settings';
2
+ export { TableDataSettings };