sea-chart 1.1.21 → 1.1.22-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-process-setter/data-setting-header.js +11 -0
- package/dist/components/data-process-setter/hide-column-setter.js +79 -0
- package/dist/components/data-process-setter/index.js +4 -0
- package/dist/components/data-process-setter/sort-setter.js +75 -0
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +60 -0
- package/dist/components/popover/hide-column-popover/hide-column-popover.css +38 -0
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +208 -0
- package/dist/components/popover/sort-popover/sort-popover-widgets/sort-utils.js +71 -0
- package/dist/components/popover/sort-popover/sort-popover.css +83 -0
- package/dist/components/popover/sort-popover/sort-popover.js +290 -0
- package/dist/components/types-dialog/index.js +5 -2
- package/dist/constants/common-constants.js +3 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/type-image.js +2 -1
- package/dist/constants/type.js +5 -3
- package/dist/context.js +1 -1
- package/dist/locale/lang/de.js +17 -2
- package/dist/locale/lang/en.js +16 -1
- package/dist/locale/lang/es.js +16 -1
- package/dist/locale/lang/fr.js +17 -2
- package/dist/locale/lang/pt.js +16 -1
- package/dist/locale/lang/ru.js +16 -1
- package/dist/locale/lang/zh_CN.js +16 -1
- package/dist/model/index.js +3 -1
- package/dist/model/table-element.js +22 -0
- package/dist/settings/data-settings.js +5 -0
- package/dist/settings/table-element-settings/components/data-filter.css +17 -0
- package/dist/settings/table-element-settings/components/data-filter.js +89 -0
- package/dist/settings/table-element-settings/data-settings.js +100 -0
- package/dist/settings/table-element-settings/index.css +190 -0
- package/dist/settings/table-element-settings/index.js +2 -0
- package/dist/settings/widgets/chart-type/index.js +3 -1
- package/dist/settings/widgets/common-data-settings.js +1 -0
- package/dist/settings/widgets/data-filter/index.css +1 -1
- package/dist/utils/chart-utils/base-utils.js +7 -1
- package/dist/utils/chart-utils/index.js +5 -5
- package/dist/utils/chart-utils/original-data-utils/index.js +2 -2
- package/dist/utils/chart-utils/sql-statistics-utils.js +10 -4
- package/dist/utils/chart.js +9 -1
- package/dist/utils/hotkey.js +5 -0
- package/dist/utils/row-utils.js +10 -1
- package/dist/utils/sql/chart-data-sql.js +4 -0
- package/dist/utils/sql/column-2-sql-column.js +4 -0
- package/dist/view/index.css +5 -1
- package/dist/view/index.js +56 -14
- package/dist/view/wrapper/bar-group.js +1 -1
- package/dist/view/wrapper/index.js +7 -0
- package/dist/view/wrapper/table-element/components/dataset-utils.js +123 -0
- package/dist/view/wrapper/table-element/components/formatter.js +309 -0
- package/dist/view/wrapper/table-element/components/formula-formatter.js +36 -0
- package/dist/view/wrapper/table-element/components/link-formatter.js +269 -0
- package/dist/view/wrapper/table-element/components/record.js +67 -0
- package/dist/view/wrapper/table-element/components/records-body.js +117 -0
- package/dist/view/wrapper/table-element/components/records-header/index.js +41 -0
- package/dist/view/wrapper/table-element/components/records-header/records-header-cell.js +51 -0
- package/dist/view/wrapper/table-element/components/records.js +117 -0
- package/dist/view/wrapper/table-element/components/resize-column-handle/index.css +11 -0
- package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +48 -0
- package/dist/view/wrapper/table-element/components/value-display-utils.js +13 -0
- package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.css +12 -0
- package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.js +36 -0
- package/dist/view/wrapper/table-element/css/index.css +239 -0
- package/dist/view/wrapper/table-element/index.js +101 -0
- package/package.json +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import _DTableFiltersPopover from "dtable-ui-component/lib/DTableFiltersPopover";
|
|
2
|
+
import React, { useCallback, useContext, useMemo, useState } from 'react';
|
|
3
|
+
import { getTableById } from 'dtable-utils';
|
|
4
|
+
import { eventStopPropagation, generatorKey } from '../../../utils';
|
|
5
|
+
import intl from '../../../intl';
|
|
6
|
+
import context from '../../../context';
|
|
7
|
+
import { DepartmentsContext } from '../../../utils/contexts';
|
|
8
|
+
import { CHART_TYPE } from '../../../constants';
|
|
9
|
+
import './data-filter.css';
|
|
10
|
+
const DataFilter = _ref => {
|
|
11
|
+
var _availableFilters;
|
|
12
|
+
let {
|
|
13
|
+
chart,
|
|
14
|
+
tables,
|
|
15
|
+
onChange
|
|
16
|
+
} = _ref;
|
|
17
|
+
const [isFilterSetterShow, setIsFilterSetterShow] = useState(false);
|
|
18
|
+
const {
|
|
19
|
+
departments
|
|
20
|
+
} = useContext(DepartmentsContext);
|
|
21
|
+
const {
|
|
22
|
+
config
|
|
23
|
+
} = chart;
|
|
24
|
+
const {
|
|
25
|
+
type,
|
|
26
|
+
table_id,
|
|
27
|
+
shown_column_keys,
|
|
28
|
+
filters,
|
|
29
|
+
filter_conjunction
|
|
30
|
+
} = config;
|
|
31
|
+
let availableFilters = [];
|
|
32
|
+
// some of the filters of TABLE_ELEMENT maybe one of the hidden columns, so we need to filter them out
|
|
33
|
+
if (shown_column_keys && type === CHART_TYPE.TABLE_ELEMENT) {
|
|
34
|
+
availableFilters = filters === null || filters === void 0 ? void 0 : filters.filter(filter => shown_column_keys.includes(filter.column_key));
|
|
35
|
+
} else {
|
|
36
|
+
availableFilters = filters;
|
|
37
|
+
}
|
|
38
|
+
const toggleFilterPopover = useCallback(event => {
|
|
39
|
+
eventStopPropagation(event);
|
|
40
|
+
setIsFilterSetterShow(!isFilterSetterShow);
|
|
41
|
+
}, [isFilterSetterShow]);
|
|
42
|
+
const updateFilters = useCallback(update => {
|
|
43
|
+
onChange && onChange(update);
|
|
44
|
+
}, [onChange]);
|
|
45
|
+
const id = useMemo(() => {
|
|
46
|
+
return 'sea-chart-data-filter-' + generatorKey();
|
|
47
|
+
}, []);
|
|
48
|
+
const shownColumns = useMemo(() => {
|
|
49
|
+
const table = getTableById(tables, table_id);
|
|
50
|
+
if (!table || !table.columns) return [];
|
|
51
|
+
if (!shown_column_keys) {
|
|
52
|
+
return table.columns;
|
|
53
|
+
} else {
|
|
54
|
+
return table.columns.filter(column => shown_column_keys.includes(column.key));
|
|
55
|
+
}
|
|
56
|
+
}, [shown_column_keys, table_id, tables]);
|
|
57
|
+
const filterLength = ((_availableFilters = availableFilters) === null || _availableFilters === void 0 ? void 0 : _availableFilters.length) || 0;
|
|
58
|
+
const filterMessage = useMemo(() => {
|
|
59
|
+
let filterMessage = intl.get('Filter');
|
|
60
|
+
if (filterLength === 1) {
|
|
61
|
+
filterMessage = intl.get('1 Filter');
|
|
62
|
+
} else if (filterLength > 1) {
|
|
63
|
+
filterMessage = filterLength + ' ' + intl.get('Filters');
|
|
64
|
+
}
|
|
65
|
+
return filterMessage;
|
|
66
|
+
}, [filterLength]);
|
|
67
|
+
const filterConjunction = useMemo(() => {
|
|
68
|
+
return filter_conjunction || 'And';
|
|
69
|
+
}, [filter_conjunction]);
|
|
70
|
+
const collaborators = context.getCollaboratorsFromCache();
|
|
71
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
72
|
+
id: id,
|
|
73
|
+
className: "sea-chart-data-filter mb-1",
|
|
74
|
+
onClick: toggleFilterPopover
|
|
75
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
76
|
+
className: "dtable-font dtable-icon-filter"
|
|
77
|
+
}), /*#__PURE__*/React.createElement("span", null, filterMessage)), isFilterSetterShow && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_DTableFiltersPopover, {
|
|
78
|
+
isNeedSubmit: true,
|
|
79
|
+
target: id,
|
|
80
|
+
filters: availableFilters,
|
|
81
|
+
filterConjunction: filterConjunction,
|
|
82
|
+
columns: shownColumns,
|
|
83
|
+
departments: departments,
|
|
84
|
+
collaborators: collaborators,
|
|
85
|
+
hidePopover: toggleFilterPopover,
|
|
86
|
+
update: updateFilters
|
|
87
|
+
})));
|
|
88
|
+
};
|
|
89
|
+
export default DataFilter;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import { getTableById } from 'dtable-utils';
|
|
3
|
+
import SelectTable from '../widgets/select-table/index.js';
|
|
4
|
+
import StatisticType from '../widgets/chart-type';
|
|
5
|
+
import { generateChartConfig } from '../../utils/chart.js';
|
|
6
|
+
import { SortSetter, DataSettingHeader, HideColumnSetter } from '../../components/data-process-setter';
|
|
7
|
+
import Divider from '../widgets/divider/index.js';
|
|
8
|
+
import DataFilter from './components/data-filter.js';
|
|
9
|
+
import './index.css';
|
|
10
|
+
export default function TableElementDataSetting(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
tables,
|
|
13
|
+
chart,
|
|
14
|
+
onChange
|
|
15
|
+
} = _ref;
|
|
16
|
+
const {
|
|
17
|
+
config
|
|
18
|
+
} = chart;
|
|
19
|
+
const {
|
|
20
|
+
table_id,
|
|
21
|
+
shown_column_keys,
|
|
22
|
+
sorts
|
|
23
|
+
} = config;
|
|
24
|
+
const onTableChange = option => {
|
|
25
|
+
const newTableId = option.value;
|
|
26
|
+
if (newTableId === table_id) return;
|
|
27
|
+
const selectedTable = getTableById(tables, newTableId);
|
|
28
|
+
const shown_column_keys = selectedTable.columns.map(col => col.key);
|
|
29
|
+
// initially show all columns
|
|
30
|
+
let newChartConfig = {
|
|
31
|
+
table_id: newTableId,
|
|
32
|
+
shown_column_keys,
|
|
33
|
+
sorts: [],
|
|
34
|
+
groupbys: [],
|
|
35
|
+
filters: [],
|
|
36
|
+
filter_conjunction: 'And'
|
|
37
|
+
};
|
|
38
|
+
onChange && onChange(newChartConfig);
|
|
39
|
+
};
|
|
40
|
+
const onTypeChange = newConfig => {
|
|
41
|
+
onChange && onChange(newConfig);
|
|
42
|
+
};
|
|
43
|
+
const onFiltersChange = newConfig => {
|
|
44
|
+
onChange && onChange(newConfig);
|
|
45
|
+
};
|
|
46
|
+
const onSortsChange = sorts => {
|
|
47
|
+
onChange && onChange({
|
|
48
|
+
sorts
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const onGroupbyChange = groupbys => {
|
|
52
|
+
onChange && onChange({
|
|
53
|
+
groupbys
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
const onHideColumnChange = shownColumnKeys => {
|
|
57
|
+
onChange && onChange({
|
|
58
|
+
shown_column_keys: shownColumnKeys
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const generateConfig = useCallback(newConfig => {
|
|
62
|
+
return generateChartConfig(newConfig, tables);
|
|
63
|
+
}, [tables]);
|
|
64
|
+
const selectedTable = getTableById(tables, table_id) || {};
|
|
65
|
+
const {
|
|
66
|
+
columns = []
|
|
67
|
+
} = selectedTable;
|
|
68
|
+
let available_columns;
|
|
69
|
+
// if shown_column_keys is not set, then show all columns
|
|
70
|
+
if (!shown_column_keys) {
|
|
71
|
+
available_columns = columns;
|
|
72
|
+
} else {
|
|
73
|
+
available_columns = columns.filter(column => shown_column_keys.includes(column.key));
|
|
74
|
+
}
|
|
75
|
+
const availableColumnsKeys = available_columns.map(col => col.key);
|
|
76
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
77
|
+
className: "sea-chart-table-element-settings"
|
|
78
|
+
}, /*#__PURE__*/React.createElement(StatisticType, {
|
|
79
|
+
chart: chart,
|
|
80
|
+
generateChartConfig: generateConfig,
|
|
81
|
+
onChange: onTypeChange
|
|
82
|
+
}), /*#__PURE__*/React.createElement(SelectTable, {
|
|
83
|
+
tables: tables,
|
|
84
|
+
selectedTableId: table_id,
|
|
85
|
+
onChange: onTableChange
|
|
86
|
+
}), /*#__PURE__*/React.createElement(DataSettingHeader, null), /*#__PURE__*/React.createElement(DataFilter, {
|
|
87
|
+
tables: tables,
|
|
88
|
+
chart: chart,
|
|
89
|
+
onChange: onFiltersChange
|
|
90
|
+
}), /*#__PURE__*/React.createElement(SortSetter, {
|
|
91
|
+
isNeedSubmit: true,
|
|
92
|
+
sorts: sorts,
|
|
93
|
+
columns: available_columns,
|
|
94
|
+
onSortsChange: onSortsChange
|
|
95
|
+
}), /*#__PURE__*/React.createElement(HideColumnSetter, {
|
|
96
|
+
shownColumnKeys: availableColumnsKeys,
|
|
97
|
+
columns: columns,
|
|
98
|
+
onSettingUpdate: onHideColumnChange
|
|
99
|
+
}), /*#__PURE__*/React.createElement(Divider, null));
|
|
100
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
|
|
2
|
+
.sea-chart-table-element-settings {
|
|
3
|
+
flex: 1;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
min-height: 0;
|
|
7
|
+
/* padding: 16px 16px 50px; */
|
|
8
|
+
overflow: auto;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.sea-chart-table-element-settings .dtable-icon-use-help {
|
|
12
|
+
font-size: 14px;
|
|
13
|
+
color: #bdbdbd;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.seatable-page-settings-header .link-settings-return .dtable-icon-return {
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
color: #666666;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sea-chart-table-element-settings .setting-item .no-image-column-tip {
|
|
22
|
+
font-size: 13px;
|
|
23
|
+
color: #666666;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.sea-chart-table-element-settings .setting-item .custom-switch-description {
|
|
27
|
+
white-space: break-spaces;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* hidden column settings */
|
|
31
|
+
.field-settings {
|
|
32
|
+
margin: 8px 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.field-settings-header {
|
|
36
|
+
display: flex;
|
|
37
|
+
justify-content: space-between;
|
|
38
|
+
width: 100%;
|
|
39
|
+
padding: 0 17px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.field-settings-header .hide-all,
|
|
43
|
+
.field-settings-header .show-all {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
height: 28px;
|
|
48
|
+
background: #f5f5f5;
|
|
49
|
+
color: #666666;
|
|
50
|
+
border-radius: 3px;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.field-settings-header .hide-all:hover,
|
|
55
|
+
.field-settings-header .show-all:hover {
|
|
56
|
+
background: #e9e9e9;
|
|
57
|
+
color: #212529;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.hidden-column-popover .search-column {
|
|
61
|
+
height: 28px;
|
|
62
|
+
padding: 0 10px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.hidden-column-popover .search-column input {
|
|
66
|
+
width: 100%;
|
|
67
|
+
height: 28px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.field-settings .field-settings-body {
|
|
71
|
+
padding: 0.5rem 0;
|
|
72
|
+
max-height: 300px;
|
|
73
|
+
overflow-x: auto;
|
|
74
|
+
min-width: 260px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.field-settings .field-settings-body .custom-switch {
|
|
78
|
+
cursor: pointer;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.field-settings .field-settings-body > div {
|
|
82
|
+
font-size: 14px;
|
|
83
|
+
height: 30px;
|
|
84
|
+
line-height: 30px;
|
|
85
|
+
display: flex;
|
|
86
|
+
cursor: pointer;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.field-settings .field-settings-body > div:hover {
|
|
90
|
+
background: #f5f5f5;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.field-settings .empty-hidden-columns-container {
|
|
94
|
+
height: 80px;
|
|
95
|
+
width: 270px;
|
|
96
|
+
padding: 10px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.field-settings .empty-hidden-columns-list {
|
|
100
|
+
padding: 0.25rem;
|
|
101
|
+
font-size: 13px;
|
|
102
|
+
color: #666666;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.dtable-dropdown-menu .dropdown-item:hover .item-icon {
|
|
106
|
+
color: #fff;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.setting-item .filters-setting-btn,
|
|
110
|
+
.setting-item .groupbys-setting-btn {
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
width: 100%;
|
|
113
|
+
padding: 3px 4px;
|
|
114
|
+
border-radius: 4px;
|
|
115
|
+
line-height: 22px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.setting-item .filters-setting-btn:hover,
|
|
119
|
+
.setting-item .groupbys-setting-btn:hover {
|
|
120
|
+
background-color: #efefef;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.setting-item .filters-setting-btn .dtable-font,
|
|
124
|
+
.setting-item .groupbys-setting-btn .dtable-font,
|
|
125
|
+
.setting-item .column-read-only {
|
|
126
|
+
font-size: 14px;
|
|
127
|
+
color: #666666;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.setting-item-permission-title:hover {
|
|
131
|
+
cursor: pointer;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.setting-item-permission-title.disable:hover {
|
|
135
|
+
cursor: default;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.setting-item .filters-setting-btn.disable:hover,
|
|
139
|
+
.setting-item .setting-item-permission-title.disabled:hover {
|
|
140
|
+
cursor: not-allowed;
|
|
141
|
+
color: hsl(0, 0%, 60%);
|
|
142
|
+
background-color: hsl(0, 0%, 95%);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.setting-item .filters-setting-btn.disable:hover .column-read-only,
|
|
146
|
+
.setting-item .filters-setting-btn.disable .dtable-font {
|
|
147
|
+
color: hsl(0, 0%, 60%);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.setting-item.column-permission .dtable-icon-permissions {
|
|
151
|
+
color: #666666;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.setting-item .setting-item-permission-title .dtable-icon-right {
|
|
155
|
+
color: #ccc;
|
|
156
|
+
font-size: 10px;
|
|
157
|
+
cursor: pointer;
|
|
158
|
+
transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.setting-item .setting-item-permission-title .dtable-icon-right:hover {
|
|
162
|
+
color: #666666;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.setting-item .setting-item-permission-title .dtable-icon-right.rotate {
|
|
166
|
+
transform: rotate(90deg);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.setting-item .setting-item-permission-title.disabled {
|
|
170
|
+
padding: 3px 4px;
|
|
171
|
+
border-radius: 4px;
|
|
172
|
+
line-height: 22px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.setting-item .check-record-format-switch .custom-switch .custom-switch-description {
|
|
176
|
+
width: 230px;
|
|
177
|
+
white-space: break-spaces;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@media (max-width: 768px) {
|
|
181
|
+
.seatable-app .seatable-page-settings-container {
|
|
182
|
+
float: right;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* note setting */
|
|
187
|
+
.seatable-app .seatable-page-settings-content .note-setting-textarea {
|
|
188
|
+
min-height: 100px;
|
|
189
|
+
margin-top: 4px;
|
|
190
|
+
}
|
|
@@ -9,7 +9,8 @@ const ChartType = _ref => {
|
|
|
9
9
|
let {
|
|
10
10
|
chart,
|
|
11
11
|
generateChartConfig,
|
|
12
|
-
onChange
|
|
12
|
+
onChange,
|
|
13
|
+
dataSources
|
|
13
14
|
} = _ref;
|
|
14
15
|
const [isDialogShow, setDialogShow] = useState(false);
|
|
15
16
|
const openTypesDialog = useCallback(event => {
|
|
@@ -55,6 +56,7 @@ const ChartType = _ref => {
|
|
|
55
56
|
symbol: "type-change",
|
|
56
57
|
className: "sea-chart-type-icon"
|
|
57
58
|
})))), isDialogShow && /*#__PURE__*/React.createElement(TypesDialog, {
|
|
59
|
+
dataSources: dataSources,
|
|
58
60
|
type: type,
|
|
59
61
|
onToggle: closeTypesDialog,
|
|
60
62
|
onChange: onTypeChange
|
|
@@ -47,6 +47,7 @@ const CommonDataSettings = _ref => {
|
|
|
47
47
|
table_id
|
|
48
48
|
} = chart.config;
|
|
49
49
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StatisticType, {
|
|
50
|
+
dataSources: dataSources,
|
|
50
51
|
chart: chart,
|
|
51
52
|
generateChartConfig: generateConfig,
|
|
52
53
|
onChange: onChange
|
|
@@ -2,6 +2,7 @@ var _BaseUtils;
|
|
|
2
2
|
import shallowEqual from 'shallowequal';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import { CellType, COLLABORATOR_COLUMN_TYPES, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, getDateDisplayString, getNumberDisplayString, getOption, getPrecisionNumber, getTableById, getTableColumnByKey, isNumber, isNumericColumn, isDateColumn, sortText, sortNumber, sortDate, sortSingleSelect, sortFormula, getColumnOptions, DateUtils, getGeolocationDisplayString, getFormulaDisplayString, isArchiveView, getViewById, MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP } from 'dtable-utils';
|
|
5
|
+
import { isEqual } from 'lodash-es';
|
|
5
6
|
import { PIE_CHART_COLORS, CHART_SUMMARY_TYPE, CHART_SUPPORT_SORT_COLUMNS, CHART_TYPE, CHART_STYLE_SETTING_KEYS, DEFAULT_LABEL_FONT_SIZE, DEFAULT_NUMBER_FORMAT_OBJECT, X_AXIS_IS_GROUPBY_COLUMN_KEY_CHART_TYPES, STYLE_COLORS, CHART_DATA_SORT_TYPE, CHART_Y_GROUP_TYPE, HORIZONTAL_BAR_CHART_TYPES, COMPLTETELESS_CHART_TYPES } from '../../constants';
|
|
6
7
|
import { getClientFormulaDisplayString } from '../cell-format-utils';
|
|
7
8
|
import { getKnownCollaboratorByEmail, generateDefaultUser, getUsers } from '../collaborator-utils';
|
|
@@ -58,6 +59,11 @@ BaseUtils.isValidExistChart = (tables, chart) => {
|
|
|
58
59
|
} = config;
|
|
59
60
|
const table = getTableById(tables, table_id);
|
|
60
61
|
if (!table) return false;
|
|
62
|
+
|
|
63
|
+
// if table exists then it's a valid TABLE_ELEMENT chart
|
|
64
|
+
if (type === CHART_TYPE.TABLE_ELEMENT) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
61
67
|
if (type === CHART_TYPE.SCATTER) {
|
|
62
68
|
const {
|
|
63
69
|
column_groupby_column_key
|
|
@@ -384,7 +390,7 @@ BaseUtils.isChartStyleChange = (preChartElement, curChartElement) => {
|
|
|
384
390
|
if ((preChartElement === null || preChartElement === void 0 ? void 0 : (_preChartElement$heig = preChartElement.height) === null || _preChartElement$heig === void 0 ? void 0 : _preChartElement$heig.value) !== (curChartElement === null || curChartElement === void 0 ? void 0 : (_curChartElement$heig = curChartElement.height) === null || _curChartElement$heig === void 0 ? void 0 : _curChartElement$heig.value)) return true;
|
|
385
391
|
if ((preChartElement === null || preChartElement === void 0 ? void 0 : preChartElement.left_in_unit) !== (curChartElement === null || curChartElement === void 0 ? void 0 : curChartElement.left_in_unit)) return true;
|
|
386
392
|
if ((preChartElement === null || preChartElement === void 0 ? void 0 : preChartElement.width_in_unit) !== (curChartElement === null || curChartElement === void 0 ? void 0 : curChartElement.width_in_unit)) return true;
|
|
387
|
-
if (!
|
|
393
|
+
if (!isEqual(preChartElement.style_config, curChartElement.style_config)) return true;
|
|
388
394
|
return !CHART_STYLE_SETTING_KEYS.every(key => preChartElement.config[key] === curChartElement.config[key]);
|
|
389
395
|
};
|
|
390
396
|
BaseUtils.isChartTypeChange = (preChartElement, curChartElement) => {
|
|
@@ -15,7 +15,7 @@ ChartUtils.calculateChart = (chart, value, callback) => {
|
|
|
15
15
|
tables: value.tables,
|
|
16
16
|
onSuccess: async function (res) {
|
|
17
17
|
var _res$data;
|
|
18
|
-
let dataSources = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SQLStatisticsUtils.
|
|
18
|
+
let dataSources = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SQLStatisticsUtils.DATA_SOURCE;
|
|
19
19
|
const {
|
|
20
20
|
success,
|
|
21
21
|
error_message
|
|
@@ -25,7 +25,7 @@ ChartUtils.calculateChart = (chart, value, callback) => {
|
|
|
25
25
|
callback && callback(errMsg, '', null);
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
if (dataSources === OriginalDataUtils.
|
|
28
|
+
if (dataSources === OriginalDataUtils.DATA_SOURCE) {
|
|
29
29
|
OriginalDataUtils.calculateChart(chart, value, callback);
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
@@ -49,10 +49,10 @@ ChartUtils.calculateStaticChart = (chart, value, statisticalResult, callback) =>
|
|
|
49
49
|
const {
|
|
50
50
|
data_sources: dataSources
|
|
51
51
|
} = statisticalResult;
|
|
52
|
-
if (dataSources === OriginalDataUtils.
|
|
52
|
+
if (dataSources === OriginalDataUtils.DATA_SOURCE) {
|
|
53
53
|
OriginalDataUtils.calculateChart(chart, value, callback);
|
|
54
|
-
|
|
54
|
+
} else {
|
|
55
|
+
SQLStatisticsUtils.calculateStaticChart(chart, value, statisticalResult, callback);
|
|
55
56
|
}
|
|
56
|
-
SQLStatisticsUtils.calculateStaticChart(chart, value, statisticalResult, callback);
|
|
57
57
|
};
|
|
58
58
|
export { BaseUtils, ChartUtils };
|
|
@@ -37,7 +37,7 @@ const calculatorMap = {
|
|
|
37
37
|
};
|
|
38
38
|
class OriginalDataUtils {}
|
|
39
39
|
_OriginalDataUtils = OriginalDataUtils;
|
|
40
|
-
OriginalDataUtils.
|
|
40
|
+
OriginalDataUtils.DATA_SOURCE = 'original_data';
|
|
41
41
|
OriginalDataUtils.isValidExistChart = (tables, chart) => {
|
|
42
42
|
const isValid = BaseUtils.isValidExistChart(tables || [], chart);
|
|
43
43
|
if (!isValid) return false;
|
|
@@ -82,7 +82,7 @@ OriginalDataUtils.calculateChart = async (chart, value, callback) => {
|
|
|
82
82
|
const chartTableColumns = table.columns;
|
|
83
83
|
return callback && callback('', '', {
|
|
84
84
|
result,
|
|
85
|
-
data_sources: _OriginalDataUtils.
|
|
85
|
+
data_sources: _OriginalDataUtils.DATA_SOURCE,
|
|
86
86
|
groupbyColumn,
|
|
87
87
|
columnGroupbyColumn,
|
|
88
88
|
summaryColumn,
|
|
@@ -14,7 +14,7 @@ import { convertQuarterToDate } from '../date-translate';
|
|
|
14
14
|
import BaseUtils, { findIfColumnDataIsArray } from './base-utils';
|
|
15
15
|
class SQLStatisticsUtils {}
|
|
16
16
|
_SQLStatisticsUtils = SQLStatisticsUtils;
|
|
17
|
-
SQLStatisticsUtils.
|
|
17
|
+
SQLStatisticsUtils.DATA_SOURCE = 'sql_statistics';
|
|
18
18
|
SQLStatisticsUtils.getGroupLabelFromDB = async (cellValue, column, chart, isPivot) => {
|
|
19
19
|
const dateGranularity = BaseUtils.getDateGranularityByType(chart);
|
|
20
20
|
const {
|
|
@@ -1527,6 +1527,12 @@ SQLStatisticsUtils.sqlResult2JavaScript = async (chart, sqlRows, chartSQLMap, co
|
|
|
1527
1527
|
type
|
|
1528
1528
|
} = chart.config;
|
|
1529
1529
|
switch (type) {
|
|
1530
|
+
case CHART_TYPE.TABLE_ELEMENT:
|
|
1531
|
+
{
|
|
1532
|
+
return {
|
|
1533
|
+
result: sqlRows
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1530
1536
|
case CHART_TYPE.TABLE:
|
|
1531
1537
|
{
|
|
1532
1538
|
sqlRows = BaseUtils.recalculateAvg(sqlRows);
|
|
@@ -2000,7 +2006,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2000
2006
|
}
|
|
2001
2007
|
callback && callback('', '', {
|
|
2002
2008
|
result,
|
|
2003
|
-
data_sources: _SQLStatisticsUtils.
|
|
2009
|
+
data_sources: _SQLStatisticsUtils.DATA_SOURCE,
|
|
2004
2010
|
groupbyColumn,
|
|
2005
2011
|
columnGroupbyColumn,
|
|
2006
2012
|
summaryColumn,
|
|
@@ -2024,7 +2030,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2024
2030
|
}
|
|
2025
2031
|
callback && callback('', '', {
|
|
2026
2032
|
...chartResult,
|
|
2027
|
-
data_sources: _SQLStatisticsUtils.
|
|
2033
|
+
data_sources: _SQLStatisticsUtils.DATA_SOURCE,
|
|
2028
2034
|
groupbyColumn,
|
|
2029
2035
|
columnGroupbyColumn,
|
|
2030
2036
|
summaryColumn,
|
|
@@ -2046,7 +2052,7 @@ SQLStatisticsUtils.calculateStaticChart = (chart, value, statisticalResult, call
|
|
|
2046
2052
|
const {
|
|
2047
2053
|
type
|
|
2048
2054
|
} = config;
|
|
2049
|
-
if (
|
|
2055
|
+
if ([CHART_TYPE.TABLE, CHART_TYPE.TABLE_ELEMENT].includes(type)) return callback && callback('', '', statisticalResult);
|
|
2050
2056
|
const {
|
|
2051
2057
|
table_id,
|
|
2052
2058
|
sort_type
|
package/dist/utils/chart.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { GenericModel, CHART_MAP } from '../model';
|
|
2
|
+
import { CHART_TYPE } from '../constants';
|
|
3
|
+
import BaseModel from '../model/base-model';
|
|
2
4
|
export const generateChartConfig = (options, tables) => {
|
|
3
|
-
|
|
5
|
+
let genericChart;
|
|
6
|
+
// TABLE_ELEMENT don't need normal chart's properties
|
|
7
|
+
if (options.type === CHART_TYPE.TABLE_ELEMENT) {
|
|
8
|
+
genericChart = new BaseModel(options);
|
|
9
|
+
} else {
|
|
10
|
+
genericChart = new GenericModel(options);
|
|
11
|
+
}
|
|
4
12
|
const ChartModel = CHART_MAP[genericChart.type];
|
|
5
13
|
return new ChartModel(genericChart, tables);
|
|
6
14
|
};
|
package/dist/utils/row-utils.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { CellType, COLLABORATOR_COLUMN_TYPES, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, isNumber, getNumberDisplayString, getOption, getColumnOptions } from 'dtable-utils';
|
|
2
|
-
import { CHART_TYPE } from '../constants';
|
|
3
2
|
import { getClientFormulaDisplayString } from './cell-format-utils';
|
|
3
|
+
export const resizeColumn = (resizedColumnKey, width, columns) => {
|
|
4
|
+
const columnIndex = columns.findIndex(column => column.key === resizedColumnKey);
|
|
5
|
+
const column = columns[columnIndex];
|
|
6
|
+
const newColumn = Object.assign({}, column, {
|
|
7
|
+
width
|
|
8
|
+
});
|
|
9
|
+
let updateColumns = columns.slice(0);
|
|
10
|
+
updateColumns[columnIndex] = newColumn;
|
|
11
|
+
return updateColumns;
|
|
12
|
+
};
|
|
4
13
|
export const isEmptyGeolocationCell = (cellValue, format) => {
|
|
5
14
|
if (!cellValue) return null;
|
|
6
15
|
if (format === 'lng_lat') {
|
package/dist/view/index.css
CHANGED
|
@@ -27,7 +27,11 @@
|
|
|
27
27
|
.sea-chart-formatter .sea-chart-cavans-container {
|
|
28
28
|
position: relative;
|
|
29
29
|
width: 100%;
|
|
30
|
-
height: 100
|
|
30
|
+
height: 100%
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sea-chart-formatter .sea-chart-cavans-container.has-title {
|
|
34
|
+
height: calc(100% - 41px);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
.sea-chart-formatter .sea-chart-table-formatter-container {
|