sea-chart 0.0.1

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 (214) hide show
  1. package/README.md +4 -0
  2. package/lib/assets/icons/area-chart.svg +10 -0
  3. package/lib/assets/icons/bar-chart.svg +12 -0
  4. package/lib/assets/icons/card.svg +22 -0
  5. package/lib/assets/icons/combination-chart.svg +17 -0
  6. package/lib/assets/icons/dtable-logo.svg +16 -0
  7. package/lib/assets/icons/facet-chart.svg +12 -0
  8. package/lib/assets/icons/gauge.svg +18 -0
  9. package/lib/assets/icons/heat-map.svg +14 -0
  10. package/lib/assets/icons/histogram.svg +12 -0
  11. package/lib/assets/icons/line-chart.svg +12 -0
  12. package/lib/assets/icons/map.svg +20 -0
  13. package/lib/assets/icons/pie-chart.svg +11 -0
  14. package/lib/assets/icons/rectangular-tree-diagram.svg +10 -0
  15. package/lib/assets/icons/scatter-chart.svg +15 -0
  16. package/lib/assets/icons/type-change.svg +17 -0
  17. package/lib/assets/img/area-chart.png +0 -0
  18. package/lib/assets/img/area-group-chart.png +0 -0
  19. package/lib/assets/img/bar-group.png +0 -0
  20. package/lib/assets/img/bar-stack.png +0 -0
  21. package/lib/assets/img/bar.png +0 -0
  22. package/lib/assets/img/combination-chart.png +0 -0
  23. package/lib/assets/img/compared-chart.png +0 -0
  24. package/lib/assets/img/completeness-chart.png +0 -0
  25. package/lib/assets/img/custom-bar.png +0 -0
  26. package/lib/assets/img/dashboard-chart.png +0 -0
  27. package/lib/assets/img/group-completeness-chart.png +0 -0
  28. package/lib/assets/img/group_line.png +0 -0
  29. package/lib/assets/img/heat-map.png +0 -0
  30. package/lib/assets/img/horizontal-bar.png +0 -0
  31. package/lib/assets/img/horizontal-group-bar.png +0 -0
  32. package/lib/assets/img/line.png +0 -0
  33. package/lib/assets/img/map-bubble.png +0 -0
  34. package/lib/assets/img/map.png +0 -0
  35. package/lib/assets/img/mirror.png +0 -0
  36. package/lib/assets/img/number-card.png +0 -0
  37. package/lib/assets/img/pie.png +0 -0
  38. package/lib/assets/img/pivot-table.png +0 -0
  39. package/lib/assets/img/ring.png +0 -0
  40. package/lib/assets/img/scatter.png +0 -0
  41. package/lib/assets/img/stacked-horizontal-bar.png +0 -0
  42. package/lib/assets/img/treemap.png +0 -0
  43. package/lib/assets/img/trend-chart.png +0 -0
  44. package/lib/assets/img/world-map-bubble.png +0 -0
  45. package/lib/assets/img/world-map.png +0 -0
  46. package/lib/components/collaborator/index.js +24 -0
  47. package/lib/components/formatter/area.js +162 -0
  48. package/lib/components/formatter/bar-group.js +160 -0
  49. package/lib/components/formatter/bar.js +150 -0
  50. package/lib/components/formatter/basic-number-card.js +138 -0
  51. package/lib/components/formatter/chart-component.js +266 -0
  52. package/lib/components/formatter/combination.js +407 -0
  53. package/lib/components/formatter/dashboard.js +182 -0
  54. package/lib/components/formatter/horizontal-bar-group.js +161 -0
  55. package/lib/components/formatter/horizontal-bar.js +152 -0
  56. package/lib/components/formatter/horizontal-component.js +91 -0
  57. package/lib/components/formatter/index.js +181 -0
  58. package/lib/components/formatter/line-group.js +157 -0
  59. package/lib/components/formatter/line.js +170 -0
  60. package/lib/components/formatter/pie.js +201 -0
  61. package/lib/components/formatter/ring.js +277 -0
  62. package/lib/components/formatter/table/index.css +103 -0
  63. package/lib/components/formatter/table/index.js +42 -0
  64. package/lib/components/formatter/table/one-dimension-table-no-numeric-columns.js +145 -0
  65. package/lib/components/formatter/table/one-dimension-table-with-numeric-columns.js +193 -0
  66. package/lib/components/formatter/table/pivot-table-display-name.js +249 -0
  67. package/lib/components/formatter/table/two-dimension-table.js +241 -0
  68. package/lib/components/formatter/treemap.js +213 -0
  69. package/lib/components/icon/index.css +5 -0
  70. package/lib/components/icon/index.js +22 -0
  71. package/lib/components/index.js +5 -0
  72. package/lib/components/loading/index.css +54 -0
  73. package/lib/components/loading/index.js +10 -0
  74. package/lib/components/number-input/index.js +31 -0
  75. package/lib/components/pixel-editor/index.css +29 -0
  76. package/lib/components/pixel-editor/index.js +42 -0
  77. package/lib/components/select-group/index.css +67 -0
  78. package/lib/components/select-group/index.js +63 -0
  79. package/lib/components/settings/advance-bar-settings/data-settings.js +120 -0
  80. package/lib/components/settings/advance-bar-settings/index.js +3 -0
  81. package/lib/components/settings/advance-bar-settings/style-settings.js +149 -0
  82. package/lib/components/settings/bar-settings/data-settings.js +137 -0
  83. package/lib/components/settings/bar-settings/index.js +3 -0
  84. package/lib/components/settings/bar-settings/style-settings.js +163 -0
  85. package/lib/components/settings/basic-number-card/data-settings.js +121 -0
  86. package/lib/components/settings/basic-number-card/index.js +3 -0
  87. package/lib/components/settings/basic-number-card/style-settings.js +42 -0
  88. package/lib/components/settings/combination-settings/data-settings.js +256 -0
  89. package/lib/components/settings/combination-settings/index.js +3 -0
  90. package/lib/components/settings/combination-settings/style-settings.js +183 -0
  91. package/lib/components/settings/dashboard-settings/data-settings.js +167 -0
  92. package/lib/components/settings/dashboard-settings/index.js +2 -0
  93. package/lib/components/settings/data-settings.js +67 -0
  94. package/lib/components/settings/horizontal-bar-settings/data-settings.js +45 -0
  95. package/lib/components/settings/horizontal-bar-settings/index.js +3 -0
  96. package/lib/components/settings/horizontal-bar-settings/style-settings.js +38 -0
  97. package/lib/components/settings/index.css +73 -0
  98. package/lib/components/settings/index.js +74 -0
  99. package/lib/components/settings/pie-settings/data-settings.js +123 -0
  100. package/lib/components/settings/pie-settings/index.js +3 -0
  101. package/lib/components/settings/pie-settings/style-settings.js +123 -0
  102. package/lib/components/settings/style-settings.js +100 -0
  103. package/lib/components/settings/table-settings/data-settings.js +488 -0
  104. package/lib/components/settings/table-settings/index.js +2 -0
  105. package/lib/components/settings/time-comparison-settings/data-settings.js +157 -0
  106. package/lib/components/settings/time-comparison-settings/index.js +3 -0
  107. package/lib/components/settings/time-comparison-settings/style-settings.js +191 -0
  108. package/lib/components/settings/widgets/basic-summary/index.css +12 -0
  109. package/lib/components/settings/widgets/basic-summary/index.js +173 -0
  110. package/lib/components/settings/widgets/common-data-settings.js +42 -0
  111. package/lib/components/settings/widgets/data-filter/index.css +17 -0
  112. package/lib/components/settings/widgets/data-filter/index.js +76 -0
  113. package/lib/components/settings/widgets/data-sort.js +38 -0
  114. package/lib/components/settings/widgets/date-summary-item.js +126 -0
  115. package/lib/components/settings/widgets/display-values-settings/index.css +13 -0
  116. package/lib/components/settings/widgets/display-values-settings/index.js +37 -0
  117. package/lib/components/settings/widgets/divider/index.css +4 -0
  118. package/lib/components/settings/widgets/divider/index.js +10 -0
  119. package/lib/components/settings/widgets/font-settings/font-size-settings.js +31 -0
  120. package/lib/components/settings/widgets/font-settings/font-weight-settings.js +46 -0
  121. package/lib/components/settings/widgets/font-settings/index.js +3 -0
  122. package/lib/components/settings/widgets/group-by.js +168 -0
  123. package/lib/components/settings/widgets/label-color.js +30 -0
  124. package/lib/components/settings/widgets/min-max-setting.js +64 -0
  125. package/lib/components/settings/widgets/mininum-slice-percent.js +72 -0
  126. package/lib/components/settings/widgets/numeric-summary-item.js +109 -0
  127. package/lib/components/settings/widgets/select-table/index.css +0 -0
  128. package/lib/components/settings/widgets/select-table/index.js +49 -0
  129. package/lib/components/settings/widgets/stack.js +58 -0
  130. package/lib/components/settings/widgets/statistic-type/index.css +31 -0
  131. package/lib/components/settings/widgets/statistic-type/index.js +54 -0
  132. package/lib/components/settings/widgets/summary-method-setting.js +80 -0
  133. package/lib/components/settings/widgets/summary-settings.js +394 -0
  134. package/lib/components/settings/widgets/switch/index.css +37 -0
  135. package/lib/components/settings/widgets/switch/index.js +21 -0
  136. package/lib/components/settings/widgets/text-horizontal-settings.js +23 -0
  137. package/lib/components/settings/widgets/time-picker.js +182 -0
  138. package/lib/components/settings/widgets/title-settings/index.js +58 -0
  139. package/lib/components/settings/widgets/title-settings/title-text.js +31 -0
  140. package/lib/components/settings/widgets/x-axios.js +0 -0
  141. package/lib/components/settings/widgets/y-axis-group-settings.js +399 -0
  142. package/lib/components/types-dialog/index.css +97 -0
  143. package/lib/components/types-dialog/index.js +127 -0
  144. package/lib/constants/geolocation.js +11 -0
  145. package/lib/constants/index.js +164 -0
  146. package/lib/constants/model.js +167 -0
  147. package/lib/constants/style.js +13 -0
  148. package/lib/constants/type-image.js +32 -0
  149. package/lib/constants/type.js +97 -0
  150. package/lib/context.js +49 -0
  151. package/lib/index.js +6 -0
  152. package/lib/intl.js +37 -0
  153. package/lib/layout/index.js +4 -0
  154. package/lib/layout/statistic/index.css +53 -0
  155. package/lib/layout/statistic/index.js +190 -0
  156. package/lib/layout/title/index.css +3 -0
  157. package/lib/layout/title/index.js +41 -0
  158. package/lib/locale/index.js +11 -0
  159. package/lib/locale/lang/de.js +141 -0
  160. package/lib/locale/lang/en.js +143 -0
  161. package/lib/locale/lang/es.js +141 -0
  162. package/lib/locale/lang/fr.js +141 -0
  163. package/lib/locale/lang/pt.js +141 -0
  164. package/lib/locale/lang/ru.js +141 -0
  165. package/lib/locale/lang/zh_CN.js +143 -0
  166. package/lib/model/area-group.js +51 -0
  167. package/lib/model/area.js +42 -0
  168. package/lib/model/bar-group.js +54 -0
  169. package/lib/model/bar-stack.js +51 -0
  170. package/lib/model/bar.js +48 -0
  171. package/lib/model/base-model.js +11 -0
  172. package/lib/model/basic-number-card.js +32 -0
  173. package/lib/model/combination.js +48 -0
  174. package/lib/model/compare-bar.js +49 -0
  175. package/lib/model/completeness-group.js +34 -0
  176. package/lib/model/completeness.js +28 -0
  177. package/lib/model/dashboard.js +26 -0
  178. package/lib/model/generic-model.js +235 -0
  179. package/lib/model/heat-map.js +33 -0
  180. package/lib/model/horizontal-bar.js +48 -0
  181. package/lib/model/horizontal-group-bar.js +53 -0
  182. package/lib/model/index.js +36 -0
  183. package/lib/model/line-group.js +54 -0
  184. package/lib/model/line.js +48 -0
  185. package/lib/model/map-bubble.js +37 -0
  186. package/lib/model/map.js +37 -0
  187. package/lib/model/mirror.js +36 -0
  188. package/lib/model/pie.js +36 -0
  189. package/lib/model/ring.js +36 -0
  190. package/lib/model/scatter.js +29 -0
  191. package/lib/model/stacked-horizontal-bar.js +42 -0
  192. package/lib/model/statistic.js +22 -0
  193. package/lib/model/table.js +33 -0
  194. package/lib/model/tree-map.js +30 -0
  195. package/lib/model/trend.js +34 -0
  196. package/lib/model/user.js +22 -0
  197. package/lib/model/world-map-bubble.js +36 -0
  198. package/lib/model/world-map.js +36 -0
  199. package/lib/utils/cell-format-utils.js +41 -0
  200. package/lib/utils/chart.js +6 -0
  201. package/lib/utils/collaborator-utils.js +40 -0
  202. package/lib/utils/column-utils.js +247 -0
  203. package/lib/utils/custom-g2.js +612 -0
  204. package/lib/utils/data-filter/filter-item-utils.js +80 -0
  205. package/lib/utils/data-filter/filters-utils.js +406 -0
  206. package/lib/utils/data-filter/index.js +3 -0
  207. package/lib/utils/date-translate.js +66 -0
  208. package/lib/utils/index.js +50 -0
  209. package/lib/utils/key-generator.js +13 -0
  210. package/lib/utils/object-utils.js +61 -0
  211. package/lib/utils/options-utils.js +61 -0
  212. package/lib/utils/statistic-column-2-sql-column-utils.js +499 -0
  213. package/lib/utils/statistic-utils.js +1685 -0
  214. package/package.json +160 -0
