dtable-statistic 4.2.2 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/api/dtable-db-api.js +31 -37
- package/es/calculator/base-calculator.js +49 -99
- package/es/calculator/basic-chart-calculator.js +335 -559
- package/es/calculator/combination-calculator.js +231 -299
- package/es/calculator/compare-bar-calculator.js +184 -281
- package/es/calculator/completeness-calculator.js +203 -288
- package/es/calculator/copy-value.js +18 -18
- package/es/calculator/dashboard-calculator.js +68 -137
- package/es/calculator/heat-map-calculator.js +139 -220
- package/es/calculator/horizontal-bar-calculator.js +64 -93
- package/es/calculator/index.js +53 -69
- package/es/calculator/map-calculator.js +98 -174
- package/es/calculator/mirror-calculator.js +137 -216
- package/es/calculator/number-card-calculator.js +58 -126
- package/es/calculator/pivot-table-calculator.js +750 -792
- package/es/calculator/scatter-calculator.js +72 -140
- package/es/calculator/thread-manager.js +48 -67
- package/es/calculator/trend-calculator.js +107 -191
- package/es/calculator/workers/basic-chart-calculator-worker.js +194 -165
- package/es/calculator/workers/calculator.worker.js +22 -6
- package/es/calculator/workers/card-calculator-worker.js +16 -14
- package/es/calculator/workers/combination-calculator-worker.js +128 -135
- package/es/calculator/workers/compare-bar-chart-calculator-worker.js +80 -96
- package/es/calculator/workers/completeness-calculator-worker.js +56 -49
- package/es/calculator/workers/dashboard-calculator-worker.js +24 -22
- package/es/calculator/workers/mirror-calculator-worker.js +52 -52
- package/es/calculator/workers/pivot-table-calculator-worker.js +247 -230
- package/es/calculator/workers/scatter-calculator-worker.js +34 -32
- package/es/calculator/workers/trend-calculator-worker.js +33 -29
- package/es/calculator/world-map-calculator.js +120 -197
- package/es/components/common-add-tool.js +7 -5
- package/es/components/dialog/chart-addition-edit-dialog.js +67 -77
- package/es/components/dialog/chart-addition-widgets/chart-selector.js +57 -67
- package/es/components/dialog/color-theme-dialog.js +34 -47
- package/es/components/dialog/delete-confirmation-dialog.js +7 -5
- package/es/components/dialog/enlarged-chart-dialog.js +68 -81
- package/es/components/dialog/new-table-dialog.js +62 -80
- package/es/components/dialog/new-view-dialog.js +50 -62
- package/es/components/dialog/rename-view-dialog.js +49 -58
- package/es/components/dialog/statistic-record-dialog/index.js +233 -231
- package/es/components/dialog/statistic-types-dialog/index.js +40 -49
- package/es/components/dialog/table-select-dialog.js +61 -70
- package/es/components/dropdown-menu/statistic-dropdown-menu.js +129 -142
- package/es/components/dtable-popover.js +62 -81
- package/es/components/dtable-search-input.js +89 -99
- package/es/components/dtable-select.js +55 -74
- package/es/components/icon.js +5 -3
- package/es/components/loading.js +1 -1
- package/es/components/modal-portal.js +15 -32
- package/es/components/popover/color-rules/color-rule.js +137 -141
- package/es/components/popover/color-rules/index.js +58 -66
- package/es/components/popover/color-rules/rule-filters/filter.js +124 -124
- package/es/components/popover/color-rules/rule-filters/index.js +50 -58
- package/es/components/popover/color-rules/rule-filters/number-input.js +42 -57
- package/es/components/popover/color-rules-popover.js +117 -121
- package/es/components/popover/color-selector-popover.js +60 -70
- package/es/components/seatable-radio/index.js +2 -2
- package/es/components/select/option-group.js +139 -157
- package/es/components/select/option.js +26 -40
- package/es/components/select/select.js +97 -112
- package/es/components/toast/alert.js +65 -80
- package/es/components/toast/index.js +1 -1
- package/es/components/toast/toast.js +76 -103
- package/es/components/toast/toastManager.js +57 -93
- package/es/components/toast/toaster.js +58 -56
- package/es/constants/color-rules.js +8 -5
- package/es/constants/dtable-select-style.js +44 -48
- package/es/constants/event-types.js +4 -4
- package/es/constants/index.js +328 -242
- package/es/constants/map.js +2 -2
- package/es/constants/model.js +20 -20
- package/es/constants/regions.js +1 -1
- package/es/constants/zIndexes.js +1 -1
- package/es/custom-g2.js +11 -11
- package/es/dashboard.js +343 -333
- package/es/desktop-dashboard.js +217 -224
- package/es/index.js +45 -58
- package/es/locale/index.js +3 -3
- package/es/locale/lang/de.js +1 -1
- package/es/locale/lang/en.js +7 -7
- package/es/locale/lang/fr.js +1 -1
- package/es/locale/lang/zh_CN.js +1 -1
- package/es/mobile-dashboard.js +76 -89
- package/es/model/bar-group.js +34 -44
- package/es/model/bar.js +26 -36
- package/es/model/base-model.js +11 -12
- package/es/model/basic-number-card.js +10 -20
- package/es/model/collaborators.js +10 -11
- package/es/model/combination.js +32 -42
- package/es/model/compare-bar.js +30 -40
- package/es/model/completeness-group.js +19 -29
- package/es/model/completeness.js +14 -24
- package/es/model/custom-bar.js +14 -24
- package/es/model/dashboard.js +9 -19
- package/es/model/generic-model.js +187 -197
- package/es/model/heat-map.js +16 -26
- package/es/model/horizontal-bar-group.js +32 -42
- package/es/model/horizontal-bar.js +26 -36
- package/es/model/index.js +31 -3
- package/es/model/map.js +20 -30
- package/es/model/mirror.js +15 -25
- package/es/model/pie.js +21 -31
- package/es/model/ring.js +23 -33
- package/es/model/scatter.js +11 -21
- package/es/model/statistic-dashboard.js +7 -8
- package/es/model/table.js +19 -29
- package/es/model/trend.js +15 -25
- package/es/model/world-map.js +17 -27
- package/es/service/chart-service.js +69 -65
- package/es/service/dashboard-service.js +421 -419
- package/es/service/map-json.js +112 -132
- package/es/stat-editor/chart-name-editor.js +44 -58
- package/es/stat-editor/index.js +59 -70
- package/es/stat-editor/stat-settings/advance-chart-settings/basic-number-card-settings.js +93 -98
- package/es/stat-editor/stat-settings/advance-chart-settings/combination-settings.js +246 -248
- package/es/stat-editor/stat-settings/advance-chart-settings/dashboard-chart-settings.js +127 -126
- package/es/stat-editor/stat-settings/advance-chart-settings/geo-granularity-settings.js +5 -3
- package/es/stat-editor/stat-settings/advance-chart-settings/heat-map-settings.js +78 -90
- package/es/stat-editor/stat-settings/advance-chart-settings/index.js +146 -150
- package/es/stat-editor/stat-settings/advance-chart-settings/map-settings.js +88 -98
- package/es/stat-editor/stat-settings/advance-chart-settings/mirror-settings.js +100 -118
- package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/combination-style-setting.js +161 -148
- package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/heat-map-settings.js +58 -66
- package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/map-setting.js +58 -60
- package/es/stat-editor/stat-settings/advance-chart-settings/summary-settings.js +152 -148
- package/es/stat-editor/stat-settings/advance-chart-settings/trend-chart-settings.js +101 -105
- package/es/stat-editor/stat-settings/advance-chart-settings/world-map-settings.js +81 -91
- package/es/stat-editor/stat-settings/basic-chart-settings/advance-bar-chart-settings.js +110 -122
- package/es/stat-editor/stat-settings/basic-chart-settings/bar-settings.js +101 -113
- package/es/stat-editor/stat-settings/basic-chart-settings/completeness-chart-settings.js +130 -120
- package/es/stat-editor/stat-settings/basic-chart-settings/custom-bar-settings.js +88 -102
- package/es/stat-editor/stat-settings/basic-chart-settings/groupby-settings.js +88 -102
- package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-axis-group-settings.js +200 -194
- package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-bar-settings.js +98 -110
- package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-group-chart-settings.js +106 -118
- package/es/stat-editor/stat-settings/basic-chart-settings/index.js +212 -223
- package/es/stat-editor/stat-settings/basic-chart-settings/pie-settings.js +109 -119
- package/es/stat-editor/stat-settings/basic-chart-settings/pivot-table-settings.js +329 -319
- package/es/stat-editor/stat-settings/basic-chart-settings/scatter-settings.js +82 -90
- package/es/stat-editor/stat-settings/basic-chart-settings/stack-item-settings.js +58 -65
- package/es/stat-editor/stat-settings/basic-chart-settings/stacks-settings.js +126 -116
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/bar-chart-style-setting.js +201 -182
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/completeness-style.js +79 -79
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/horizontal-bar-chart-style.js +196 -175
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/label-font-size-editor.js +35 -50
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/pie-chart-style-settings.js +180 -147
- package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/time-compare-style.js +31 -40
- package/es/stat-editor/stat-settings/basic-chart-settings/summary-method-setting.js +56 -67
- package/es/stat-editor/stat-settings/basic-chart-settings/summary-settings.js +60 -69
- package/es/stat-editor/stat-settings/basic-chart-settings/time-comparison-settings.js +165 -158
- package/es/stat-editor/stat-settings/basic-chart-settings/timer-picker.js +61 -74
- package/es/stat-editor/stat-settings/basic-chart-settings/y-axis-group-settings.js +199 -193
- package/es/stat-editor/stat-settings/color-setting/color-group-selector.js +25 -38
- package/es/stat-editor/stat-settings/color-setting/color-picker.js +79 -86
- package/es/stat-editor/stat-settings/color-setting/color-use-type-selector.js +138 -120
- package/es/stat-editor/stat-settings/map/map-level.js +31 -43
- package/es/stat-editor/stat-settings/map/map-province-city.js +82 -83
- package/es/stat-editor/stat-settings/public-setting/axis-label-position-setting.js +48 -50
- package/es/stat-editor/stat-settings/public-setting/base-settings.js +96 -96
- package/es/stat-editor/stat-settings/public-setting/calender.js +69 -75
- package/es/stat-editor/stat-settings/public-setting/column-settings.js +5 -3
- package/es/stat-editor/stat-settings/public-setting/custom-title-setting.js +36 -41
- package/es/stat-editor/stat-settings/public-setting/data-sort-setting.js +37 -41
- package/es/stat-editor/stat-settings/public-setting/ind-toggle-setting.js +25 -38
- package/es/stat-editor/stat-settings/public-setting/min-max-setting.js +40 -52
- package/es/stat-editor/stat-settings/public-setting/numeric-summary-item.js +90 -93
- package/es/stat-editor/stat-settings/public-setting/toggle-setting.js +23 -36
- package/es/stat-editor/stat-settings/public-setting/type-settings/index.js +39 -44
- package/es/stat-list/chart-preview.js +85 -98
- package/es/stat-list/index.js +170 -178
- package/es/stat-view/area-chart.js +282 -274
- package/es/stat-view/bar-chart.js +300 -292
- package/es/stat-view/base-chart.js +58 -52
- package/es/stat-view/basic-number-card.js +115 -168
- package/es/stat-view/combination-chart.js +298 -334
- package/es/stat-view/compare-chart.js +256 -254
- package/es/stat-view/completeness-chart.js +194 -206
- package/es/stat-view/custom-bar.js +221 -223
- package/es/stat-view/dashboard-chart.js +122 -180
- package/es/stat-view/heat-map.js +268 -294
- package/es/stat-view/horizontal-bar-chart.js +291 -281
- package/es/stat-view/index.js +136 -152
- package/es/stat-view/line-chart.js +267 -265
- package/es/stat-view/map.js +246 -246
- package/es/stat-view/mirror.js +141 -152
- package/es/stat-view/pie-chart.js +143 -156
- package/es/stat-view/pivot-table/index.js +113 -118
- package/es/stat-view/pivot-table/one-dimension-table-no-numeric-columns.js +104 -102
- package/es/stat-view/pivot-table/one-dimension-table-with-numeric-columns.js +116 -118
- package/es/stat-view/pivot-table/pivot-table-display-name.js +96 -95
- package/es/stat-view/pivot-table/two-dimension-table.js +238 -229
- package/es/stat-view/ring-chart.js +189 -200
- package/es/stat-view/scatter-chart.js +162 -213
- package/es/stat-view/treemap-chart.js +136 -200
- package/es/stat-view/trend-chart.js +137 -183
- package/es/stat-view/world-map.js +233 -243
- package/es/tabs/index.js +164 -169
- package/es/tabs/tab.js +101 -116
- package/es/utils/basic-chart-utils.js +7 -9
- package/es/utils/cell-format.js +48 -51
- package/es/utils/cell-value.js +1 -1
- package/es/utils/collaborator.js +15 -14
- package/es/utils/color-utils.js +48 -37
- package/es/utils/column-utils.js +47 -33
- package/es/utils/column.js +1 -1
- package/es/utils/common-utils.js +111 -117
- package/es/utils/date-format.js +17 -17
- package/es/utils/export-table-utils.js +507 -396
- package/es/utils/index.js +6 -6
- package/es/utils/map.js +30 -34
- package/es/utils/model.js +3 -5
- package/es/utils/object.js +4 -4
- package/es/utils/pivot-table.js +20 -20
- package/es/utils/row-utils.js +41 -33
- package/es/utils/search.js +18 -20
- package/es/utils/sql-utils.js +132 -98
- package/es/utils/stat-utils.js +303 -320
- package/es/utils/trend-utils.js +57 -67
- package/package.json +2 -2
package/es/utils/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export const isFunction = functionToCheck => {
|
|
2
|
+
const getType = {};
|
|
3
3
|
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
|
4
4
|
};
|
|
5
|
-
export
|
|
5
|
+
export const getEventClassName = e => {
|
|
6
6
|
// svg mouseEvent event.target.className is an object
|
|
7
7
|
if (!e || !e.target) return '';
|
|
8
8
|
return e.target.getAttribute('class') || '';
|
|
9
9
|
};
|
|
10
|
-
export
|
|
10
|
+
export const hexToRgb = hex => {
|
|
11
11
|
hex = hex.replace('#', '');
|
|
12
|
-
|
|
12
|
+
const bigint = parseInt(hex, 16);
|
|
13
13
|
return {
|
|
14
14
|
r: bigint >> 16 & 255,
|
|
15
15
|
g: bigint >> 8 & 255,
|
|
16
16
|
b: bigint & 255
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
export
|
|
19
|
+
export const isMobile = typeof window !== 'undefined' && (window.innerWidth < 768 || navigator.userAgent.toLowerCase().match(/(ipod|ipad|iphone|android|coolpad|mmp|smartphone|midp|wap|xoom|symbian|j2me|blackberry|wince)/i) != null);
|
|
20
20
|
export { getClientCellValueDisplayString, getClientFormulaDisplayString } from './cell-format';
|
|
21
21
|
export { hasOwnProperty, isEmptyObject, isSameObject } from './object';
|
|
22
22
|
export { isCellValueChanged } from './cell-value';
|
package/es/utils/map.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { GEOLOCATION_GRANULARITY, STAT_TYPE } from '../constants';
|
|
2
2
|
import { MAP_LEVEL, MUNICIPALITIES } from '../constants/map';
|
|
3
3
|
import { regions } from '../constants/regions';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
4
|
+
const COUNTY_SCALE_WIDTH = 5.95;
|
|
5
|
+
const COUNTY_SCALE_HEIGHT = 4.37;
|
|
6
|
+
export const getGeoGranularityByLevel = mapLevel => {
|
|
7
7
|
switch (mapLevel) {
|
|
8
8
|
case MAP_LEVEL.PROVINCE:
|
|
9
9
|
{
|
|
@@ -20,31 +20,31 @@ export var getGeoGranularityByLevel = function getGeoGranularityByLevel(mapLevel
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
export const fixGeoGranularity = _ref => {
|
|
24
|
+
let {
|
|
25
|
+
mapLevel,
|
|
26
|
+
mapLocation
|
|
27
|
+
} = _ref;
|
|
26
28
|
if (!mapLevel || mapLevel === MAP_LEVEL.COUNTRY || !mapLocation) {
|
|
27
29
|
return GEOLOCATION_GRANULARITY.PROVINCE;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
// e.g. Beijing
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const {
|
|
34
|
+
province: provinceName,
|
|
35
|
+
city: cityName
|
|
36
|
+
} = mapLocation;
|
|
33
37
|
if (provinceName && MUNICIPALITIES.includes(provinceName)) {
|
|
34
38
|
return GEOLOCATION_GRANULARITY.DISTRICT;
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
// e.g. HongKong
|
|
38
|
-
|
|
39
|
-
return province.name === provinceName;
|
|
40
|
-
});
|
|
42
|
+
const selectedProvince = provinceName && regions.find(province => province.name === provinceName);
|
|
41
43
|
if (selectedProvince && selectedProvince.disable_drill_down) {
|
|
42
44
|
return GEOLOCATION_GRANULARITY.PROVINCE;
|
|
43
45
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return city.name === cityName;
|
|
47
|
-
});
|
|
46
|
+
const cities = selectedProvince && selectedProvince.cities;
|
|
47
|
+
const selectedCity = cities && cityName && cities.find(city => city.name === cityName);
|
|
48
48
|
if (mapLevel === MAP_LEVEL.CITY && selectedCity && selectedCity.disable_drill_down) {
|
|
49
49
|
return GEOLOCATION_GRANULARITY.CITY;
|
|
50
50
|
}
|
|
@@ -52,10 +52,12 @@ export var fixGeoGranularity = function fixGeoGranularity(_ref) {
|
|
|
52
52
|
// others
|
|
53
53
|
return getGeoGranularityByLevel(mapLevel);
|
|
54
54
|
};
|
|
55
|
-
export
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
export const fixMapGeoGranularity = chart => {
|
|
56
|
+
const {
|
|
57
|
+
type,
|
|
58
|
+
map_level,
|
|
59
|
+
map_location
|
|
60
|
+
} = chart;
|
|
59
61
|
if (type !== STAT_TYPE.MAP && type !== STAT_TYPE.MAP_BUBBLE) {
|
|
60
62
|
return chart.geolocation_granularity;
|
|
61
63
|
}
|
|
@@ -64,18 +66,16 @@ export var fixMapGeoGranularity = function fixMapGeoGranularity(chart) {
|
|
|
64
66
|
mapLocation: map_location
|
|
65
67
|
});
|
|
66
68
|
};
|
|
67
|
-
export
|
|
68
|
-
|
|
69
|
+
export const getRegionScaleOffsets = (mapLevel, mapLocation) => {
|
|
70
|
+
const countryScaleOffsets = {
|
|
69
71
|
scale_w: COUNTY_SCALE_WIDTH,
|
|
70
72
|
scale_h: COUNTY_SCALE_HEIGHT
|
|
71
73
|
};
|
|
72
74
|
switch (mapLevel) {
|
|
73
75
|
case MAP_LEVEL.PROVINCE:
|
|
74
76
|
{
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return province.name === provinceName;
|
|
78
|
-
});
|
|
77
|
+
const provinceName = mapLocation && mapLocation.province;
|
|
78
|
+
const province = provinceName && regions.find(province => province.name === provinceName);
|
|
79
79
|
if (!province) return countryScaleOffsets;
|
|
80
80
|
return {
|
|
81
81
|
scale_w: province.scale_w,
|
|
@@ -84,15 +84,11 @@ export var getRegionScaleOffsets = function getRegionScaleOffsets(mapLevel, mapL
|
|
|
84
84
|
}
|
|
85
85
|
case MAP_LEVEL.CITY:
|
|
86
86
|
{
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
var cityName = mapLocation.city;
|
|
93
|
-
var city = cityName && Array.isArray(cities) && cities.find(function (city) {
|
|
94
|
-
return city.name === cityName;
|
|
95
|
-
});
|
|
87
|
+
const provinceName = mapLocation && mapLocation.province;
|
|
88
|
+
const province = provinceName && regions.find(province => province.name === provinceName);
|
|
89
|
+
const cities = province && province.cities;
|
|
90
|
+
const cityName = mapLocation.city;
|
|
91
|
+
const city = cityName && Array.isArray(cities) && cities.find(city => city.name === cityName);
|
|
96
92
|
if (!city) return countryScaleOffsets;
|
|
97
93
|
return {
|
|
98
94
|
scale_w: city.scale_w,
|
package/es/utils/model.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { hasOwnProperty } from './object';
|
|
2
|
-
export
|
|
2
|
+
export const getChartConfigValueFromKey = (key, object) => {
|
|
3
3
|
if (!hasOwnProperty(object, key)) {
|
|
4
4
|
return null;
|
|
5
5
|
}
|
|
6
6
|
return object[key];
|
|
7
7
|
};
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
return hasOwnProperty(object, key);
|
|
11
|
-
});
|
|
8
|
+
export const getChartConfigValueFromKeys = (keys, object) => {
|
|
9
|
+
const existKey = keys.find(key => hasOwnProperty(object, key));
|
|
12
10
|
return existKey ? object[existKey] : null;
|
|
13
11
|
};
|
package/es/utils/object.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isValidElement } from 'react';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export const isSameObject = (a, b) => {
|
|
3
|
+
let k;
|
|
4
4
|
for (k in a) {
|
|
5
5
|
if (a.hasOwnProperty(k)) {
|
|
6
6
|
if (typeof a[k] === 'function' && typeof b[k] === 'function' || isValidElement(a[k]) && isValidElement(b[k])) {
|
|
@@ -18,9 +18,9 @@ export var isSameObject = function isSameObject(a, b) {
|
|
|
18
18
|
}
|
|
19
19
|
return true;
|
|
20
20
|
};
|
|
21
|
-
export
|
|
21
|
+
export const isEmptyObject = obj => {
|
|
22
22
|
return Object.keys(obj).length === 0 && obj.constructor === Object;
|
|
23
23
|
};
|
|
24
|
-
export
|
|
24
|
+
export const hasOwnProperty = (obj, prop) => {
|
|
25
25
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
26
|
};
|
package/es/utils/pivot-table.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { FORMULA_COLUMN_TYPES_MAP, isNumber } from 'dtable-store';
|
|
2
2
|
import { STATISTICS_COUNT_TYPE, SUMMARY_METHOD_MAP } from '../constants';
|
|
3
|
-
|
|
3
|
+
const getCellValueFromRow = (row, formulaRow, columnType, columnKey, sqlKey, isSqlQuery) => {
|
|
4
4
|
if (!isSqlQuery) {
|
|
5
5
|
if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
6
|
-
|
|
6
|
+
const cellValue = formulaRow[columnKey];
|
|
7
7
|
return Array.isArray(cellValue) ? cellValue[0] : cellValue;
|
|
8
8
|
}
|
|
9
9
|
return row[columnKey];
|
|
10
10
|
}
|
|
11
11
|
return row[sqlKey];
|
|
12
12
|
};
|
|
13
|
-
export
|
|
13
|
+
export const getPivotTableSummaryTotal = (summaryColumnType, summaryColumnKey, sqlKey, summaryType, summaryMethod, rows, formulaRows, isSqlQuery) => {
|
|
14
14
|
if (summaryType === STATISTICS_COUNT_TYPE.COUNT) {
|
|
15
15
|
return rows.length;
|
|
16
16
|
}
|
|
@@ -20,11 +20,11 @@ export var getPivotTableSummaryTotal = function getPivotTableSummaryTotal(summar
|
|
|
20
20
|
switch (summaryMethod) {
|
|
21
21
|
case SUMMARY_METHOD_MAP.Distinct_values:
|
|
22
22
|
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
rows.forEach(
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
let count = 0;
|
|
24
|
+
let existMap = {};
|
|
25
|
+
rows.forEach(row => {
|
|
26
|
+
const formulaRow = formulaRows && formulaRows[row._id];
|
|
27
|
+
let cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
28
28
|
if (!cellValue) {
|
|
29
29
|
if (cellValue === 0) {
|
|
30
30
|
cellValue = '0';
|
|
@@ -42,11 +42,11 @@ export var getPivotTableSummaryTotal = function getPivotTableSummaryTotal(summar
|
|
|
42
42
|
case SUMMARY_METHOD_MAP.Sum:
|
|
43
43
|
case SUMMARY_METHOD_MAP.Mean:
|
|
44
44
|
{
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
rows.forEach(
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
let sum = 0;
|
|
46
|
+
let validNumbersCount = 0;
|
|
47
|
+
rows.forEach(row => {
|
|
48
|
+
const formulaRow = formulaRows && formulaRows[row._id];
|
|
49
|
+
let cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
50
50
|
if (isNumber(cellValue)) {
|
|
51
51
|
validNumbersCount++;
|
|
52
52
|
sum += cellValue;
|
|
@@ -65,22 +65,22 @@ export var getPivotTableSummaryTotal = function getPivotTableSummaryTotal(summar
|
|
|
65
65
|
if (rows.length === 0) {
|
|
66
66
|
return 0;
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
let result = rows.reduce((current, next) => {
|
|
69
|
+
const currentFormulaRow = formulaRows && formulaRows[current._id];
|
|
70
|
+
const nextFormulaRow = formulaRows && formulaRows[next._id];
|
|
71
|
+
let currentValue = getCellValueFromRow(current, currentFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
72
|
+
let nextValue = getCellValueFromRow(next, nextFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
73
73
|
if (!nextValue && nextValue !== 0) {
|
|
74
74
|
return current;
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
let isNextGreater = currentValue < nextValue;
|
|
77
77
|
if (summaryMethod === SUMMARY_METHOD_MAP.Min) {
|
|
78
78
|
return isNextGreater ? current : next;
|
|
79
79
|
} else {
|
|
80
80
|
return isNextGreater ? next : current;
|
|
81
81
|
}
|
|
82
82
|
});
|
|
83
|
-
|
|
83
|
+
const formulaRow = formulaRows && formulaRows[result._id];
|
|
84
84
|
return getCellValueFromRow(result, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
85
85
|
}
|
|
86
86
|
default:
|
package/es/utils/row-utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CellType, COLLABORATOR_COLUMN_TYPES, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, isNumber, getNumberDisplayString } from 'dtable-store';
|
|
2
2
|
import { getClientFormulaDisplayString } from '../utils';
|
|
3
|
-
export
|
|
3
|
+
export const isEmptyGeolocationCell = (cellValue, format) => {
|
|
4
4
|
if (!cellValue) return null;
|
|
5
5
|
if (format === 'lng_lat') {
|
|
6
6
|
return (cellValue.lng || cellValue.lng === 0) && (cellValue.lat || cellValue.lat === 0);
|
|
@@ -10,40 +10,47 @@ export var isEmptyGeolocationCell = function isEmptyGeolocationCell(cellValue, f
|
|
|
10
10
|
}
|
|
11
11
|
return cellValue.province;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export const isValidRow = (row, formulaRow, column, includeEmpty) => {
|
|
14
|
+
const {
|
|
15
|
+
type: columnType,
|
|
16
|
+
key: columnKey
|
|
17
|
+
} = column;
|
|
16
18
|
if (includeEmpty || columnType === CellType.CHECKBOX) return true;
|
|
17
19
|
if (columnType === CellType.GEOLOCATION) {
|
|
18
|
-
|
|
20
|
+
const {
|
|
21
|
+
geo_format
|
|
22
|
+
} = column.data;
|
|
19
23
|
return isEmptyGeolocationCell(row[columnKey], geo_format);
|
|
20
24
|
}
|
|
21
|
-
|
|
25
|
+
let cellValue = row[columnKey];
|
|
22
26
|
if (FORMULA_COLUMN_TYPES_MAP[columnType] || columnType === CellType.LINK) {
|
|
23
27
|
cellValue = formulaRow ? formulaRow[columnKey] : null;
|
|
24
28
|
}
|
|
25
29
|
return cellValue || cellValue === 0;
|
|
26
30
|
};
|
|
27
|
-
export
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
export const getFormattedLabel = (column, name, collaborators) => {
|
|
32
|
+
let {
|
|
33
|
+
type: columnType,
|
|
34
|
+
data: columnData
|
|
35
|
+
} = column;
|
|
30
36
|
if (columnType === CellType.SINGLE_SELECT || columnType === CellType.MULTIPLE_SELECT) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
let options = columnData ? columnData.options : [];
|
|
38
|
+
let selectedOption = options.find(o => {
|
|
39
|
+
let id = name;
|
|
34
40
|
if (Array.isArray(name)) {
|
|
35
41
|
id = name[0];
|
|
36
42
|
}
|
|
37
43
|
return o.id === id;
|
|
38
44
|
});
|
|
39
|
-
|
|
40
|
-
optionName
|
|
45
|
+
let {
|
|
46
|
+
name: optionName
|
|
47
|
+
} = selectedOption || {};
|
|
41
48
|
if (selectedOption) {
|
|
42
49
|
return optionName;
|
|
43
50
|
}
|
|
44
51
|
} else if (columnType === CellType.COLLABORATOR) {
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
let collaborator = collaborators.find(item => {
|
|
53
|
+
let email = name;
|
|
47
54
|
if (Array.isArray(name)) {
|
|
48
55
|
email = name[0];
|
|
49
56
|
}
|
|
@@ -56,26 +63,25 @@ export var getFormattedLabel = function getFormattedLabel(column, name, collabor
|
|
|
56
63
|
if (name === 'anonymous') {
|
|
57
64
|
return name;
|
|
58
65
|
} else {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (_collaborator) {
|
|
63
|
-
return _collaborator.name;
|
|
66
|
+
let collaborator = collaborators.find(item => item.email === name);
|
|
67
|
+
if (collaborator) {
|
|
68
|
+
return collaborator.name;
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
} else if (columnType === CellType.LINK) {
|
|
67
72
|
return getClientFormulaDisplayString(Array.isArray(name) ? name : [name], columnData, {
|
|
68
|
-
collaborators
|
|
73
|
+
collaborators
|
|
69
74
|
});
|
|
70
75
|
} else if (columnType === CellType.CHECKBOX) {
|
|
71
76
|
return name == 'true' ? 'Checked' : 'Unchecked';
|
|
72
77
|
} else if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
73
|
-
|
|
74
|
-
result_type
|
|
75
|
-
array_type
|
|
78
|
+
const {
|
|
79
|
+
result_type,
|
|
80
|
+
array_type
|
|
81
|
+
} = columnData || {};
|
|
76
82
|
if (!name && !isNumber(name)) return '';
|
|
77
83
|
if (result_type === FORMULA_RESULT_TYPE.NUMBER) {
|
|
78
|
-
|
|
84
|
+
const valueNumber = parseFloat(name);
|
|
79
85
|
return isNumber(valueNumber) ? getNumberDisplayString(valueNumber, column.data) : name;
|
|
80
86
|
}
|
|
81
87
|
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
@@ -83,15 +89,15 @@ export var getFormattedLabel = function getFormattedLabel(column, name, collabor
|
|
|
83
89
|
if ([CellType.CREATOR, CellType.LAST_MODIFIER].includes(array_type) && name === 'anonymous') {
|
|
84
90
|
return name;
|
|
85
91
|
}
|
|
86
|
-
|
|
87
|
-
|
|
92
|
+
const collaborator = collaborators.find(item => {
|
|
93
|
+
let email = name;
|
|
88
94
|
if (Array.isArray(name)) {
|
|
89
95
|
email = name[0];
|
|
90
96
|
}
|
|
91
97
|
return item.email === email;
|
|
92
98
|
});
|
|
93
|
-
if (
|
|
94
|
-
return
|
|
99
|
+
if (collaborator) {
|
|
100
|
+
return collaborator.name;
|
|
95
101
|
}
|
|
96
102
|
}
|
|
97
103
|
}
|
|
@@ -103,10 +109,12 @@ export var getFormattedLabel = function getFormattedLabel(column, name, collabor
|
|
|
103
109
|
};
|
|
104
110
|
export function getCellValue(row, formulaRow, column) {
|
|
105
111
|
if (!column) return null;
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
const {
|
|
113
|
+
type,
|
|
114
|
+
key
|
|
115
|
+
} = column;
|
|
108
116
|
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
109
|
-
|
|
117
|
+
const cellValue = formulaRow && formulaRow[key];
|
|
110
118
|
if (Array.isArray(cellValue)) {
|
|
111
119
|
return cellValue[0];
|
|
112
120
|
}
|
package/es/utils/search.js
CHANGED
|
@@ -1,43 +1,41 @@
|
|
|
1
1
|
import dayjs from 'dayjs';
|
|
2
2
|
import { CellType, getNumberDisplayString, getMultipleOptionName, getCollaboratorsName, getGeolocationDisplayString } from 'dtable-store';
|
|
3
3
|
import { getSelectColumnOptions } from './column';
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
rows.forEach(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
const SUPPORT_SEARCH_COLUMN_TYPES = [CellType.DATE, CellType.TEXT, CellType.LONG_TEXT, CellType.NUMBER, CellType.URL, CellType.EMAIL, CellType.SINGLE_SELECT, CellType.CTIME, CellType.MTIME, CellType.MULTIPLE_SELECT, CellType.LAST_MODIFIER, CellType.CREATOR, CellType.COLLABORATOR, CellType.LINK, CellType.FORMULA, CellType.LINK_FORMULA, CellType.AUTO_NUMBER, CellType.GEOLOCATION, CellType.DURATION];
|
|
5
|
+
export const searchRows = (rows, columns, val, processRow) => {
|
|
6
|
+
let dtableCollaborators = window.app.collaboratorsCache || [];
|
|
7
|
+
let collaborators = window.app.state.collaborators;
|
|
8
|
+
let searchResult = [];
|
|
9
|
+
rows.forEach(row => {
|
|
10
|
+
let column = columns.find(column => {
|
|
11
|
+
const {
|
|
12
|
+
type: columnType,
|
|
13
|
+
key: columnKey
|
|
14
|
+
} = column;
|
|
13
15
|
if (!SUPPORT_SEARCH_COLUMN_TYPES.includes(columnType)) {
|
|
14
16
|
return false;
|
|
15
17
|
}
|
|
16
|
-
|
|
18
|
+
const cellValue = row[columnKey];
|
|
17
19
|
if (cellValue) {
|
|
18
|
-
|
|
20
|
+
let text;
|
|
19
21
|
if (columnType === CellType.LONG_TEXT) {
|
|
20
22
|
text = cellValue.text;
|
|
21
23
|
} else if (columnType === CellType.NUMBER || columnType === CellType.DURATION) {
|
|
22
24
|
text = getNumberDisplayString(cellValue, column.data);
|
|
23
25
|
} else if (columnType === CellType.SINGLE_SELECT) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return option.id === cellValue;
|
|
27
|
-
});
|
|
26
|
+
const options = getSelectColumnOptions(column);
|
|
27
|
+
const option = options.find(option => option.id === cellValue);
|
|
28
28
|
text = option ? option.name : '';
|
|
29
29
|
} else if (columnType === CellType.MULTIPLE_SELECT) {
|
|
30
|
-
|
|
31
|
-
text = getMultipleOptionName(
|
|
30
|
+
const options = getSelectColumnOptions(column);
|
|
31
|
+
text = getMultipleOptionName(options, cellValue);
|
|
32
32
|
} else if (columnType === CellType.COLLABORATOR) {
|
|
33
33
|
text = getCollaboratorsName(collaborators, cellValue);
|
|
34
34
|
} else if (columnType === CellType.LAST_MODIFIER || columnType === CellType.CREATOR) {
|
|
35
35
|
if (cellValue === 'anonymous') {
|
|
36
36
|
text = cellValue;
|
|
37
37
|
} else {
|
|
38
|
-
|
|
39
|
-
return collaborator.email === cellValue;
|
|
40
|
-
});
|
|
38
|
+
let collaborator = collaborators.find(collaborator => collaborator.email === cellValue);
|
|
41
39
|
if (!collaborator) {
|
|
42
40
|
collaborator = dtableCollaborators[cellValue];
|
|
43
41
|
}
|