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,290 @@
|
|
|
1
|
+
import _DTableCustomizeSelect from "dtable-ui-component/lib/DTableCustomizeSelect";
|
|
2
|
+
import React, { Component, Fragment } from 'react';
|
|
3
|
+
// import intl from 'react-intl-universal';
|
|
4
|
+
import isHotkey from 'is-hotkey';
|
|
5
|
+
import { Button, UncontrolledPopover } from 'reactstrap';
|
|
6
|
+
import { COLUMNS_ICON_CONFIG, SORT_COLUMN_OPTIONS, SORT_TYPE } from 'dtable-utils';
|
|
7
|
+
import { getEventClassName, getColumnByKey } from '../../../utils';
|
|
8
|
+
import CommonAddTool from '../../common-add-tool';
|
|
9
|
+
// import eventBus from '../../utils/event-bus';
|
|
10
|
+
// import { EVENT_BUS_TYPE } from '../../constants';
|
|
11
|
+
import intl from '../../../intl';
|
|
12
|
+
import { execSortsOperation, getDisplaySorts, isSortsEmpty, SORT_OPERATION } from './sort-popover-widgets/sort-utils';
|
|
13
|
+
import './sort-popover.css';
|
|
14
|
+
const SORT_TYPES = [SORT_TYPE.UP, SORT_TYPE.DOWN];
|
|
15
|
+
class SortPopover extends Component {
|
|
16
|
+
constructor(props) {
|
|
17
|
+
super(props);
|
|
18
|
+
this.hideDTablePopover = e => {
|
|
19
|
+
if (this.sortPopoverRef && !getEventClassName(e).includes('popover') && !this.sortPopoverRef.contains(e.target)) {
|
|
20
|
+
this.props.onSortComponentToggle(e);
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
e.stopPropagation();
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
this.isNeedSubmit = () => {
|
|
27
|
+
return this.props.isNeedSubmit;
|
|
28
|
+
};
|
|
29
|
+
this.onHotKey = e => {
|
|
30
|
+
if (isHotkey('esc', e) && !this.isSelectOpen) {
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
this.props.onSortComponentToggle();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
this.setSelectStatus = status => {
|
|
36
|
+
this.isSelectOpen = status;
|
|
37
|
+
};
|
|
38
|
+
this.addSort = () => {
|
|
39
|
+
const {
|
|
40
|
+
sorts
|
|
41
|
+
} = this.state;
|
|
42
|
+
const newSorts = execSortsOperation(SORT_OPERATION.ADD_SORT, {
|
|
43
|
+
sorts
|
|
44
|
+
});
|
|
45
|
+
this.updateSorts(newSorts);
|
|
46
|
+
};
|
|
47
|
+
this.deleteSort = (event, index) => {
|
|
48
|
+
event.nativeEvent.stopImmediatePropagation();
|
|
49
|
+
const sorts = this.state.sorts.slice(0);
|
|
50
|
+
const newSorts = execSortsOperation(SORT_OPERATION.DELETE_SORT, {
|
|
51
|
+
sorts,
|
|
52
|
+
index
|
|
53
|
+
});
|
|
54
|
+
this.updateSorts(newSorts);
|
|
55
|
+
};
|
|
56
|
+
this.onSelectColumn = (value, index) => {
|
|
57
|
+
const sorts = this.state.sorts.slice(0);
|
|
58
|
+
const newColumnKey = value.column.key;
|
|
59
|
+
if (newColumnKey === sorts[index].column_key) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const newSorts = execSortsOperation(SORT_OPERATION.MODIFY_SORT_COLUMN, {
|
|
63
|
+
sorts,
|
|
64
|
+
index,
|
|
65
|
+
column_key: newColumnKey
|
|
66
|
+
});
|
|
67
|
+
this.updateSorts(newSorts);
|
|
68
|
+
};
|
|
69
|
+
this.onSelectSortType = (value, index) => {
|
|
70
|
+
const sorts = this.state.sorts.slice(0);
|
|
71
|
+
const newSortType = value.sortType;
|
|
72
|
+
if (newSortType === sorts[index].sort_type) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const newSorts = execSortsOperation(SORT_OPERATION.MODIFY_SORT_TYPE, {
|
|
76
|
+
sorts,
|
|
77
|
+
index,
|
|
78
|
+
sort_type: newSortType
|
|
79
|
+
});
|
|
80
|
+
this.updateSorts(newSorts);
|
|
81
|
+
};
|
|
82
|
+
this.updateSorts = sorts => {
|
|
83
|
+
if (this.isNeedSubmit()) {
|
|
84
|
+
const isSubmitDisabled = false;
|
|
85
|
+
this.setState({
|
|
86
|
+
sorts,
|
|
87
|
+
isSubmitDisabled
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.setState({
|
|
92
|
+
sorts
|
|
93
|
+
}, () => {
|
|
94
|
+
this.handleSortAnimation();
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
this.handleSortAnimation = () => {
|
|
98
|
+
const update = {
|
|
99
|
+
sorts: this.state.sorts
|
|
100
|
+
};
|
|
101
|
+
this.props.update(update);
|
|
102
|
+
};
|
|
103
|
+
this.onClosePopover = () => {
|
|
104
|
+
this.props.onSortComponentToggle();
|
|
105
|
+
};
|
|
106
|
+
this.onSubmitSorts = () => {
|
|
107
|
+
const {
|
|
108
|
+
sorts
|
|
109
|
+
} = this.state;
|
|
110
|
+
const update = {
|
|
111
|
+
sorts: sorts
|
|
112
|
+
};
|
|
113
|
+
this.props.update(update);
|
|
114
|
+
this.props.onSortComponentToggle();
|
|
115
|
+
};
|
|
116
|
+
this.createColumnsOptions = function () {
|
|
117
|
+
let columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
118
|
+
const sortableColumns = columns.filter(column => SORT_COLUMN_OPTIONS.includes(column.type));
|
|
119
|
+
return sortableColumns.map(column => {
|
|
120
|
+
const {
|
|
121
|
+
type,
|
|
122
|
+
name
|
|
123
|
+
} = column;
|
|
124
|
+
return {
|
|
125
|
+
value: {
|
|
126
|
+
column
|
|
127
|
+
},
|
|
128
|
+
label: /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
129
|
+
className: "filter-header-icon"
|
|
130
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
131
|
+
className: COLUMNS_ICON_CONFIG[type]
|
|
132
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
133
|
+
className: "select-option-name"
|
|
134
|
+
}, name))
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
this.createSortTypeOptions = () => {
|
|
139
|
+
return SORT_TYPES.map(sortType => {
|
|
140
|
+
return {
|
|
141
|
+
value: {
|
|
142
|
+
sortType
|
|
143
|
+
},
|
|
144
|
+
label: /*#__PURE__*/React.createElement("span", {
|
|
145
|
+
className: "select-option-name"
|
|
146
|
+
}, intl.get(sortType))
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
this.renderSortsList = () => {
|
|
151
|
+
const {
|
|
152
|
+
columns
|
|
153
|
+
} = this.props;
|
|
154
|
+
const {
|
|
155
|
+
sorts
|
|
156
|
+
} = this.state;
|
|
157
|
+
return sorts.map((sort, index) => {
|
|
158
|
+
const column = getColumnByKey(sort.column_key, columns) || {};
|
|
159
|
+
return this.renderSortItem(column, sort, index);
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
this.renderSortItem = (column, sort, index) => {
|
|
163
|
+
let {
|
|
164
|
+
name,
|
|
165
|
+
type
|
|
166
|
+
} = column;
|
|
167
|
+
const {
|
|
168
|
+
readonly
|
|
169
|
+
} = this.props;
|
|
170
|
+
let selectedColumn = {
|
|
171
|
+
label: /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
172
|
+
className: "filter-header-icon"
|
|
173
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
174
|
+
className: COLUMNS_ICON_CONFIG[type]
|
|
175
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
176
|
+
className: "select-option-name",
|
|
177
|
+
title: name,
|
|
178
|
+
"aria-label": name
|
|
179
|
+
}, name))
|
|
180
|
+
};
|
|
181
|
+
let selectedTypeShow = sort.sort_type;
|
|
182
|
+
let selectedSortType = selectedTypeShow && {
|
|
183
|
+
label: /*#__PURE__*/React.createElement("span", {
|
|
184
|
+
className: "select-option-name"
|
|
185
|
+
}, intl.get(selectedTypeShow))
|
|
186
|
+
};
|
|
187
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
188
|
+
key: 'sort-item-' + index,
|
|
189
|
+
className: "sort-item"
|
|
190
|
+
}, !readonly && /*#__PURE__*/React.createElement("div", {
|
|
191
|
+
className: "delete-sort",
|
|
192
|
+
onClick: event => this.deleteSort(event, index)
|
|
193
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
194
|
+
className: "dtable-font dtable-icon-fork-number"
|
|
195
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
196
|
+
className: "condition"
|
|
197
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
198
|
+
className: "sort-column"
|
|
199
|
+
}, /*#__PURE__*/React.createElement(_DTableCustomizeSelect, {
|
|
200
|
+
isLocked: readonly,
|
|
201
|
+
value: selectedColumn,
|
|
202
|
+
onSelectOption: value => this.onSelectColumn(value, index),
|
|
203
|
+
options: this.columnsOptions,
|
|
204
|
+
searchable: true,
|
|
205
|
+
searchPlaceholder: intl.get('Search_column'),
|
|
206
|
+
noOptionsPlaceholder: intl.get('No_results')
|
|
207
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
208
|
+
className: "sort-predicate ml-2"
|
|
209
|
+
}, /*#__PURE__*/React.createElement(_DTableCustomizeSelect, {
|
|
210
|
+
isLocked: readonly,
|
|
211
|
+
value: selectedSortType,
|
|
212
|
+
onSelectOption: value => this.onSelectSortType(value, index),
|
|
213
|
+
options: this.sortTypeOptions
|
|
214
|
+
}))));
|
|
215
|
+
};
|
|
216
|
+
this.onPopoverInsideClick = e => {
|
|
217
|
+
e.stopPropagation();
|
|
218
|
+
};
|
|
219
|
+
const {
|
|
220
|
+
sorts: _sorts,
|
|
221
|
+
columns: _columns
|
|
222
|
+
} = this.props;
|
|
223
|
+
this.sortTypeOptions = this.createSortTypeOptions();
|
|
224
|
+
this.columnsOptions = this.createColumnsOptions(_columns);
|
|
225
|
+
this.state = {
|
|
226
|
+
sorts: getDisplaySorts(_sorts, _columns)
|
|
227
|
+
};
|
|
228
|
+
this.isSelectOpen = false;
|
|
229
|
+
}
|
|
230
|
+
componentDidMount() {
|
|
231
|
+
document.addEventListener('click', this.hideDTablePopover, true);
|
|
232
|
+
document.addEventListener('keydown', this.onHotKey);
|
|
233
|
+
// this.unsubscribeOpenSelect = eventBus.subscribe(EVENT_BUS_TYPE.OPEN_SELECT, this.setSelectStatus);
|
|
234
|
+
}
|
|
235
|
+
componentWillUnmount() {
|
|
236
|
+
document.removeEventListener('click', this.hideDTablePopover, true);
|
|
237
|
+
document.removeEventListener('keydown', this.onHotKey);
|
|
238
|
+
// this.unsubscribeOpenSelect();
|
|
239
|
+
}
|
|
240
|
+
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
241
|
+
const newColumns = nextProps.columns;
|
|
242
|
+
if (newColumns !== this.props.columns) {
|
|
243
|
+
this.columnsOptions = this.createColumnsOptions(newColumns);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
render() {
|
|
247
|
+
const {
|
|
248
|
+
target,
|
|
249
|
+
readonly
|
|
250
|
+
} = this.props;
|
|
251
|
+
const {
|
|
252
|
+
sorts
|
|
253
|
+
} = this.state;
|
|
254
|
+
const isEmpty = isSortsEmpty(sorts);
|
|
255
|
+
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
256
|
+
placement: "auto-start",
|
|
257
|
+
isOpen: true,
|
|
258
|
+
target: target,
|
|
259
|
+
fade: false,
|
|
260
|
+
hideArrow: true,
|
|
261
|
+
className: "sort-popover",
|
|
262
|
+
boundariesElement: document.body
|
|
263
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
264
|
+
ref: ref => this.sortPopoverRef = ref,
|
|
265
|
+
onClick: this.onPopoverInsideClick
|
|
266
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
267
|
+
className: "sorts-list ".concat(isEmpty ? 'empty-sorts-container' : '')
|
|
268
|
+
}, isEmpty ? /*#__PURE__*/React.createElement("div", {
|
|
269
|
+
className: "empty-sorts-list"
|
|
270
|
+
}, intl.get('No_sorts')) : this.renderSortsList()), !readonly && /*#__PURE__*/React.createElement(CommonAddTool, {
|
|
271
|
+
callBack: this.addSort,
|
|
272
|
+
footerName: intl.get('Add_sort'),
|
|
273
|
+
className: "popover-add-tool",
|
|
274
|
+
addIconClassName: "popover-add-icon"
|
|
275
|
+
}), this.isNeedSubmit() && !readonly && /*#__PURE__*/React.createElement("div", {
|
|
276
|
+
className: "sort-popover-footer"
|
|
277
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
278
|
+
className: "mr-2",
|
|
279
|
+
onClick: this.onClosePopover
|
|
280
|
+
}, intl.get('Cancel')), /*#__PURE__*/React.createElement(Button, {
|
|
281
|
+
color: "primary",
|
|
282
|
+
disabled: this.state.isSubmitDisabled,
|
|
283
|
+
onClick: this.onSubmitSorts
|
|
284
|
+
}, intl.get('Submit')))));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
SortPopover.defaultProps = {
|
|
288
|
+
readonly: false
|
|
289
|
+
};
|
|
290
|
+
export default SortPopover;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledTooltip, Button } from 'reactstrap';
|
|
3
3
|
import classnames from 'classnames';
|
|
4
|
-
import { CHART_TYPES, CHART_TYPE_SHOW, ZH_CN_SUPPORT_CHARTS } from '../../constants';
|
|
4
|
+
import { CHART_TYPE, CHART_TYPES, CHART_TYPE_SHOW, ZH_CN_SUPPORT_CHARTS } from '../../constants';
|
|
5
5
|
import { eventStopPropagation } from '../../utils';
|
|
6
6
|
import context from '../../context';
|
|
7
7
|
import intl from '../../intl';
|
|
@@ -13,7 +13,8 @@ const TypesDialog = _ref => {
|
|
|
13
13
|
type,
|
|
14
14
|
lang,
|
|
15
15
|
onToggle: propsOnToggle,
|
|
16
|
-
onChange
|
|
16
|
+
onChange,
|
|
17
|
+
dataSources
|
|
17
18
|
} = _ref;
|
|
18
19
|
const [currentCatIndex, setCurrentCatIndex] = useState(0);
|
|
19
20
|
const [selectedType, setType] = useState(type);
|
|
@@ -102,6 +103,8 @@ const TypesDialog = _ref => {
|
|
|
102
103
|
className: "d-flex flex-wrap"
|
|
103
104
|
}, item.children.map(chartType => {
|
|
104
105
|
if (notSupportStatisticTypes.includes(chartType)) return null;
|
|
106
|
+
// Table_element only supported on external apps
|
|
107
|
+
if (chartType === CHART_TYPE.TABLE_ELEMENT && dataSources === 'view') return null;
|
|
105
108
|
return /*#__PURE__*/React.createElement("div", {
|
|
106
109
|
key: chartType,
|
|
107
110
|
onClick: event => onTypeChange(event, chartType, index),
|
|
@@ -2,7 +2,9 @@ import { CellType } from 'dtable-utils';
|
|
|
2
2
|
export const CommonEventTypes = {
|
|
3
3
|
OPEN_SELECT: 'OPEN_SELECT',
|
|
4
4
|
REFRESH_CHARTS: 'REFRESH_CHARTS',
|
|
5
|
-
CHANGE_HEADER_WIDTH: 'CHANGE_HEADER_WIDTH'
|
|
5
|
+
CHANGE_HEADER_WIDTH: 'CHANGE_HEADER_WIDTH',
|
|
6
|
+
EXPAND_ROW_UPDATED: 'EXPAND_ROW_UPDATED',
|
|
7
|
+
EXPAND_ROW_DELETED: 'EXPAND_ROW_DELETED'
|
|
6
8
|
};
|
|
7
9
|
export const EXTERNAL_EVENT = {
|
|
8
10
|
SHOW_ROW_DETAIL_DIALOG: 'RowDetailDialog'
|
package/dist/constants/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CellType, DEFAULT_NUMBER_FORMAT } from 'dtable-utils';
|
|
1
|
+
import { CellType, DEFAULT_NUMBER_FORMAT, FORMULA_RESULT_TYPE } from 'dtable-utils';
|
|
2
2
|
import { GEOLOCATION_FORMAT_CITY, GEOLOCATION_FORMAT_MAP, GEOLOCATION_GRANULARITY, GEOLOCATION_GRANULARITY_LIST, MAP_LEVEL, MUNICIPALITIES } from './geolocation';
|
|
3
3
|
import { CHART_KEY, GENERIC_KEY, GENERIC_KEY_2_SIMILAR_KEYS } from './model';
|
|
4
4
|
import { STYLE_COLORS, HORIZONTAL_ALIGN, HORIZONTAL_ALIGNS, HORIZONTAL_ALIGN_SHOW } from './style';
|
|
@@ -29,5 +29,6 @@ export const CHART_TYPE_IMAGE = {
|
|
|
29
29
|
[CHART_TYPE.DASHBOARD]: 'dashboard-chart.png',
|
|
30
30
|
[CHART_TYPE.TREE_MAP]: 'treemap.png',
|
|
31
31
|
[CHART_TYPE.TABLE]: 'pivot-table.png',
|
|
32
|
-
[CHART_TYPE.FUNNEL]: 'funnel.png'
|
|
32
|
+
[CHART_TYPE.FUNNEL]: 'funnel.png',
|
|
33
|
+
[CHART_TYPE.TABLE_ELEMENT]: 'table-element.png'
|
|
33
34
|
};
|
package/dist/constants/type.js
CHANGED
|
@@ -28,7 +28,8 @@ export const CHART_TYPE = {
|
|
|
28
28
|
DASHBOARD: 'dashboard',
|
|
29
29
|
TREE_MAP: 'tree_map',
|
|
30
30
|
TABLE: 'table',
|
|
31
|
-
FUNNEL: 'funnel'
|
|
31
|
+
FUNNEL: 'funnel',
|
|
32
|
+
TABLE_ELEMENT: 'table_element'
|
|
32
33
|
};
|
|
33
34
|
export const CHART_TYPE_SHOW = {
|
|
34
35
|
[CHART_TYPE.BAR]: 'Basic_histogram',
|
|
@@ -60,7 +61,8 @@ export const CHART_TYPE_SHOW = {
|
|
|
60
61
|
[CHART_TYPE.DASHBOARD]: 'Gauge',
|
|
61
62
|
[CHART_TYPE.TREE_MAP]: 'Tree_map',
|
|
62
63
|
[CHART_TYPE.TABLE]: 'Pivot_table',
|
|
63
|
-
[CHART_TYPE.FUNNEL]: 'Funnel'
|
|
64
|
+
[CHART_TYPE.FUNNEL]: 'Funnel',
|
|
65
|
+
[CHART_TYPE.TABLE_ELEMENT]: 'Table_element'
|
|
64
66
|
};
|
|
65
67
|
export const CHART_TYPES = [{
|
|
66
68
|
name: 'Histogram',
|
|
@@ -117,7 +119,7 @@ export const CHART_TYPES = [{
|
|
|
117
119
|
}, {
|
|
118
120
|
name: 'Table',
|
|
119
121
|
icon: 'dtable-logo',
|
|
120
|
-
children: [CHART_TYPE.TABLE]
|
|
122
|
+
children: [CHART_TYPE.TABLE, CHART_TYPE.TABLE_ELEMENT]
|
|
121
123
|
}, {
|
|
122
124
|
name: 'Funnel',
|
|
123
125
|
icon: 'funnel',
|
package/dist/context.js
CHANGED
|
@@ -12,6 +12,7 @@ class Context {
|
|
|
12
12
|
onFail
|
|
13
13
|
} = _ref;
|
|
14
14
|
// use custom api to get chart result data
|
|
15
|
+
// currently used in statistics plugin and big screen plugin
|
|
15
16
|
if (this.api.queryChartResult) {
|
|
16
17
|
return this.api.queryChartResult({
|
|
17
18
|
chart,
|
|
@@ -21,7 +22,6 @@ class Context {
|
|
|
21
22
|
}
|
|
22
23
|
const table = getTableById(tables, chart.config.table_id);
|
|
23
24
|
const currentView = table.views.find(view => view._id === chart.config.view_id);
|
|
24
|
-
// use default view
|
|
25
25
|
const defaultView = table.views.find(view => view._id === '0000');
|
|
26
26
|
const chartDataSQL = new ChartDataSQL({
|
|
27
27
|
table,
|
package/dist/locale/lang/de.js
CHANGED
|
@@ -252,7 +252,7 @@ const de = {
|
|
|
252
252
|
"Use_default_color": "Standardfarbe verwenden",
|
|
253
253
|
"Use_colors_in_single_select_solumn": "Verwenden Sie Farben in einer einzelnen Auswahlspalte",
|
|
254
254
|
"Search_records": "Einträge suchen",
|
|
255
|
-
"Please_select_a_grouping_column": "
|
|
255
|
+
"Please_select_a_grouping_column": "Bitte Gruppierungsspalte auswählen",
|
|
256
256
|
"View": "Sicht",
|
|
257
257
|
"Funnel": "Trichterdiagramm",
|
|
258
258
|
"All_charts": "Alle Diagramme",
|
|
@@ -264,6 +264,21 @@ const de = {
|
|
|
264
264
|
"Outside": "Draußen",
|
|
265
265
|
"Show_overall_rate": "Gesamtpreisbeschriftung anzeigen",
|
|
266
266
|
"Percentage": "Prozentsatz",
|
|
267
|
-
"Number_and_percentage": "Anzahl und Prozentsatz"
|
|
267
|
+
"Number_and_percentage": "Anzahl und Prozentsatz",
|
|
268
|
+
"Table_element": "Tableau",
|
|
269
|
+
"Sort": "Trier",
|
|
270
|
+
"1_Sort": "1 Sorte",
|
|
271
|
+
"Sorts": "sortiert",
|
|
272
|
+
"hide_columns": "Spalten ausblenden",
|
|
273
|
+
"Hidden_columns": "Versteckte Spalten",
|
|
274
|
+
"1_hidden_column": "1 ausgeblendete Spalte",
|
|
275
|
+
"No_sorts": "Keine Sorten",
|
|
276
|
+
"Add_sort": "Sortierung hinzufügen",
|
|
277
|
+
"Search_column": "Suchspalte",
|
|
278
|
+
"up": "Hoch",
|
|
279
|
+
"down": "Runter",
|
|
280
|
+
"Equal": "Gleich",
|
|
281
|
+
"Hide_all": "Alles ausblenden",
|
|
282
|
+
"Show_all": "Alle anzeigen"
|
|
268
283
|
};
|
|
269
284
|
export default de;
|
package/dist/locale/lang/en.js
CHANGED
|
@@ -264,6 +264,21 @@ const en = {
|
|
|
264
264
|
"Outside": "Outside",
|
|
265
265
|
"Show_overall_rate": "Show overall rate",
|
|
266
266
|
"Percentage": "Percentage",
|
|
267
|
-
"Number_and_percentage": "Number and percentage"
|
|
267
|
+
"Number_and_percentage": "Number and percentage",
|
|
268
|
+
"Table_element": "Table",
|
|
269
|
+
"Sort": "Sort",
|
|
270
|
+
"1_Sort": "1 sort",
|
|
271
|
+
"Sorts": "sorts",
|
|
272
|
+
"hide_columns": "Hide columns",
|
|
273
|
+
"Hidden_columns": "Hidden columns",
|
|
274
|
+
"1_hidden_column": "1 Hidden column",
|
|
275
|
+
"No_sorts": "No sorts",
|
|
276
|
+
"Add_sort": "Add sort",
|
|
277
|
+
"Search_column": "Search column",
|
|
278
|
+
"up": "Up",
|
|
279
|
+
"down": "Down",
|
|
280
|
+
"Equal": "Equal",
|
|
281
|
+
"Hide_all": "Hide all",
|
|
282
|
+
"Show_all": "Show all"
|
|
268
283
|
};
|
|
269
284
|
export default en;
|
package/dist/locale/lang/es.js
CHANGED
|
@@ -264,6 +264,21 @@ const es = {
|
|
|
264
264
|
"Outside": "Outside",
|
|
265
265
|
"Show_overall_rate": "Show overall rate",
|
|
266
266
|
"Percentage": "Percentage",
|
|
267
|
-
"Number_and_percentage": "Number and percentage"
|
|
267
|
+
"Number_and_percentage": "Number and percentage",
|
|
268
|
+
"Table_element": "Table",
|
|
269
|
+
"Sort": "Sort",
|
|
270
|
+
"1_Sort": "1 sort",
|
|
271
|
+
"Sorts": "sorts",
|
|
272
|
+
"hide_columns": "Hide columns",
|
|
273
|
+
"Hidden_columns": "Hidden columns",
|
|
274
|
+
"1_hidden_column": "1 Hidden column",
|
|
275
|
+
"No_sorts": "No sorts",
|
|
276
|
+
"Add_sort": "Add sort",
|
|
277
|
+
"Search_column": "Search column",
|
|
278
|
+
"up": "Up",
|
|
279
|
+
"down": "Down",
|
|
280
|
+
"Equal": "Equal",
|
|
281
|
+
"Hide_all": "Hide all",
|
|
282
|
+
"Show_all": "Show all"
|
|
268
283
|
};
|
|
269
284
|
export default es;
|
package/dist/locale/lang/fr.js
CHANGED
|
@@ -252,7 +252,7 @@ const fr = {
|
|
|
252
252
|
"Use_default_color": "Utiliser la couleur par défaut",
|
|
253
253
|
"Use_colors_in_single_select_solumn": "Utiliser les couleurs dans une colonne de sélection unique",
|
|
254
254
|
"Search_records": "Rechercher des enregistrements",
|
|
255
|
-
"Please_select_a_grouping_column": "
|
|
255
|
+
"Please_select_a_grouping_column": "Veuillez sélectionner la colonne de regroupement",
|
|
256
256
|
"View": "Voir",
|
|
257
257
|
"Funnel": "Entonnoir",
|
|
258
258
|
"All_charts": "Tous les graphiques",
|
|
@@ -264,6 +264,21 @@ const fr = {
|
|
|
264
264
|
"Outside": "Dehors",
|
|
265
265
|
"Show_overall_rate": "Afficher le libellé du tarif global",
|
|
266
266
|
"Percentage": "Couche d'entonnoir",
|
|
267
|
-
"Number_and_percentage": "Nombre et pourcentage"
|
|
267
|
+
"Number_and_percentage": "Nombre et pourcentage",
|
|
268
|
+
"Table_element": "Tabelle",
|
|
269
|
+
"Sort": "Trier",
|
|
270
|
+
"1_Sort": "1 sorte",
|
|
271
|
+
"Sorts": "sortes",
|
|
272
|
+
"hide_columns": "Masquer les colonnes",
|
|
273
|
+
"Hidden_columns": "Colonnes masquées",
|
|
274
|
+
"1_hidden_column": "1 colonne masquée",
|
|
275
|
+
"No_sorts": "Aucune sorte",
|
|
276
|
+
"Add_sort": "Ajouter un tri",
|
|
277
|
+
"Search_column": "Colonne de recherche",
|
|
278
|
+
"up": "En haut",
|
|
279
|
+
"down": "Vers le bas",
|
|
280
|
+
"Equal": "Égal",
|
|
281
|
+
"Hide_all": "cacher",
|
|
282
|
+
"Show_all": "Afficher tout"
|
|
268
283
|
};
|
|
269
284
|
export default fr;
|
package/dist/locale/lang/pt.js
CHANGED
|
@@ -264,6 +264,21 @@ const pt = {
|
|
|
264
264
|
"Outside": "Outside",
|
|
265
265
|
"Show_overall_rate": "Show overall rate",
|
|
266
266
|
"Percentage": "Percentage",
|
|
267
|
-
"Number_and_percentage": "Number and percentage"
|
|
267
|
+
"Number_and_percentage": "Number and percentage",
|
|
268
|
+
"Table_element": "Table",
|
|
269
|
+
"Sort": "Sort",
|
|
270
|
+
"1_Sort": "1 sort",
|
|
271
|
+
"Sorts": "sorts",
|
|
272
|
+
"hide_columns": "Hide columns",
|
|
273
|
+
"Hidden_columns": "Hidden columns",
|
|
274
|
+
"1_hidden_column": "1 Hidden column",
|
|
275
|
+
"No_sorts": "No sorts",
|
|
276
|
+
"Add_sort": "Add sort",
|
|
277
|
+
"Search_column": "Search column",
|
|
278
|
+
"up": "Up",
|
|
279
|
+
"down": "Down",
|
|
280
|
+
"Equal": "Equal",
|
|
281
|
+
"Hide_all": "Hide all",
|
|
282
|
+
"Show_all": "Show all"
|
|
268
283
|
};
|
|
269
284
|
export default pt;
|
package/dist/locale/lang/ru.js
CHANGED
|
@@ -264,6 +264,21 @@ const ru = {
|
|
|
264
264
|
"Outside": "Outside",
|
|
265
265
|
"Show_overall_rate": "Show overall rate",
|
|
266
266
|
"Percentage": "Percentage",
|
|
267
|
-
"Number_and_percentage": "Number and percentage"
|
|
267
|
+
"Number_and_percentage": "Number and percentage",
|
|
268
|
+
"Table_element": "Table",
|
|
269
|
+
"Sort": "Sort",
|
|
270
|
+
"1_Sort": "1 sort",
|
|
271
|
+
"Sorts": "sorts",
|
|
272
|
+
"hide_columns": "Hide columns",
|
|
273
|
+
"Hidden_columns": "Hidden columns",
|
|
274
|
+
"1_hidden_column": "1 Hidden column",
|
|
275
|
+
"No_sorts": "No sorts",
|
|
276
|
+
"Add_sort": "Add sort",
|
|
277
|
+
"Search_column": "Search column",
|
|
278
|
+
"up": "Up",
|
|
279
|
+
"down": "Down",
|
|
280
|
+
"Equal": "Equal",
|
|
281
|
+
"Hide_all": "Hide all",
|
|
282
|
+
"Show_all": "Show all"
|
|
268
283
|
};
|
|
269
284
|
export default ru;
|
|
@@ -264,6 +264,21 @@ const zh_CN = {
|
|
|
264
264
|
"Outside": "在图表外",
|
|
265
265
|
"Show_overall_rate": "显示总转化率标签",
|
|
266
266
|
"Percentage": "百分比",
|
|
267
|
-
"Number_and_percentage": "数值和百分比"
|
|
267
|
+
"Number_and_percentage": "数值和百分比",
|
|
268
|
+
"Table_element": "表格",
|
|
269
|
+
"Sort": "排序",
|
|
270
|
+
"1_Sort": "1 个排序",
|
|
271
|
+
"Sorts": "个排序",
|
|
272
|
+
"hide_columns": "隐藏列",
|
|
273
|
+
"Hidden_columns": "个隐藏列",
|
|
274
|
+
"1_hidden_column": "1 个隐藏列",
|
|
275
|
+
"No_sorts": "没有排序",
|
|
276
|
+
"Add_sort": "添加排序",
|
|
277
|
+
"Search_column": "搜索列",
|
|
278
|
+
"up": "升序",
|
|
279
|
+
"down": "降序",
|
|
280
|
+
"Equal": "相等",
|
|
281
|
+
"Hide_all": "隐藏全部",
|
|
282
|
+
"Show_all": "展示全部"
|
|
268
283
|
};
|
|
269
284
|
export default zh_CN;
|
package/dist/model/index.js
CHANGED
|
@@ -32,6 +32,7 @@ import Trend from './trend';
|
|
|
32
32
|
import Dashboard from './dashboard';
|
|
33
33
|
import Table from './table';
|
|
34
34
|
import Funnel from './funnel';
|
|
35
|
+
import TableElement from './table-element';
|
|
35
36
|
const CHART_MAP = {
|
|
36
37
|
[CHART_TYPE.BAR]: Bar,
|
|
37
38
|
[CHART_TYPE.BAR_GROUP]: BarGroup,
|
|
@@ -62,6 +63,7 @@ const CHART_MAP = {
|
|
|
62
63
|
[CHART_TYPE.DASHBOARD]: Dashboard,
|
|
63
64
|
[CHART_TYPE.TREE_MAP]: TreeMap,
|
|
64
65
|
[CHART_TYPE.TABLE]: Table,
|
|
65
|
-
[CHART_TYPE.FUNNEL]: Funnel
|
|
66
|
+
[CHART_TYPE.FUNNEL]: Funnel,
|
|
67
|
+
[CHART_TYPE.TABLE_ELEMENT]: TableElement
|
|
66
68
|
};
|
|
67
69
|
export { ChartModel, GenericModel, CHART_MAP, User };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CHART_TYPE } from '../constants';
|
|
2
|
+
import BaseModel from './base-model';
|
|
3
|
+
class TableElement extends BaseModel {
|
|
4
|
+
constructor(options, tables) {
|
|
5
|
+
super({
|
|
6
|
+
...options,
|
|
7
|
+
type: CHART_TYPE.TABLE_ELEMENT
|
|
8
|
+
});
|
|
9
|
+
let column_keys = [];
|
|
10
|
+
const table_id = options.table_id;
|
|
11
|
+
if (table_id) {
|
|
12
|
+
const table = tables.find(table => table._id === table_id);
|
|
13
|
+
column_keys = table.columns.map(column => column.key);
|
|
14
|
+
}
|
|
15
|
+
this.sorts = options.sorts || [];
|
|
16
|
+
this.groupbys = options.groupbys || [];
|
|
17
|
+
this.shown_column_keys = options.shown_column_keys || column_keys;
|
|
18
|
+
this.permissions = options.permissions || {};
|
|
19
|
+
this.show_cell_coloring = false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export default TableElement;
|
|
@@ -16,6 +16,7 @@ import { HeatMapDataSettings } from './heat-map-settings';
|
|
|
16
16
|
import { MirrorDataSettings } from './mirror-settings';
|
|
17
17
|
import { TrendDataSettings } from './trend-settings';
|
|
18
18
|
import { FunnelDataSettings } from './funnel-settings';
|
|
19
|
+
import { TableElementDataSettings } from './table-element-settings';
|
|
19
20
|
const DataSettings = props => {
|
|
20
21
|
const [refreshToggle, setRefreshToggle] = useState(false);
|
|
21
22
|
const cacheRef = useRef(props);
|
|
@@ -127,6 +128,10 @@ const DataSettings = props => {
|
|
|
127
128
|
{
|
|
128
129
|
return /*#__PURE__*/React.createElement(FunnelDataSettings, props);
|
|
129
130
|
}
|
|
131
|
+
case CHART_TYPE.TABLE_ELEMENT:
|
|
132
|
+
{
|
|
133
|
+
return /*#__PURE__*/React.createElement(TableElementDataSettings, props);
|
|
134
|
+
}
|
|
130
135
|
default:
|
|
131
136
|
{
|
|
132
137
|
return null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.sea-chart-settings .sea-chart-data-filter {
|
|
2
|
+
width: 100%;
|
|
3
|
+
padding: 3px 4px;
|
|
4
|
+
border-radius: 4px;
|
|
5
|
+
line-height: 22px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.sea-chart-settings .sea-chart-data-filter:hover {
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
background-color: #efefef;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sea-chart-settings .sea-chart-data-filter .dtable-icon-filter {
|
|
14
|
+
font-size: 14px;
|
|
15
|
+
color: #666;
|
|
16
|
+
margin-right: .5rem;
|
|
17
|
+
}
|