@@ -0,0 +1,191 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import React, { useCallback, useMemo } from 'react';
3
+ import { Label, FormGroup } from 'reactstrap';
4
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
5
+ import Switch from '../widgets/switch';
6
+ import Divider from '../widgets/divider';
7
+ import MinMaxSetting from '../widgets/min-max-setting';
8
+ import { eventStopPropagation } from '../../../utils';
9
+ import { X_LABEL_POSITIONS, Y_LABEL_POSITIONS, LABEL_POSITION_TYPE_SHOW, LABEL_COLORS } from '../../../constants';
10
+ import intl from '../../../intl';
11
+ var StyleSettings = function StyleSettings(_ref) {
12
+ var statistic = _ref.statistic,
13
+ onChange = _ref.onChange;
14
+ var xAxisLabelOptions = useMemo(function () {
15
+ return X_LABEL_POSITIONS.map(function (item) {
16
+ return {
17
+ value: item,
18
+ label: intl.get(LABEL_POSITION_TYPE_SHOW[item])
19
+ };
20
+ });
21
+ }, []);
22
+ var yAxisLabelOptions = useMemo(function () {
23
+ return Y_LABEL_POSITIONS.map(function (item) {
24
+ return {
25
+ value: item,
26
+ label: intl.get(LABEL_POSITION_TYPE_SHOW[item])
27
+ };
28
+ });
29
+ }, []);
30
+ var onAxisLabelShowChange = useCallback(function (event, labelKey) {
31
+ eventStopPropagation(event);
32
+ var config = statistic.config;
33
+ var value = config[labelKey];
34
+ onChange && onChange(_defineProperty({}, labelKey, !value));
35
+ }, [statistic, onChange]);
36
+ var onAxisLabelPositionChange = useCallback(function (option, positionKey) {
37
+ var position = option.value;
38
+ var config = statistic.config;
39
+ var oldValue = config[positionKey];
40
+ if (position === oldValue) return;
41
+ onChange && onChange(_defineProperty({}, positionKey, position));
42
+ }, [statistic, onChange]);
43
+ var onYAxisAutoRangeChange = useCallback(function (event) {
44
+ eventStopPropagation(event);
45
+ var config = statistic.config;
46
+ var y_axis_auto_range = config.y_axis_auto_range;
47
+ onChange && onChange({
48
+ y_axis_auto_range: !y_axis_auto_range
49
+ });
50
+ }, [statistic, onChange]);
51
+ var onYAxisMinChange = useCallback(function (min) {
52
+ var newMin = parseInt(min);
53
+ if (Number.isNaN(newMin)) return;
54
+ var config = statistic.config;
55
+ var y_axis_min = config.y_axis_min;
56
+ if (y_axis_min === newMin) return;
57
+ onChange && onChange({
58
+ y_axis_min: newMin
59
+ });
60
+ }, [statistic, onChange]);
61
+ var onYAxisMaxChange = useCallback(function (max) {
62
+ var newMax = parseInt(max);
63
+ if (Number.isNaN(newMax)) return;
64
+ var config = statistic.config;
65
+ var y_axis_max = config.y_axis_max;
66
+ if (y_axis_max === newMax) return;
67
+ onChange && onChange({
68
+ y_axis_max: newMax
69
+ });
70
+ }, [statistic, onChange]);
71
+ var onDisplayValueChange = useCallback(function (event) {
72
+ eventStopPropagation(event);
73
+ var config = statistic.config;
74
+ var y_axis_show_value = config.y_axis_show_value;
75
+ onChange && onChange({
76
+ y_axis_show_value: !y_axis_show_value
77
+ });
78
+ }, [statistic, onChange]);
79
+ var onDisplayPercentageIncreaseChange = useCallback(function (event) {
80
+ eventStopPropagation(event);
81
+ var config = statistic.config;
82
+ var display_increase_percentage = config.display_increase_percentage;
83
+ onChange && onChange({
84
+ display_increase_percentage: !display_increase_percentage
85
+ });
86
+ }, [statistic, onChange]);
87
+ var onIncreaseDisplayColorChang = useCallback(function (event, value) {
88
+ eventStopPropagation(event);
89
+ var config = statistic.config;
90
+ var increase_display_color = config.increase_display_color;
91
+ if (increase_display_color === value) return;
92
+ onChange && onChange({
93
+ increase_display_color: value
94
+ });
95
+ }, [statistic, onChange]);
96
+ var config = statistic.config;
97
+ var x_axis_show_label = config.x_axis_show_label,
98
+ x_axis_label_position = config.x_axis_label_position,
99
+ y_axis_show_label = config.y_axis_show_label,
100
+ y_axis_label_position = config.y_axis_label_position,
101
+ _config$y_axis_auto_r = config.y_axis_auto_range,
102
+ y_axis_auto_range = _config$y_axis_auto_r === void 0 ? true : _config$y_axis_auto_r,
103
+ y_axis_min = config.y_axis_min,
104
+ y_axis_max = config.y_axis_max,
105
+ y_axis_show_value = config.y_axis_show_value,
106
+ display_increase = config.display_increase,
107
+ display_increase_percentage = config.display_increase_percentage,
108
+ increase_display_color = config.increase_display_color;
109
+ var xAxisLabelPosition = xAxisLabelOptions.find(function (option) {
110
+ return option.value === x_axis_label_position;
111
+ }) || xAxisLabelOptions[0];
112
+ var yAxisLabelPosition = yAxisLabelOptions.find(function (option) {
113
+ return option.value === y_axis_label_position;
114
+ }) || yAxisLabelOptions[0];
115
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormGroup, {
116
+ className: "seastatistic-parameter-item"
117
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('X_axis')), /*#__PURE__*/React.createElement(Switch, {
118
+ key: "x_axis_show_label",
119
+ checked: x_axis_show_label || false,
120
+ placeholder: intl.get('Display_title'),
121
+ onChange: function onChange(event) {
122
+ return onAxisLabelShowChange(event, 'x_axis_show_label');
123
+ }
124
+ }), x_axis_show_label && /*#__PURE__*/React.createElement(DTableSelect, {
125
+ value: xAxisLabelPosition,
126
+ options: xAxisLabelOptions,
127
+ onChange: function onChange(option) {
128
+ return onAxisLabelPositionChange(option, 'x_axis_label_position');
129
+ }
130
+ })), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(FormGroup, {
131
+ className: "seastatistic-parameter-item"
132
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Y_axis')), /*#__PURE__*/React.createElement(Switch, {
133
+ key: "y_axis_show_label",
134
+ checked: y_axis_show_label || false,
135
+ placeholder: intl.get('Display_title'),
136
+ onChange: function onChange(event) {
137
+ return onAxisLabelShowChange(event, 'y_axis_show_label');
138
+ }
139
+ }), y_axis_show_label && /*#__PURE__*/React.createElement("div", {
140
+ className: "seastatistic-parameter-container"
141
+ }, /*#__PURE__*/React.createElement(DTableSelect, {
142
+ value: yAxisLabelPosition,
143
+ classNamePrefix: "chart-y-axis-label-position",
144
+ options: yAxisLabelOptions,
145
+ onChange: function onChange(option) {
146
+ return onAxisLabelPositionChange(option, 'y_axis_label_position');
147
+ }
148
+ })), /*#__PURE__*/React.createElement(Switch, {
149
+ key: "y_axis_auto_range",
150
+ checked: y_axis_auto_range,
151
+ placeholder: intl.get('Auto_range'),
152
+ onChange: onYAxisAutoRangeChange
153
+ }), !y_axis_auto_range && /*#__PURE__*/React.createElement(MinMaxSetting, {
154
+ min: y_axis_min,
155
+ max: y_axis_max,
156
+ onMinChange: onYAxisMinChange,
157
+ onMaxChange: onYAxisMaxChange
158
+ })), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Switch, {
159
+ key: "y_axis_show_value",
160
+ checked: y_axis_show_value,
161
+ placeholder: intl.get('Display_value'),
162
+ onChange: onDisplayValueChange
163
+ }), display_increase && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(FormGroup, {
164
+ className: "seastatistic-parameter-item"
165
+ }, /*#__PURE__*/React.createElement(Switch, {
166
+ key: "display_increase_percentage",
167
+ checked: display_increase_percentage || false,
168
+ placeholder: intl.get('Display_percentage_increase'),
169
+ onChange: onDisplayPercentageIncreaseChange
170
+ }), /*#__PURE__*/React.createElement(Label, null, intl.get('Color')), /*#__PURE__*/React.createElement("div", {
171
+ className: "d-flex align-items-center justify-content-between"
172
+ }, LABEL_COLORS.map(function (item, index) {
173
+ return /*#__PURE__*/React.createElement("div", {
174
+ key: "y-axis-label-color-".concat(index)
175
+ }, /*#__PURE__*/React.createElement("div", {
176
+ className: "colorinput"
177
+ }, /*#__PURE__*/React.createElement("span", {
178
+ className: "colorinput-color statistic-colorinput d-flex justify-content-center align-items-center",
179
+ onClick: function onClick(event) {
180
+ return onIncreaseDisplayColorChang(event, item);
181
+ },
182
+ style: {
183
+ backgroundColor: item,
184
+ borderColor: item
185
+ }
186
+ }, item === (increase_display_color || LABEL_COLORS[3]) && /*#__PURE__*/React.createElement("i", {
187
+ className: "dtable-font dtable-icon-check-mark statistic-check-mark"
188
+ }))));
189
+ })))));
190
+ };
191
+ export default StyleSettings;
@@ -0,0 +1,12 @@
1
+ .seastatistic-settings .summary-type-explanation {
2
+ color: #9c9c9c;
3
+ font-size: 12px;
4
+ }
5
+
6
+ .seastatistic-settings .chart-summary-types__option--is-selected .summary-type-explanation {
7
+ color: #9c9c9c !important;
8
+ }
9
+
10
+ .seastatistic-settings .chart-summary-types__value-container .summary-type-explanation {
11
+ display: none;
12
+ }
@@ -0,0 +1,173 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import React, { useCallback, useMemo } from 'react';
3
+ import { Label, FormGroup } from 'reactstrap';
4
+ import DTableSelect from "dtable-ui-component/lib/DTableSelect";
5
+ import { COLUMNS_ICON_CONFIG, CellType, getTableById } from 'dtable-utils';
6
+ import { StatisticsUtils } from '../../../../utils';
7
+ import { STATISTIC_SUMMARY_SHOW, STATISTIC_SUMMARY_TYPES, STATISTIC_SUMMARY_TYPE, STATISTIC_SUMMARY_CALCULATION_METHOD, STATISTIC_DATE_SUMMARY_CALCULATION_METHOD } from '../../../../constants';
8
+ import intl from '../../../../intl';
9
+ import './index.css';
10
+ var BasicSummary = function BasicSummary(_ref) {
11
+ var tables = _ref.tables,
12
+ statistic = _ref.statistic,
13
+ onChange = _ref.onChange,
14
+ oldSummaryTypeOptions = _ref.summaryTypeOptions,
15
+ summaryTypeKey = _ref.summaryTypeKey,
16
+ summaryColumnKey = _ref.summaryColumnKey,
17
+ summaryMethodKey = _ref.summaryMethodKey,
18
+ _ref$showSummaryTypes = _ref.showSummaryTypes,
19
+ showSummaryTypes = _ref$showSummaryTypes === void 0 ? true : _ref$showSummaryTypes,
20
+ label = _ref.label,
21
+ supportColumnTypes = _ref.supportColumnTypes;
22
+ var selectedTable = useMemo(function () {
23
+ var table_id = statistic.config.table_id;
24
+ return getTableById(tables, table_id);
25
+ }, [tables, statistic.config]);
26
+ var numericColumns = useMemo(function () {
27
+ if (!selectedTable) return [];
28
+ var columns = selectedTable.columns;
29
+ return columns.filter(function (column) {
30
+ return supportColumnTypes.includes(CellType.NUMBER) && StatisticsUtils.isNumericSummaryColumn(column) || supportColumnTypes.includes(CellType.DATE) && StatisticsUtils.isDateSummaryColumn(column);
31
+ });
32
+ }, [selectedTable, supportColumnTypes]);
33
+ var numericColumnOptions = useMemo(function () {
34
+ return numericColumns.map(function (column) {
35
+ return {
36
+ value: column.key,
37
+ column: column,
38
+ label: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
39
+ className: "header-icon"
40
+ }, /*#__PURE__*/React.createElement("i", {
41
+ className: COLUMNS_ICON_CONFIG[column.type]
42
+ })), /*#__PURE__*/React.createElement("span", {
43
+ className: "select-module select-module-name ml-0"
44
+ }, column.name))
45
+ };
46
+ });
47
+ }, [numericColumns]);
48
+ var summaryTypeOptions = useMemo(function () {
49
+ var summaryExplanation = StatisticsUtils.getSummaryExplanation(statistic);
50
+ return Array.isArray(oldSummaryTypeOptions) ? oldSummaryTypeOptions.map(function (summaryType) {
51
+ return {
52
+ value: summaryType,
53
+ label: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
54
+ className: "select-module select-module-name ml-0"
55
+ }, intl.get(STATISTIC_SUMMARY_SHOW[summaryType])), /*#__PURE__*/React.createElement("div", {
56
+ className: "summary-type-explanation"
57
+ }, summaryExplanation[summaryType]))
58
+ };
59
+ }) : [];
60
+ }, [statistic, oldSummaryTypeOptions]);
61
+ var summaryMethodOptions = useMemo(function () {
62
+ var summaryColumn = numericColumns.find(function (column) {
63
+ return column.key === statistic.config[summaryColumnKey];
64
+ });
65
+ var methods = StatisticsUtils.isNumericSummaryColumn(summaryColumn) ? STATISTIC_SUMMARY_CALCULATION_METHOD : STATISTIC_DATE_SUMMARY_CALCULATION_METHOD;
66
+ return methods.map(function (item) {
67
+ return {
68
+ value: item,
69
+ label: intl.get(STATISTIC_SUMMARY_SHOW[item])
70
+ };
71
+ });
72
+ }, [statistic, numericColumns, summaryColumnKey]);
73
+ var onSummaryTypeChange = useCallback(function (option) {
74
+ var _update;
75
+ var summaryType = option.value;
76
+ var config = statistic.config;
77
+ var oldValue = config[summaryTypeKey];
78
+ if (summaryType === oldValue) return;
79
+ var update = (_update = {}, _defineProperty(_update, summaryTypeKey, summaryType), _defineProperty(_update, summaryColumnKey, ''), _defineProperty(_update, summaryMethodKey, ''), _update);
80
+ if (summaryType === STATISTIC_SUMMARY_TYPE.ADVANCED) {
81
+ update[summaryMethodKey] = STATISTIC_SUMMARY_CALCULATION_METHOD[0];
82
+ }
83
+ if (summaryType === STATISTIC_SUMMARY_TYPE.ADVANCED && numericColumns[0]) {
84
+ update[summaryColumnKey] = numericColumns[0].key;
85
+ }
86
+ onChange && onChange(update);
87
+ }, [statistic, summaryTypeKey, summaryColumnKey, summaryMethodKey, onChange, numericColumns]);
88
+ var onSummaryColumnChange = useCallback(function (option) {
89
+ var _update2;
90
+ var value = option.value;
91
+ var config = statistic.config;
92
+ var oldValue = config[summaryColumnKey];
93
+ if (value === oldValue) return;
94
+ var update = (_update2 = {}, _defineProperty(_update2, summaryColumnKey, value), _defineProperty(_update2, summaryMethodKey, config[summaryMethodKey]), _update2);
95
+ var oldColumn = numericColumns.find(function (column) {
96
+ return column.key === oldValue;
97
+ });
98
+ var newColumn = numericColumns.find(function (column) {
99
+ return column.key === value;
100
+ });
101
+ var isDateColumn = StatisticsUtils.isDateSummaryColumn(newColumn);
102
+ if (StatisticsUtils.isDateSummaryColumn(oldColumn) !== isDateColumn) {
103
+ var methods = isDateColumn ? STATISTIC_DATE_SUMMARY_CALCULATION_METHOD : STATISTIC_SUMMARY_CALCULATION_METHOD;
104
+ if (!methods.includes(config[summaryMethodKey])) {
105
+ update[summaryMethodKey] = methods[0];
106
+ }
107
+ }
108
+ onChange && onChange(update);
109
+ }, [statistic, summaryColumnKey, summaryMethodKey, onChange, numericColumns]);
110
+ var onSummaryMethodChange = useCallback(function (option) {
111
+ var value = option.value;
112
+ var config = statistic.config;
113
+ var oldValue = config[summaryMethodKey];
114
+ if (value === oldValue) return;
115
+ onChange && onChange(_defineProperty({}, summaryMethodKey, value));
116
+ }, [statistic, summaryMethodKey, onChange]);
117
+ var renderNumericColumn = useCallback(function () {
118
+ var column_key = statistic.config[summaryColumnKey];
119
+ var selectedColumnOption = numericColumnOptions.find(function (option) {
120
+ return option.value === column_key;
121
+ });
122
+ return /*#__PURE__*/React.createElement(FormGroup, {
123
+ className: "seastatistic-parameter-item"
124
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Summary_field')), /*#__PURE__*/React.createElement(DTableSelect, {
125
+ value: selectedColumnOption,
126
+ onChange: onSummaryColumnChange,
127
+ options: numericColumnOptions,
128
+ placeholder: intl.get('Select_a_column'),
129
+ noOptionsMessage: function noOptionsMessage() {
130
+ return /*#__PURE__*/React.createElement("span", null, intl.get('No_options'));
131
+ }
132
+ }));
133
+ }, [statistic, summaryColumnKey, numericColumnOptions, onSummaryColumnChange]);
134
+ var renderSummaryMethod = useCallback(function () {
135
+ var summaryMethod = statistic.config[summaryMethodKey];
136
+ var selectedMethodOption = summaryMethodOptions.find(function (option) {
137
+ return option.value === summaryMethod;
138
+ });
139
+ return /*#__PURE__*/React.createElement(FormGroup, {
140
+ className: "seastatistic-parameter-item"
141
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Summary_method')), /*#__PURE__*/React.createElement(DTableSelect, {
142
+ value: selectedMethodOption,
143
+ onChange: onSummaryMethodChange,
144
+ options: summaryMethodOptions
145
+ }));
146
+ }, [statistic, summaryMethodKey, onSummaryMethodChange, summaryMethodOptions]);
147
+ var renderOtherSummaries = useCallback(function () {
148
+ var summaryType = statistic.config[summaryTypeKey] || STATISTIC_SUMMARY_TYPE.COUNT;
149
+ if (summaryType !== STATISTIC_SUMMARY_TYPE.ADVANCED) return null;
150
+ return /*#__PURE__*/React.createElement(React.Fragment, null, renderNumericColumn(), renderSummaryMethod());
151
+ }, [summaryTypeKey, statistic, renderNumericColumn, renderSummaryMethod]);
152
+ var summaryType = statistic.config[summaryTypeKey] || STATISTIC_SUMMARY_TYPE.COUNT;
153
+ var selectedSummaryTypeOption = summaryTypeOptions.find(function (item) {
154
+ return item.value === summaryType;
155
+ }) || summaryTypeOptions[0];
156
+ return /*#__PURE__*/React.createElement(React.Fragment, null, showSummaryTypes && /*#__PURE__*/React.createElement(FormGroup, {
157
+ className: "seastatistic-parameter-item"
158
+ }, /*#__PURE__*/React.createElement(Label, null, label), /*#__PURE__*/React.createElement(DTableSelect, {
159
+ classNamePrefix: "chart-summary-types",
160
+ value: selectedSummaryTypeOption,
161
+ onChange: onSummaryTypeChange,
162
+ options: summaryTypeOptions
163
+ })), renderOtherSummaries());
164
+ };
165
+ BasicSummary.defaultProps = {
166
+ showSummaryTypes: true,
167
+ summaryTypeKey: 'y_axis_summary_type',
168
+ summaryMethodKey: 'y_axis_summary_method',
169
+ summaryColumnKey: 'y_axis_summary_column_key',
170
+ supportColumnTypes: [CellType.NUMBER, CellType.DATE],
171
+ summaryTypeOptions: STATISTIC_SUMMARY_TYPES
172
+ };
173
+ export default BasicSummary;
@@ -0,0 +1,42 @@
1
+ import React, { useCallback } from 'react';
2
+ import StatisticType from './statistic-type';
3
+ import SelectTable from './select-table';
4
+ import DataFilter from './data-filter';
5
+ import Divider from './divider';
6
+ import { generateChartConfig } from '../../../utils';
7
+ var CommonDataSettings = function CommonDataSettings(_ref) {
8
+ var statistic = _ref.statistic,
9
+ tables = _ref.tables,
10
+ FilterSettings = _ref.FilterSettings,
11
+ onChange = _ref.onChange;
12
+ var onTableChange = useCallback(function (option) {
13
+ var config = statistic.config;
14
+ var table_id = config.table_id;
15
+ var selectedTableId = option.value;
16
+ if (selectedTableId === table_id) return;
17
+ onChange && onChange({
18
+ table_id: selectedTableId,
19
+ filters: [],
20
+ filter_conjunction: 'And'
21
+ });
22
+ }, [statistic, onChange]);
23
+ var generateConfig = useCallback(function (config) {
24
+ return generateChartConfig(config, tables);
25
+ }, [tables]);
26
+ var table_id = statistic.config.table_id;
27
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StatisticType, {
28
+ statistic: statistic,
29
+ generateChartConfig: generateConfig,
30
+ onChange: onChange
31
+ }), /*#__PURE__*/React.createElement(SelectTable, {
32
+ tables: tables,
33
+ selectedTableId: table_id,
34
+ onSettingUpdate: onTableChange
35
+ }), /*#__PURE__*/React.createElement(DataFilter, {
36
+ tables: tables,
37
+ statistic: statistic,
38
+ onChange: onChange,
39
+ FilterSettings: FilterSettings
40
+ }), /*#__PURE__*/React.createElement(Divider, null));
41
+ };
42
+ export default CommonDataSettings;
@@ -0,0 +1,17 @@
1
+ .seatable-app-custom-edit-page .seastatistic-data-filter {
2
+ width: 100%;
3
+ padding: 3px 4px;
4
+ border-radius: 4px;
5
+ line-height: 22px;
6
+ }
7
+
8
+ .seatable-app-custom-edit-page .seastatistic-data-filter:hover {
9
+ cursor: pointer;
10
+ background-color: #efefef;
11
+ }
12
+
13
+ .seatable-app-custom-edit-page .seastatistic-data-filter .dtable-icon-filter {
14
+ font-size: 14px;
15
+ color: #666;
16
+ margin-right: 10px;
17
+ }
@@ -0,0 +1,76 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useCallback, useMemo, useState } from 'react';
3
+ import { Label, FormGroup } from 'reactstrap';
4
+ import { getTableById } from 'dtable-utils';
5
+ import { eventStopPropagation, generatorKey } from '../../../../utils';
6
+ import intl from '../../../../intl';
7
+ import './index.css';
8
+ var DataFilter = function DataFilter(_ref) {
9
+ var statistic = _ref.statistic,
10
+ tables = _ref.tables,
11
+ FilterSettings = _ref.FilterSettings,
12
+ onChange = _ref.onChange;
13
+ var _useState = useState(false),
14
+ _useState2 = _slicedToArray(_useState, 2),
15
+ isFilterSetterShow = _useState2[0],
16
+ setIsFilterSetterShow = _useState2[1];
17
+ var toggleFilterPopover = useCallback(function (event) {
18
+ eventStopPropagation(event);
19
+ setIsFilterSetterShow(!isFilterSetterShow);
20
+ }, [isFilterSetterShow]);
21
+ var updateFilters = useCallback(function (update) {
22
+ onChange && onChange(update);
23
+ }, [onChange]);
24
+ var id = useMemo(function () {
25
+ return 'seastatistic-data-filter-' + generatorKey();
26
+ }, []);
27
+ var table = useMemo(function () {
28
+ var config = statistic.config;
29
+ var table_id = config.table_id;
30
+ return getTableById(tables, table_id);
31
+ }, [tables, statistic]);
32
+ var filterMessage = useMemo(function () {
33
+ var config = statistic.config;
34
+ var filters = config.filters;
35
+ var filterMessage = intl.get('Filter');
36
+ if (filters.length === 1) {
37
+ filterMessage = intl.get('1 Filter');
38
+ } else if (filters.length > 1) {
39
+ filterMessage = filters.length + ' ' + intl.get('Filters');
40
+ }
41
+ return filterMessage;
42
+ }, [statistic]);
43
+ var filterConjunction = useMemo(function () {
44
+ var config = statistic.config;
45
+ var filter_conjunction = config.filter_conjunction;
46
+ return filter_conjunction || 'And';
47
+ }, [statistic]);
48
+ var collaborators = window.seaStatistic.context.getCollaboratorsFromCache();
49
+ var config = statistic.config;
50
+ var filters = config.filters;
51
+ return /*#__PURE__*/React.createElement(FormGroup, {
52
+ className: "seastatistic-parameter-item"
53
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Data_settings')), table ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
54
+ id: id,
55
+ className: "seastatistic-data-filter",
56
+ onClick: toggleFilterPopover
57
+ }, /*#__PURE__*/React.createElement("i", {
58
+ className: "dtable-font dtable-icon-filter"
59
+ }), /*#__PURE__*/React.createElement("span", null, filterMessage)), isFilterSetterShow && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FilterSettings, {
60
+ isNeedSubmit: true,
61
+ isPre: true,
62
+ target: id,
63
+ filters: filters,
64
+ filterConjunction: filterConjunction,
65
+ columns: table.columns,
66
+ collaborators: collaborators,
67
+ hidePopover: toggleFilterPopover,
68
+ update: updateFilters
69
+ }))) : /*#__PURE__*/React.createElement("div", {
70
+ id: id,
71
+ className: "seastatistic-data-filter disabled"
72
+ }, /*#__PURE__*/React.createElement("i", {
73
+ className: "dtable-font dtable-icon-filter"
74
+ }), /*#__PURE__*/React.createElement("span", null, filterMessage)));
75
+ };
76
+ export default DataFilter;
@@ -0,0 +1,38 @@
1
+ import React, { useCallback } from 'react';
2
+ import { Label, FormGroup } from 'reactstrap';
3
+ import DTableRadio from "dtable-ui-component/lib/DTableRadio";
4
+ import { eventStopPropagation } from '../../../utils/';
5
+ import { STATISTIC_DATA_SORT_TYPE, STATISTIC_DATA_SORT_TYPES, STATISTIC_DATA_SORT_TYPE_SHOW } from '../../../constants';
6
+ import intl from '../../../intl';
7
+ var DataSort = function DataSort(_ref) {
8
+ var statistic = _ref.statistic,
9
+ onChange = _ref.onChange;
10
+ var onChangeSortType = useCallback(function (event, sortType) {
11
+ eventStopPropagation(event);
12
+ var config = statistic.config;
13
+ var sort_type = config.sort_type;
14
+ var validSortType = sortType === STATISTIC_DATA_SORT_TYPE.NOT_SORTED ? '' : sortType;
15
+ if (sort_type === validSortType) return;
16
+ onChange && onChange({
17
+ sort_type: validSortType
18
+ });
19
+ }, [statistic, onChange]);
20
+ var sortType = statistic.config.sort_type;
21
+ var selectedSortType = sortType || STATISTIC_DATA_SORT_TYPE.NOT_SORTED;
22
+ return /*#__PURE__*/React.createElement(FormGroup, {
23
+ className: "seastatistic-parameter-item"
24
+ }, /*#__PURE__*/React.createElement(Label, null, intl.get('Data_sort')), STATISTIC_DATA_SORT_TYPES.map(function (sortType, index) {
25
+ var isChecked = sortType === selectedSortType;
26
+ return /*#__PURE__*/React.createElement("div", {
27
+ key: 'chart-group-item-' + index,
28
+ className: "chart-group-item"
29
+ }, /*#__PURE__*/React.createElement(DTableRadio, {
30
+ isChecked: isChecked,
31
+ onCheckedChange: function onCheckedChange(event) {
32
+ return onChangeSortType(event, sortType);
33
+ },
34
+ label: intl.get(STATISTIC_DATA_SORT_TYPE_SHOW[sortType])
35
+ }));
36
+ }));
37
+ };
38
+ export default DataSort;