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.
Files changed (64) hide show
  1. package/dist/components/data-process-setter/data-setting-header.js +11 -0
  2. package/dist/components/data-process-setter/hide-column-setter.js +79 -0
  3. package/dist/components/data-process-setter/index.js +4 -0
  4. package/dist/components/data-process-setter/sort-setter.js +75 -0
  5. package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +60 -0
  6. package/dist/components/popover/hide-column-popover/hide-column-popover.css +38 -0
  7. package/dist/components/popover/hide-column-popover/hide-column-popover.js +208 -0
  8. package/dist/components/popover/sort-popover/sort-popover-widgets/sort-utils.js +71 -0
  9. package/dist/components/popover/sort-popover/sort-popover.css +83 -0
  10. package/dist/components/popover/sort-popover/sort-popover.js +290 -0
  11. package/dist/components/types-dialog/index.js +5 -2
  12. package/dist/constants/common-constants.js +3 -1
  13. package/dist/constants/index.js +1 -1
  14. package/dist/constants/type-image.js +2 -1
  15. package/dist/constants/type.js +5 -3
  16. package/dist/context.js +1 -1
  17. package/dist/locale/lang/de.js +17 -2
  18. package/dist/locale/lang/en.js +16 -1
  19. package/dist/locale/lang/es.js +16 -1
  20. package/dist/locale/lang/fr.js +17 -2
  21. package/dist/locale/lang/pt.js +16 -1
  22. package/dist/locale/lang/ru.js +16 -1
  23. package/dist/locale/lang/zh_CN.js +16 -1
  24. package/dist/model/index.js +3 -1
  25. package/dist/model/table-element.js +22 -0
  26. package/dist/settings/data-settings.js +5 -0
  27. package/dist/settings/table-element-settings/components/data-filter.css +17 -0
  28. package/dist/settings/table-element-settings/components/data-filter.js +89 -0
  29. package/dist/settings/table-element-settings/data-settings.js +100 -0
  30. package/dist/settings/table-element-settings/index.css +190 -0
  31. package/dist/settings/table-element-settings/index.js +2 -0
  32. package/dist/settings/widgets/chart-type/index.js +3 -1
  33. package/dist/settings/widgets/common-data-settings.js +1 -0
  34. package/dist/settings/widgets/data-filter/index.css +1 -1
  35. package/dist/utils/chart-utils/base-utils.js +7 -1
  36. package/dist/utils/chart-utils/index.js +5 -5
  37. package/dist/utils/chart-utils/original-data-utils/index.js +2 -2
  38. package/dist/utils/chart-utils/sql-statistics-utils.js +10 -4
  39. package/dist/utils/chart.js +9 -1
  40. package/dist/utils/hotkey.js +5 -0
  41. package/dist/utils/row-utils.js +10 -1
  42. package/dist/utils/sql/chart-data-sql.js +4 -0
  43. package/dist/utils/sql/column-2-sql-column.js +4 -0
  44. package/dist/view/index.css +5 -1
  45. package/dist/view/index.js +56 -14
  46. package/dist/view/wrapper/bar-group.js +1 -1
  47. package/dist/view/wrapper/index.js +7 -0
  48. package/dist/view/wrapper/table-element/components/dataset-utils.js +123 -0
  49. package/dist/view/wrapper/table-element/components/formatter.js +309 -0
  50. package/dist/view/wrapper/table-element/components/formula-formatter.js +36 -0
  51. package/dist/view/wrapper/table-element/components/link-formatter.js +269 -0
  52. package/dist/view/wrapper/table-element/components/record.js +67 -0
  53. package/dist/view/wrapper/table-element/components/records-body.js +117 -0
  54. package/dist/view/wrapper/table-element/components/records-header/index.js +41 -0
  55. package/dist/view/wrapper/table-element/components/records-header/records-header-cell.js +51 -0
  56. package/dist/view/wrapper/table-element/components/records.js +117 -0
  57. package/dist/view/wrapper/table-element/components/resize-column-handle/index.css +11 -0
  58. package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +48 -0
  59. package/dist/view/wrapper/table-element/components/value-display-utils.js +13 -0
  60. package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.css +12 -0
  61. package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.js +36 -0
  62. package/dist/view/wrapper/table-element/css/index.css +239 -0
  63. package/dist/view/wrapper/table-element/index.js +101 -0
  64. 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'
@@ -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
  };
@@ -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,
@@ -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": "Please select 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;
@@ -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;
@@ -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;
@@ -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": "Please select 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;
@@ -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;
@@ -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;
@@ -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
+ }