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,48 @@
1
+ import React, { Component } from 'react';
2
+ import { debounce } from 'lodash-es';
3
+ import './index.css';
4
+ class ResizeColumnHandle extends Component {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.cleanUp = () => {
8
+ window.removeEventListener('mouseup', this.onMouseUp);
9
+ window.removeEventListener('mousemove', this.onMouseMove);
10
+ window.removeEventListener('touchend', this.onMouseUp);
11
+ window.removeEventListener('touchmove', this.onMouseMove);
12
+ };
13
+ this.onMouseDown = e => {
14
+ if (e.preventDefault) {
15
+ e.preventDefault();
16
+ }
17
+ window.addEventListener('mouseup', this.onMouseUp);
18
+ window.addEventListener('mousemove', this.onMouseMove);
19
+ window.addEventListener('touchend', this.onMouseUp);
20
+ window.addEventListener('touchmove', this.onMouseMove);
21
+ };
22
+ this.onMouseUp = e => {
23
+ if (this.props.onDragEnd) {
24
+ this.props.onDragEnd(e);
25
+ }
26
+ this.cleanUp();
27
+ };
28
+ this.onMouseMove = e => {
29
+ if (e.preventDefault) {
30
+ e.preventDefault();
31
+ }
32
+ debounce(this.props.onDrag(e), 50);
33
+ };
34
+ }
35
+ componentWillUnmount() {
36
+ this.cleanUp();
37
+ }
38
+ render() {
39
+ return /*#__PURE__*/React.createElement("div", {
40
+ className: "sea-chart-record-HeaderCell__draggable",
41
+ onClick: e => e.stopPropagation(),
42
+ onDrag: this.props.onDrag,
43
+ onMouseDown: this.onMouseDown,
44
+ onTouchStart: this.onMouseDown
45
+ });
46
+ }
47
+ }
48
+ export default ResizeColumnHandle;
@@ -0,0 +1,13 @@
1
+ import { getCellValueDisplayString } from 'dtable-utils';
2
+ export const getCellDisplayValue = (record, column, collaborators) => {
3
+ const {
4
+ type,
5
+ data,
6
+ key
7
+ } = column;
8
+ return getCellValueDisplayString(record, type, key, {
9
+ data,
10
+ collaborators,
11
+ geolocationHyphen: ' '
12
+ });
13
+ };
@@ -0,0 +1,12 @@
1
+ .vertical-scrollbar {
2
+ width: 20px;
3
+ overflow: auto;
4
+ position: absolute;
5
+ top: 33px;
6
+ right: 0;
7
+ height: calc(100% - 50px);
8
+ }
9
+
10
+ .vertical-scrollbar-inner {
11
+ width: 1px;
12
+ }
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import './index.css';
3
+ class VerticalScrollbar extends React.Component {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.isSelfScroll = true;
7
+ this.setScrollTop = scrollTop => {
8
+ this.isSelfScroll = false;
9
+ this.container.scrollTop = scrollTop;
10
+ };
11
+ this.onScroll = event => {
12
+ event.stopPropagation();
13
+ if (this.isSelfScroll) {
14
+ this.props.onScrollbarScroll(event.target.scrollTop);
15
+ return;
16
+ }
17
+ this.isSelfScroll = true;
18
+ };
19
+ }
20
+ render() {
21
+ const {
22
+ contentHeight
23
+ } = this.props;
24
+ return /*#__PURE__*/React.createElement("div", {
25
+ className: "vertical-scrollbar",
26
+ ref: ref => this.container = ref,
27
+ onScroll: this.onScroll
28
+ }, /*#__PURE__*/React.createElement("div", {
29
+ className: "vertical-scrollbar-inner",
30
+ style: {
31
+ height: contentHeight
32
+ }
33
+ }));
34
+ }
35
+ }
36
+ export default VerticalScrollbar;
@@ -0,0 +1,239 @@
1
+ .table-element-result {
2
+ display: flex;
3
+ flex-direction: column;
4
+ justify-content: flex-start;
5
+ align-items: flex-start;
6
+ overflow: hidden;
7
+ height: 100%;
8
+ width: fit-content;
9
+ max-width: 100%;
10
+ }
11
+
12
+ .table-element-container {
13
+ overflow-x: scroll;
14
+ height: 100%;
15
+ width: 100%;
16
+ overflow-y: hidden;
17
+ }
18
+
19
+ .table-element-result-content {
20
+ height: 100%;
21
+ overflow: hidden;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: flex-start;
25
+ align-items: flex-start;
26
+ }
27
+
28
+ .static-table-element-result-content {
29
+ height: 33px;
30
+ width: 100%;
31
+ position: relative;
32
+ z-index: 2;
33
+ color: #666666;
34
+ }
35
+
36
+ .table-element-header-cell {
37
+ position: relative;
38
+ }
39
+
40
+ .table-element-result-table-row {
41
+ width: 100%;
42
+ border-bottom: 1px solid #ccc;
43
+ display: inline-flex;
44
+ margin-top: 0;
45
+ margin-bottom: 0;
46
+ transition: all .3s;
47
+ height: 33px;
48
+ }
49
+
50
+ .table-element-last-table-row {
51
+ border-bottom: none;
52
+ }
53
+
54
+ .table-element-result-table-cell.index {
55
+ width: 90px;
56
+ height: 100%;
57
+ padding: 0;
58
+ }
59
+
60
+ .table-element-result-table-cell.column {
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: space-between;
64
+ padding: 0 8px
65
+ }
66
+
67
+ .table-element-result-table-cell {
68
+ height: 100%;
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ white-space: nowrap;
72
+ padding: 6px 8px;
73
+ position: relative;
74
+ }
75
+
76
+ .table-element-result-table-cell:last-child {
77
+ border-right: none;
78
+ }
79
+
80
+ .table-element-result-column-content {
81
+ height: 100%;
82
+ width: 100%;
83
+ text-align: left;
84
+ line-height: 32px;
85
+ font-weight: 600;
86
+ }
87
+
88
+ .table-element-result-table-content {
89
+ overflow-y: scroll;
90
+ flex: 1 1;
91
+ position: relative;
92
+ color: #212259;
93
+ }
94
+
95
+ .table-element-result-table-content .table-element-result-loading {
96
+ position: absolute;
97
+ left: 50vw;
98
+ }
99
+
100
+ .table-element-result-table {
101
+ display: flex;
102
+ flex-direction: column;
103
+ justify-content: flex-start;
104
+ align-items: flex-start;
105
+ }
106
+
107
+ .table-element-result-count {
108
+ height: 32px;
109
+ width: 100%;
110
+ overflow: hidden;
111
+ line-height: 32px;
112
+ background-color: #f9f9f9;
113
+ border-top: 1px solid #ccc;
114
+ padding: 0 8px;
115
+ }
116
+
117
+ /* cell formatter */
118
+ .table-element-result-table-cell .dtable-ui.cell-formatter-container {
119
+ height: 100%;
120
+ width: 100%;
121
+ line-height: 20px;
122
+ text-align: left !important;
123
+ }
124
+
125
+ .table-element-result-table-cell .multiple-select-formatter,
126
+ .table-element-result-table-cell .single-select-formatter {
127
+ line-height: 1;
128
+ }
129
+
130
+ .table-element-result-table-cell .table-element-button-formatter.cell-formatter-container {
131
+ margin: -3px auto;
132
+ text-align: center;
133
+ height: 26px;
134
+ line-height: 14px;
135
+ min-width: 80px;
136
+ max-width: 100%;
137
+ width: fit-content;
138
+ }
139
+
140
+ .table-element-result-table-cell .table-element-date-formatter,
141
+ .table-element-result-table-cell .table-element-number-formatter,
142
+ .table-element-result-table-cell .table-element-duration-formatter {
143
+ text-align: left;
144
+ }
145
+
146
+ .table-element-result-table-cell .table-element-text-formatter,
147
+ .table-element-result-table-cell .table-element-url-formatter,
148
+ .table-element-result-table-cell .table-element-email-formatter,
149
+ .table-element-result-table-cell .table-element-long-text-formatter .long-text-content {
150
+ overflow: hidden;
151
+ text-overflow: ellipsis;
152
+ white-space: nowrap;
153
+ }
154
+
155
+ .table-element-result-table-cell .dtable-ui.long-text-formatter {
156
+ height: 100%;
157
+ }
158
+
159
+ .table-element-result-table-cell .table-element-checkbox-formatter {
160
+ display: flex;
161
+ justify-content: center;
162
+ align-items: center;
163
+ }
164
+
165
+ .table-element-file-formatter .file-item-icon {
166
+ margin-right: 4px;
167
+ }
168
+
169
+ .table-element-result-table-cell .table-element-collaborator-formatter,
170
+ .table-element-result-table-cell .table-element-creator-formatter,
171
+ .table-element-result-table-cell .table-element-last-modifier-formatter {
172
+ display: flex;
173
+ align-items: center;
174
+ }
175
+
176
+ .table-element-result-table-cell .collaborator-avatar {
177
+ height: 16px;
178
+ width: 16px;
179
+ margin-left: 0;
180
+ }
181
+
182
+ /* link */
183
+ .table-element-result-table-cell .table-element-link-formatter {
184
+ display: flex;
185
+ align-items: center;
186
+ overflow: hidden;
187
+ flex-wrap: nowrap;
188
+ width: 100%;
189
+ height: 100%;
190
+ }
191
+
192
+ .table-element-result-table-cell .table-element-link-formatter .table-element-link-item {
193
+ flex-shrink: 0;
194
+ height: 20px;
195
+ margin-right: 4px;
196
+ padding: 0 6px;
197
+ font-size: 13px;
198
+ max-width: 100%;
199
+ background: #eceff4;
200
+ border-radius: 3px;
201
+ align-items: center;
202
+ vertical-align: middle;
203
+ overflow: hidden;
204
+ white-space: nowrap;
205
+ text-overflow: ellipsis;
206
+ line-height: 20px;
207
+ width: fit-content;
208
+ }
209
+
210
+ .table-element-result-table-cell .table-element-link-formatter .table-element-checkbox-item {
211
+ width: fit-content;
212
+ margin-right: 10px;
213
+ line-height: 36px;
214
+ }
215
+
216
+ .table-element-result-table-cell .table-element-link-formatter .table-element-long-text-item {
217
+ display: inline-flex;
218
+ margin-right: 10px;
219
+ font-size: 13px;
220
+ max-width: 100%;
221
+ flex-shrink: 0;
222
+ }
223
+
224
+ /* records count */
225
+ .table-element-result.success .table-element-result-count {
226
+ height: 32px;
227
+ width: 100%;
228
+ overflow: hidden;
229
+ line-height: 32px;
230
+ background-color: #F9F9F9;
231
+ padding: 0 8px;
232
+ border: 1px solid #ccc;
233
+ border-top: none;
234
+ border-radius: 0 0 3px 3px;
235
+ }
236
+
237
+ .table-element-result.success .table-element-result-count .tip {
238
+ color: #666;
239
+ }
@@ -0,0 +1,101 @@
1
+ import React from 'react';
2
+ import { getTableById } from 'dtable-utils';
3
+ import { isEqual } from 'lodash-es';
4
+ import context from '../../../context';
5
+ import Records from './components/records';
6
+ import './css/index.css';
7
+ export default class TableElement extends React.Component {
8
+ constructor(props) {
9
+ super(props);
10
+ this.getInitState = (config, tables) => {
11
+ let {
12
+ table_id,
13
+ shown_column_keys
14
+ } = config;
15
+ const selectedTable = getTableById(tables, table_id);
16
+ // if shown_column_keys was not set, use all columns
17
+ if (!shown_column_keys) shown_column_keys = selectedTable.columns.map(column => column.key);
18
+ const shownColumns = selectedTable.columns.filter(column => shown_column_keys.includes(column.key));
19
+ return {
20
+ selectedTable,
21
+ shownColumns
22
+ };
23
+ };
24
+ this.queryUsers = emails => {
25
+ let queryEmails = emails.filter(email => {
26
+ return !this.relatedUserEmailMap[email];
27
+ });
28
+ context.queryUsers(queryEmails, this.updateRelatedUser);
29
+ };
30
+ this.updateRelatedUser = emailUserMap => {
31
+ let newUsers = [...this.state.relatedUserList];
32
+ for (let email in emailUserMap) {
33
+ if (!this.relatedUserEmailMap[email]) {
34
+ this.relatedUserEmailMap[email] = true;
35
+ context.updateCollaboratorsCache(email, emailUserMap[email]);
36
+ newUsers.push(emailUserMap[email]);
37
+ }
38
+ }
39
+ if (this.state.relatedUserList.length !== newUsers.length) {
40
+ this.setState({
41
+ relatedUserList: newUsers
42
+ });
43
+ }
44
+ };
45
+ const {
46
+ chart,
47
+ tables: _tables
48
+ } = props;
49
+ const {
50
+ config: _config
51
+ } = chart;
52
+ const initState = this.getInitState(_config, _tables);
53
+ initState.relatedUserList = context.getCollaboratorsFromCache();
54
+ this.state = initState;
55
+ this.relatedUserEmailMap = {};
56
+ initState.relatedUserList.forEach(u => {
57
+ this.relatedUserEmailMap[u.email] = true;
58
+ });
59
+ }
60
+ UNSAFE_componentWillReceiveProps(nextProps) {
61
+ const {
62
+ chart,
63
+ result
64
+ } = nextProps;
65
+ const {
66
+ chart: oldChart
67
+ } = this.props;
68
+ const {
69
+ config
70
+ } = chart;
71
+ const {
72
+ config: oldConfig
73
+ } = oldChart;
74
+ if (!isEqual(config, oldConfig)) {
75
+ const state = this.getInitState(config, nextProps.tables, result);
76
+ this.setState(state);
77
+ }
78
+ }
79
+ render() {
80
+ const {
81
+ chart,
82
+ result
83
+ } = this.props;
84
+ const {
85
+ relatedUserList,
86
+ shownColumns,
87
+ selectedTable
88
+ } = this.state;
89
+ return /*#__PURE__*/React.createElement("div", {
90
+ className: "table-element-result",
91
+ ref: ref => this.wrapperRef = ref
92
+ }, /*#__PURE__*/React.createElement(Records, {
93
+ chart: chart,
94
+ selectedTable: selectedTable,
95
+ shownColumns: shownColumns,
96
+ records: result,
97
+ collaborators: relatedUserList,
98
+ queryUsers: this.queryUsers
99
+ }));
100
+ }
101
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sea-chart",
3
- "version": "1.1.21",
3
+ "version": "1.1.22-alpha.2",
4
4
  "main": "./dist/index.js",
5
5
  "dependencies": {
6
6
  "@antv/data-set": "0.11.8",