dtable-ui-component 0.1.74 → 0.1.75-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/cell-editor/checkbox-editor.js +104 -0
- package/es/components/cell-editor/collaborator-editor.js +236 -0
- package/es/components/cell-editor/date-editor.js +151 -0
- package/es/components/cell-editor/index.js +9 -0
- package/es/components/cell-editor/link-editor.js +303 -0
- package/es/components/cell-editor/multiple-select-editor.js +237 -0
- package/es/components/cell-editor/number-editor.js +154 -0
- package/es/components/cell-editor/single-select-editor.js +202 -0
- package/es/components/cell-editor/text-editor.js +122 -0
- package/es/components/cell-editor-dialog/pc-file-editor-dialog.js +46 -0
- package/es/components/cell-editor-dialog/pc-files-addition/index.js +0 -0
- package/es/components/cell-editor-dialog/pc-files-addition/pc-file-uploaded-item.js +0 -0
- package/es/components/cell-editor-dialog/pc-files-preview/index.js +0 -0
- package/es/components/cell-editor-dialog/pc-files-preview/pc-file-item-preview.js +0 -0
- package/es/components/cell-editor-popover/mb-collaborator-editor-popover.js +177 -0
- package/es/components/cell-editor-popover/mb-date-editor-popover.js +245 -0
- package/es/components/cell-editor-popover/mb-link-editor-popover.js +170 -0
- package/es/components/cell-editor-popover/mb-select-editor-popover.js +230 -0
- package/es/components/cell-editor-popover/pc-collaborator-editor-popover.js +109 -0
- package/es/components/cell-editor-popover/pc-date-editor-popover.js +142 -0
- package/es/components/cell-editor-popover/pc-link-editor-popover.js +114 -0
- package/es/components/cell-editor-popover/pc-select-editor-popover.js +143 -0
- package/es/index.js +2 -1
- package/es/utils/editor-utils.js +71 -0
- package/es/utils/normalize-long-text-value.js +2 -2
- package/package.json +3 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
+
import React, { Fragment } from 'react';
|
|
6
|
+
import MediaQuery from 'react-responsive';
|
|
7
|
+
import { getLocale } from '../../lang';
|
|
8
|
+
import * as CellTypes from '../../constants/cell-types';
|
|
9
|
+
import { getNumberDisplayString, getDateDisplayString } from '../../utils/value-format-utils';
|
|
10
|
+
import EditEditorButton from '../common/edit-editor-button';
|
|
11
|
+
import LinkEditorOption from '../common/link-editor-option';
|
|
12
|
+
import PCLinkEditorPopover from '../cell-editor-popover/pc-link-editor-popover';
|
|
13
|
+
import MBLinkEditorPopover from '../cell-editor-popover/mb-link-editor-popover';
|
|
14
|
+
|
|
15
|
+
var LinkEditor = /*#__PURE__*/function (_React$Component) {
|
|
16
|
+
_inherits(LinkEditor, _React$Component);
|
|
17
|
+
|
|
18
|
+
var _super = _createSuper(LinkEditor);
|
|
19
|
+
|
|
20
|
+
function LinkEditor(props) {
|
|
21
|
+
var _this;
|
|
22
|
+
|
|
23
|
+
_classCallCheck(this, LinkEditor);
|
|
24
|
+
|
|
25
|
+
_this = _super.call(this, props);
|
|
26
|
+
|
|
27
|
+
_this.onDocumentToggle = function (e) {
|
|
28
|
+
if (_this.editorContainer !== e.target && !_this.editorContainer.contains(e.target)) {
|
|
29
|
+
_this.onClosePopover();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
_this.getLinkedCellValue = function () {
|
|
34
|
+
var _this$props = _this.props,
|
|
35
|
+
row = _this$props.row,
|
|
36
|
+
column = _this$props.column,
|
|
37
|
+
linkMetaData = _this$props.linkMetaData;
|
|
38
|
+
|
|
39
|
+
var _ref = column.data || {},
|
|
40
|
+
link_id = _ref.link_id,
|
|
41
|
+
table_id = _ref.table_id,
|
|
42
|
+
other_table_id = _ref.other_table_id;
|
|
43
|
+
|
|
44
|
+
_this.linkId = link_id;
|
|
45
|
+
_this.tableId = table_id;
|
|
46
|
+
_this.otherTableId = other_table_id;
|
|
47
|
+
return linkMetaData.getLinkedCellValue(_this.linkId, _this.tableId, _this.otherTableId, row._id);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
_this.formatLinkedValuesToOptions = function () {
|
|
51
|
+
var _this$props2 = _this.props,
|
|
52
|
+
column = _this$props2.column,
|
|
53
|
+
linkMetaData = _this$props2.linkMetaData;
|
|
54
|
+
var rowIds = _this.state.newValue;
|
|
55
|
+
|
|
56
|
+
if (rowIds && Array.isArray(rowIds) && rowIds.length > 0) {
|
|
57
|
+
var linkedRows = linkMetaData.getLinkedRows(_this.otherTableId, rowIds);
|
|
58
|
+
var linkedTable = linkMetaData.getLinkedTable(_this.otherTableId);
|
|
59
|
+
return linkedRows.map(function (linkedRow) {
|
|
60
|
+
var displayColumnKey = column.data.display_column_key; // format value to display
|
|
61
|
+
|
|
62
|
+
var displayValue = _this.getDisplayValue(linkedTable, linkedRow, displayColumnKey);
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
id: linkedRow._id,
|
|
66
|
+
name: displayValue
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return [];
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
_this.getDisplayValue = function (linkedTable, linkedRow, displayColumnKey) {
|
|
75
|
+
var value = linkedRow[displayColumnKey];
|
|
76
|
+
var linkedColumn = linkedTable.columns.find(function (column) {
|
|
77
|
+
return column.key === displayColumnKey;
|
|
78
|
+
});
|
|
79
|
+
var type = linkedColumn.type,
|
|
80
|
+
data = linkedColumn.data;
|
|
81
|
+
|
|
82
|
+
switch (type) {
|
|
83
|
+
case CellTypes.NUMBER:
|
|
84
|
+
{
|
|
85
|
+
return getNumberDisplayString(value, data);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
case CellTypes.DATE:
|
|
89
|
+
{
|
|
90
|
+
var format = data.format;
|
|
91
|
+
return getDateDisplayString(value, format);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
default:
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
_this.getAvailableLinkedOptions = function () {
|
|
100
|
+
var _this$props3 = _this.props,
|
|
101
|
+
column = _this$props3.column,
|
|
102
|
+
linkMetaData = _this$props3.linkMetaData;
|
|
103
|
+
var displayColumnKey = column.data.display_column_key;
|
|
104
|
+
var linkedTable = linkMetaData.getLinkedTable(_this.otherTableId);
|
|
105
|
+
var availableRows = linkedTable.rows.filter(function (row) {
|
|
106
|
+
return !!row[displayColumnKey];
|
|
107
|
+
});
|
|
108
|
+
var availableOptions = availableRows.map(function (row) {
|
|
109
|
+
var displayValue = _this.getDisplayValue(linkedTable, row, displayColumnKey);
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
id: row._id,
|
|
113
|
+
name: displayValue
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
return availableOptions;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
_this.onCommit = function (newValue) {// nothing todo
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
_this.onAddOptionToggle = function (event) {
|
|
123
|
+
event.nativeEvent.stopImmediatePropagation();
|
|
124
|
+
event.stopPropagation();
|
|
125
|
+
|
|
126
|
+
if (_this.props.isReadOnly) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
var isPopoverShow = !_this.state.isPopoverShow;
|
|
131
|
+
|
|
132
|
+
if (isPopoverShow) {
|
|
133
|
+
var popoverPosition = _this.caculatePopoverPosition();
|
|
134
|
+
|
|
135
|
+
_this.setState({
|
|
136
|
+
isPopoverShow: isPopoverShow,
|
|
137
|
+
popoverPosition: popoverPosition
|
|
138
|
+
});
|
|
139
|
+
} else {
|
|
140
|
+
_this.setState({
|
|
141
|
+
isPopoverShow: isPopoverShow
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
_this.onOptionItemToggle = function (option) {
|
|
147
|
+
var _this$props4 = _this.props,
|
|
148
|
+
row = _this$props4.row,
|
|
149
|
+
linkMetaData = _this$props4.linkMetaData;
|
|
150
|
+
|
|
151
|
+
var newValue = _this.state.newValue.slice();
|
|
152
|
+
|
|
153
|
+
var optionIndex = newValue.findIndex(function (option_id) {
|
|
154
|
+
return option_id === option.id;
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (optionIndex !== -1) {
|
|
158
|
+
newValue.splice(optionIndex, 1);
|
|
159
|
+
linkMetaData.removeLink(_this.linkId, _this.tableId, _this.otherTableId, row._id, option.id);
|
|
160
|
+
} else {
|
|
161
|
+
newValue.push(option.id);
|
|
162
|
+
linkMetaData.addLink(_this.linkId, _this.tableId, _this.otherTableId, row._id, option.id);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
_this.setState({
|
|
166
|
+
newValue: newValue
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
_this.onDeleteOption = function (option) {
|
|
171
|
+
var _this$props5 = _this.props,
|
|
172
|
+
row = _this$props5.row,
|
|
173
|
+
linkMetaData = _this$props5.linkMetaData;
|
|
174
|
+
|
|
175
|
+
var newValue = _this.state.newValue.slice();
|
|
176
|
+
|
|
177
|
+
var optionIndex = newValue.findIndex(function (option_id) {
|
|
178
|
+
return option_id === option.id;
|
|
179
|
+
});
|
|
180
|
+
newValue.splice(optionIndex, 1);
|
|
181
|
+
|
|
182
|
+
_this.setState({
|
|
183
|
+
newValue: newValue
|
|
184
|
+
}, function () {
|
|
185
|
+
linkMetaData.removeLink(_this.linkId, _this.tableId, _this.otherTableId, row._id, option.id);
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
_this.caculatePopoverPosition = function () {
|
|
190
|
+
var POPOVER_MAX_HEIGHT = 200;
|
|
191
|
+
var innerHeight = window.innerHeight;
|
|
192
|
+
|
|
193
|
+
var _this$editor$getClien = _this.editor.getClientRects()[0],
|
|
194
|
+
top = _this$editor$getClien.top,
|
|
195
|
+
height = _this$editor$getClien.height;
|
|
196
|
+
|
|
197
|
+
var isBelow = innerHeight - (top + height) > POPOVER_MAX_HEIGHT;
|
|
198
|
+
var position = {
|
|
199
|
+
top: height + 1,
|
|
200
|
+
left: 0
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
if (!isBelow) {
|
|
204
|
+
var bottom = height + 1;
|
|
205
|
+
position = {
|
|
206
|
+
bottom: bottom,
|
|
207
|
+
left: 0
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return position;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
_this.onClosePopover = function () {
|
|
215
|
+
_this.setState({
|
|
216
|
+
isPopoverShow: false
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
_this.setEditorContainerRef = function (editorContainer) {
|
|
221
|
+
_this.editorContainer = editorContainer;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
_this.setEditorRef = function (editor) {
|
|
225
|
+
_this.editor = editor;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
_this.linkId = '';
|
|
229
|
+
_this.tableId = '';
|
|
230
|
+
_this.otherTableId = '';
|
|
231
|
+
_this.state = {
|
|
232
|
+
newValue: _this.getLinkedCellValue(),
|
|
233
|
+
isPopoverShow: false,
|
|
234
|
+
popoverPosition: {}
|
|
235
|
+
};
|
|
236
|
+
return _this;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
_createClass(LinkEditor, [{
|
|
240
|
+
key: "componentDidMount",
|
|
241
|
+
value: function componentDidMount() {
|
|
242
|
+
document.addEventListener('click', this.onDocumentToggle);
|
|
243
|
+
}
|
|
244
|
+
}, {
|
|
245
|
+
key: "componentWillUnmount",
|
|
246
|
+
value: function componentWillUnmount() {
|
|
247
|
+
document.removeEventListener('click', this.onDocumentToggle);
|
|
248
|
+
}
|
|
249
|
+
}, {
|
|
250
|
+
key: "render",
|
|
251
|
+
value: function render() {
|
|
252
|
+
var _this2 = this;
|
|
253
|
+
|
|
254
|
+
var isReadOnly = this.props.isReadOnly;
|
|
255
|
+
var _this$state = this.state,
|
|
256
|
+
isPopoverShow = _this$state.isPopoverShow,
|
|
257
|
+
popoverPosition = _this$state.popoverPosition;
|
|
258
|
+
var options = this.getAvailableLinkedOptions();
|
|
259
|
+
var selectedOptions = this.formatLinkedValuesToOptions();
|
|
260
|
+
var isShowRemoveIcon = !isReadOnly;
|
|
261
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
262
|
+
ref: this.setEditorContainerRef,
|
|
263
|
+
className: "cell-editor dtable-ui-link-editor"
|
|
264
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
265
|
+
ref: this.setEditorRef,
|
|
266
|
+
className: "dtable-ui-link-editor-container",
|
|
267
|
+
onClick: this.onAddOptionToggle
|
|
268
|
+
}, selectedOptions.length === 0 && /*#__PURE__*/React.createElement(EditEditorButton, {
|
|
269
|
+
text: getLocale('Add_an_option')
|
|
270
|
+
}), selectedOptions.length !== 0 && selectedOptions.map(function (option) {
|
|
271
|
+
return /*#__PURE__*/React.createElement(LinkEditorOption, {
|
|
272
|
+
key: option.id,
|
|
273
|
+
option: option,
|
|
274
|
+
isShowRemoveIcon: isShowRemoveIcon,
|
|
275
|
+
onDeleteLinkOption: _this2.onDeleteOption
|
|
276
|
+
});
|
|
277
|
+
})), isPopoverShow && /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(MediaQuery, {
|
|
278
|
+
query: "(min-width: 768px)"
|
|
279
|
+
}, /*#__PURE__*/React.createElement(PCLinkEditorPopover, {
|
|
280
|
+
popoverPosition: popoverPosition,
|
|
281
|
+
options: options,
|
|
282
|
+
selectedOptions: selectedOptions,
|
|
283
|
+
onOptionItemToggle: this.onOptionItemToggle
|
|
284
|
+
})), /*#__PURE__*/React.createElement(MediaQuery, {
|
|
285
|
+
query: "(max-width: 767.8px)"
|
|
286
|
+
}, /*#__PURE__*/React.createElement(MBLinkEditorPopover, {
|
|
287
|
+
isReadOnly: this.props.isReadOnly,
|
|
288
|
+
value: this.state.newValue,
|
|
289
|
+
column: this.props.column,
|
|
290
|
+
options: options,
|
|
291
|
+
onOptionItemToggle: this.onOptionItemToggle,
|
|
292
|
+
onClosePopover: this.onClosePopover
|
|
293
|
+
}))));
|
|
294
|
+
}
|
|
295
|
+
}]);
|
|
296
|
+
|
|
297
|
+
return LinkEditor;
|
|
298
|
+
}(React.Component);
|
|
299
|
+
|
|
300
|
+
LinkEditor.defaultProps = {
|
|
301
|
+
isReadOnly: false
|
|
302
|
+
};
|
|
303
|
+
export default LinkEditor;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
+
import React, { Fragment } from 'react';
|
|
6
|
+
import MediaQuery from 'react-responsive';
|
|
7
|
+
import { getLocale } from '../../lang';
|
|
8
|
+
import EditEditorButton from '../common/edit-editor-button';
|
|
9
|
+
import SelectEditorOption from '../common/select-editor-option';
|
|
10
|
+
import PCSelectEditorPopover from '../cell-editor-popover/pc-select-editor-popover';
|
|
11
|
+
import MBSingleSelectPopover from '../cell-editor-popover/mb-select-editor-popover';
|
|
12
|
+
|
|
13
|
+
var MultipleSelectEditor = /*#__PURE__*/function (_React$Component) {
|
|
14
|
+
_inherits(MultipleSelectEditor, _React$Component);
|
|
15
|
+
|
|
16
|
+
var _super = _createSuper(MultipleSelectEditor);
|
|
17
|
+
|
|
18
|
+
function MultipleSelectEditor(props) {
|
|
19
|
+
var _this;
|
|
20
|
+
|
|
21
|
+
_classCallCheck(this, MultipleSelectEditor);
|
|
22
|
+
|
|
23
|
+
_this = _super.call(this, props);
|
|
24
|
+
|
|
25
|
+
_this.onDocumentToggle = function (e) {
|
|
26
|
+
if (_this.editorContainer !== e.target && !_this.editorContainer.contains(e.target)) {
|
|
27
|
+
_this.onClosePopover();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
_this.getFormattedOptions = function () {
|
|
32
|
+
var newValue = _this.state.newValue;
|
|
33
|
+
|
|
34
|
+
if (Array.isArray(newValue) && newValue.length > 0) {
|
|
35
|
+
return newValue.map(function (option_id) {
|
|
36
|
+
return _this.options.find(function (option) {
|
|
37
|
+
return option.id === option_id;
|
|
38
|
+
});
|
|
39
|
+
}).filter(function (option) {
|
|
40
|
+
return !!option;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return [];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
_this.onAddOptionToggle = function (event) {
|
|
48
|
+
event.nativeEvent.stopImmediatePropagation();
|
|
49
|
+
event.stopPropagation();
|
|
50
|
+
|
|
51
|
+
if (_this.props.isReadOnly) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var isPopoverShow = !_this.state.isPopoverShow;
|
|
56
|
+
|
|
57
|
+
if (isPopoverShow) {
|
|
58
|
+
var popoverPosition = _this.caculatePopoverPosition();
|
|
59
|
+
|
|
60
|
+
_this.setState({
|
|
61
|
+
isPopoverShow: isPopoverShow,
|
|
62
|
+
popoverPosition: popoverPosition
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
_this.setState({
|
|
66
|
+
isPopoverShow: isPopoverShow
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
_this.onCommit = function (newValue) {
|
|
72
|
+
var updated = {};
|
|
73
|
+
var column = _this.props.column;
|
|
74
|
+
updated[column.key] = newValue;
|
|
75
|
+
|
|
76
|
+
_this.props.onCommit(updated);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
_this.onOptionItemToggle = function (option) {
|
|
80
|
+
var newValue = _this.state.newValue.slice();
|
|
81
|
+
|
|
82
|
+
var optionIndex = newValue.findIndex(function (option_id) {
|
|
83
|
+
return option_id === option.id;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (optionIndex !== -1) {
|
|
87
|
+
newValue.splice(optionIndex, 1);
|
|
88
|
+
} else {
|
|
89
|
+
newValue.push(option.id);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
_this.setState({
|
|
93
|
+
newValue: newValue
|
|
94
|
+
}, function () {
|
|
95
|
+
_this.onCommit(newValue);
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
_this.onDeleteOption = function (option) {
|
|
100
|
+
var newValue = _this.state.newValue.slice();
|
|
101
|
+
|
|
102
|
+
var optionIndex = newValue.findIndex(function (option_id) {
|
|
103
|
+
return option_id === option.id;
|
|
104
|
+
});
|
|
105
|
+
newValue.splice(optionIndex, 1);
|
|
106
|
+
|
|
107
|
+
_this.setState({
|
|
108
|
+
newValue: newValue
|
|
109
|
+
}, function () {
|
|
110
|
+
_this.onCommit(newValue);
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
_this.onAddNewOption = function (optionName) {
|
|
115
|
+
_this.props.onAddNewOption(optionName);
|
|
116
|
+
|
|
117
|
+
_this.onClosePopover();
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
_this.caculatePopoverPosition = function () {
|
|
121
|
+
var POPOVER_MAX_HEIGHT = 200;
|
|
122
|
+
var innerHeight = window.innerHeight;
|
|
123
|
+
|
|
124
|
+
var _this$editor$getClien = _this.editor.getClientRects()[0],
|
|
125
|
+
top = _this$editor$getClien.top,
|
|
126
|
+
height = _this$editor$getClien.height;
|
|
127
|
+
|
|
128
|
+
var isBelow = innerHeight - (top + height) > POPOVER_MAX_HEIGHT;
|
|
129
|
+
var position = {
|
|
130
|
+
top: height + 1,
|
|
131
|
+
left: 0
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
if (!isBelow) {
|
|
135
|
+
var bottom = height + 1;
|
|
136
|
+
position = {
|
|
137
|
+
bottom: bottom,
|
|
138
|
+
left: 0
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return position;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
_this.onClosePopover = function () {
|
|
146
|
+
_this.setState({
|
|
147
|
+
isPopoverShow: false
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
_this.setEditorContainerRef = function (editorContainer) {
|
|
152
|
+
_this.editorContainer = editorContainer;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
_this.setEditorRef = function (editor) {
|
|
156
|
+
_this.editor = editor;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
_this.state = {
|
|
160
|
+
newValue: Array.isArray(props.value) ? props.value : [],
|
|
161
|
+
isPopoverShow: false,
|
|
162
|
+
popoverPosition: {}
|
|
163
|
+
};
|
|
164
|
+
var _column = _this.props.column;
|
|
165
|
+
_this.options = _column.data && (_column.data.options || []);
|
|
166
|
+
return _this;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
_createClass(MultipleSelectEditor, [{
|
|
170
|
+
key: "componentDidMount",
|
|
171
|
+
value: function componentDidMount() {
|
|
172
|
+
document.addEventListener('click', this.onDocumentToggle);
|
|
173
|
+
}
|
|
174
|
+
}, {
|
|
175
|
+
key: "componentWillUnmount",
|
|
176
|
+
value: function componentWillUnmount() {
|
|
177
|
+
document.removeEventListener('click', this.onDocumentToggle);
|
|
178
|
+
}
|
|
179
|
+
}, {
|
|
180
|
+
key: "render",
|
|
181
|
+
value: function render() {
|
|
182
|
+
var _this2 = this;
|
|
183
|
+
|
|
184
|
+
var _this$state = this.state,
|
|
185
|
+
isPopoverShow = _this$state.isPopoverShow,
|
|
186
|
+
popoverPosition = _this$state.popoverPosition;
|
|
187
|
+
var options = this.options;
|
|
188
|
+
var selectedOptions = this.getFormattedOptions();
|
|
189
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
190
|
+
ref: this.setEditorContainerRef,
|
|
191
|
+
className: "cell-editor dtable-ui-multiple-select-editor"
|
|
192
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
193
|
+
ref: this.setEditorRef,
|
|
194
|
+
className: "dtable-ui-select-editor-container",
|
|
195
|
+
onClick: this.onAddOptionToggle
|
|
196
|
+
}, selectedOptions.length === 0 && /*#__PURE__*/React.createElement(EditEditorButton, {
|
|
197
|
+
text: getLocale('Add_an_option')
|
|
198
|
+
}), selectedOptions.length !== 0 && selectedOptions.map(function (option) {
|
|
199
|
+
return /*#__PURE__*/React.createElement(SelectEditorOption, {
|
|
200
|
+
key: option.id,
|
|
201
|
+
option: option,
|
|
202
|
+
isShowRemoveIcon: true,
|
|
203
|
+
onDeleteSelectOption: _this2.onDeleteOption
|
|
204
|
+
});
|
|
205
|
+
})), isPopoverShow && /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(MediaQuery, {
|
|
206
|
+
query: "(min-width: 768px)"
|
|
207
|
+
}, /*#__PURE__*/React.createElement(PCSelectEditorPopover, {
|
|
208
|
+
popoverPosition: popoverPosition,
|
|
209
|
+
options: options,
|
|
210
|
+
selectedOptions: selectedOptions,
|
|
211
|
+
onOptionItemToggle: this.onOptionItemToggle,
|
|
212
|
+
isSupportNewOption: this.props.isSupportNewOption,
|
|
213
|
+
onAddNewOption: this.onAddNewOption
|
|
214
|
+
})), /*#__PURE__*/React.createElement(MediaQuery, {
|
|
215
|
+
query: "(max-width: 767.8px)"
|
|
216
|
+
}, /*#__PURE__*/React.createElement(MBSingleSelectPopover, {
|
|
217
|
+
isReadOnly: this.props.isReadOnly,
|
|
218
|
+
value: this.state.newValue,
|
|
219
|
+
column: this.props.column,
|
|
220
|
+
options: options,
|
|
221
|
+
onOptionItemToggle: this.onOptionItemToggle,
|
|
222
|
+
isShowRemoveIcon: true,
|
|
223
|
+
isSupportNewOption: this.props.isSupportNewOption,
|
|
224
|
+
onAddNewOption: this.onAddNewOption,
|
|
225
|
+
onClosePopover: this.onClosePopover
|
|
226
|
+
}))));
|
|
227
|
+
}
|
|
228
|
+
}]);
|
|
229
|
+
|
|
230
|
+
return MultipleSelectEditor;
|
|
231
|
+
}(React.Component);
|
|
232
|
+
|
|
233
|
+
MultipleSelectEditor.defaultProps = {
|
|
234
|
+
isReadOnly: false,
|
|
235
|
+
value: []
|
|
236
|
+
};
|
|
237
|
+
export default MultipleSelectEditor;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import isHotkey from 'is-hotkey';
|
|
7
|
+
import { NUMBER_TYPES } from '../../constants';
|
|
8
|
+
import { getNumberDisplayString, formatStringToNumber, formatNumberString } from '../../utils/value-format-utils';
|
|
9
|
+
|
|
10
|
+
var NumberEditor = /*#__PURE__*/function (_React$Component) {
|
|
11
|
+
_inherits(NumberEditor, _React$Component);
|
|
12
|
+
|
|
13
|
+
var _super = _createSuper(NumberEditor);
|
|
14
|
+
|
|
15
|
+
function NumberEditor(props) {
|
|
16
|
+
var _this;
|
|
17
|
+
|
|
18
|
+
_classCallCheck(this, NumberEditor);
|
|
19
|
+
|
|
20
|
+
_this = _super.call(this, props);
|
|
21
|
+
|
|
22
|
+
_this.onEditorHandle = function () {
|
|
23
|
+
if (_this.props.isReadOnly) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
_this.setState({
|
|
28
|
+
isEditorShow: true,
|
|
29
|
+
inputValue: _this.state.textValue
|
|
30
|
+
}, function () {
|
|
31
|
+
_this.input.focus();
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
_this.onCommit = function () {
|
|
36
|
+
var updated = {};
|
|
37
|
+
var column = _this.props.column;
|
|
38
|
+
var inputValue = _this.state.inputValue ? _this.state.inputValue.toString() : '';
|
|
39
|
+
var value = inputValue ? formatStringToNumber(inputValue) : ''; // format the number to submit
|
|
40
|
+
|
|
41
|
+
updated[column.key] = value;
|
|
42
|
+
|
|
43
|
+
_this.props.onCommit(updated);
|
|
44
|
+
|
|
45
|
+
var newValue = getNumberDisplayString(value, column.data); // format the number to display
|
|
46
|
+
|
|
47
|
+
_this.setState({
|
|
48
|
+
isEditorShow: false,
|
|
49
|
+
textValue: newValue
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
_this.onChange = function (event) {
|
|
54
|
+
var value = event.target.value.trim();
|
|
55
|
+
value = formatNumberString(value, _this.dataFormat); // format the number in changing
|
|
56
|
+
|
|
57
|
+
if (value === _this.state.inputValue) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
_this.setState({
|
|
62
|
+
inputValue: value
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
_this.onBlur = function () {
|
|
67
|
+
_this.onCommit();
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
_this.onKeyDown = function (event) {
|
|
71
|
+
var _event$currentTarget = event.currentTarget,
|
|
72
|
+
selectionStart = _event$currentTarget.selectionStart,
|
|
73
|
+
selectionEnd = _event$currentTarget.selectionEnd,
|
|
74
|
+
value = _event$currentTarget.value;
|
|
75
|
+
|
|
76
|
+
if (isHotkey('enter', event)) {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
|
|
79
|
+
_this.onBlur();
|
|
80
|
+
} else if (event.keyCode === 37 && selectionStart === 0 || event.keyCode === 39 && selectionEnd === value.length) {
|
|
81
|
+
event.stopPropagation();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
_this.onPaste = function (e) {
|
|
86
|
+
e.stopPropagation();
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
_this.onCut = function (e) {
|
|
90
|
+
e.stopPropagation();
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
_this.getStyle = function () {
|
|
94
|
+
return {
|
|
95
|
+
width: '320px',
|
|
96
|
+
textAlign: 'left'
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
_this.setInputRef = function (input) {
|
|
101
|
+
_this.input = input;
|
|
102
|
+
return _this.input;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
var _this$props = _this.props,
|
|
106
|
+
_value = _this$props.value,
|
|
107
|
+
_column = _this$props.column;
|
|
108
|
+
var dataFormat = _column.data && _column.data.format;
|
|
109
|
+
_this.dataFormat = dataFormat || NUMBER_TYPES.NUMBER;
|
|
110
|
+
var initValue = getNumberDisplayString(_value, _column.data); // format the number to display
|
|
111
|
+
|
|
112
|
+
_this.state = {
|
|
113
|
+
inputValue: initValue,
|
|
114
|
+
textValue: initValue,
|
|
115
|
+
isEditorShow: false
|
|
116
|
+
};
|
|
117
|
+
return _this;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
_createClass(NumberEditor, [{
|
|
121
|
+
key: "render",
|
|
122
|
+
value: function render() {
|
|
123
|
+
var style = this.getStyle();
|
|
124
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
125
|
+
className: "cell-editor number-editor"
|
|
126
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
127
|
+
className: "number-editor-container"
|
|
128
|
+
}, !this.state.isEditorShow && /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
className: "form-control",
|
|
130
|
+
style: style,
|
|
131
|
+
onClick: this.onEditorHandle
|
|
132
|
+
}, this.state.textValue), this.state.isEditorShow && /*#__PURE__*/React.createElement("input", {
|
|
133
|
+
ref: this.setInputRef,
|
|
134
|
+
type: "text",
|
|
135
|
+
className: "form-control",
|
|
136
|
+
style: style,
|
|
137
|
+
value: this.state.inputValue,
|
|
138
|
+
onChange: this.onChange,
|
|
139
|
+
onBlur: this.onBlur,
|
|
140
|
+
onCut: this.onCut,
|
|
141
|
+
onPaste: this.onPaste,
|
|
142
|
+
onKeyDown: this.onKeyDown
|
|
143
|
+
})));
|
|
144
|
+
}
|
|
145
|
+
}]);
|
|
146
|
+
|
|
147
|
+
return NumberEditor;
|
|
148
|
+
}(React.Component);
|
|
149
|
+
|
|
150
|
+
NumberEditor.defaultProps = {
|
|
151
|
+
isReadOnly: false,
|
|
152
|
+
value: ''
|
|
153
|
+
};
|
|
154
|
+
export default NumberEditor;
|