dtable-ui-component 0.2.1 → 0.2.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 (110) hide show
  1. package/es/app.css +20 -0
  2. package/es/app.js +91 -0
  3. package/es/assets/images/avatar/default_avatar.png +0 -0
  4. package/es/assets/images/file/192/excel.png +0 -0
  5. package/es/assets/images/file/192/file.png +0 -0
  6. package/es/assets/images/file/192/music.png +0 -0
  7. package/es/assets/images/file/192/pdf.png +0 -0
  8. package/es/assets/images/file/192/pic.png +0 -0
  9. package/es/assets/images/file/192/ppt.png +0 -0
  10. package/es/assets/images/file/192/txt.png +0 -0
  11. package/es/assets/images/file/192/video.png +0 -0
  12. package/es/assets/images/file/192/word.png +0 -0
  13. package/es/assets/images/file/24/excel.png +0 -0
  14. package/es/assets/images/file/24/file.png +0 -0
  15. package/es/assets/images/file/24/music.png +0 -0
  16. package/es/assets/images/file/24/pdf.png +0 -0
  17. package/es/assets/images/file/24/pic.png +0 -0
  18. package/es/assets/images/file/24/ppt.png +0 -0
  19. package/es/assets/images/file/24/txt.png +0 -0
  20. package/es/assets/images/file/24/video.png +0 -0
  21. package/es/assets/images/file/24/word.png +0 -0
  22. package/es/assets/images/folder/folder-192.png +0 -0
  23. package/es/assets/images/folder/folder-24.png +0 -0
  24. package/es/components/cell-editor/checkbox-editor.js +104 -0
  25. package/es/components/cell-editor/collaborator-editor.js +236 -0
  26. package/es/components/cell-editor/date-editor.js +151 -0
  27. package/es/components/cell-editor/index.js +9 -0
  28. package/es/components/cell-editor/link-editor.js +303 -0
  29. package/es/components/cell-editor/multiple-select-editor.js +237 -0
  30. package/es/components/cell-editor/number-editor.js +154 -0
  31. package/es/components/cell-editor/single-select-editor.js +202 -0
  32. package/es/components/cell-editor/text-editor.js +122 -0
  33. package/es/components/cell-editor-dialog/pc-file-editor-dialog.js +46 -0
  34. package/es/components/cell-editor-dialog/pc-files-addition/index.js +0 -0
  35. package/es/components/cell-editor-dialog/pc-files-addition/pc-file-uploaded-item.js +0 -0
  36. package/es/components/cell-editor-dialog/pc-files-preview/index.js +0 -0
  37. package/es/components/cell-editor-dialog/pc-files-preview/pc-file-item-preview.js +0 -0
  38. package/es/components/cell-editor-popover/mb-collaborator-editor-popover.js +177 -0
  39. package/es/components/cell-editor-popover/mb-date-editor-popover.js +245 -0
  40. package/es/components/cell-editor-popover/mb-link-editor-popover.js +170 -0
  41. package/es/components/cell-editor-popover/mb-select-editor-popover.js +230 -0
  42. package/es/components/cell-editor-popover/pc-collaborator-editor-popover.js +109 -0
  43. package/es/components/cell-editor-popover/pc-date-editor-popover.js +142 -0
  44. package/es/components/cell-editor-popover/pc-link-editor-popover.js +114 -0
  45. package/es/components/cell-editor-popover/pc-select-editor-popover.js +143 -0
  46. package/es/components/cell-factory/cell-formatter-factory.js +25 -0
  47. package/es/components/cell-formatter/auto-number-formatter.js +35 -0
  48. package/es/components/cell-formatter/button-formatter.js +55 -0
  49. package/es/components/cell-formatter/checkbox-formatter.js +44 -0
  50. package/es/components/cell-formatter/collaborator-formatter.js +91 -0
  51. package/es/components/cell-formatter/creator-formatter.js +87 -0
  52. package/es/components/cell-formatter/ctime-formatter.js +57 -0
  53. package/es/components/cell-formatter/date-formatter.js +59 -0
  54. package/es/components/cell-formatter/duration-formatter.js +37 -0
  55. package/es/components/cell-formatter/email-formatter.js +35 -0
  56. package/es/components/cell-formatter/file-formatter.js +63 -0
  57. package/es/components/cell-formatter/formatter-config.js +31 -0
  58. package/es/components/cell-formatter/formula-formatter.js +173 -0
  59. package/es/components/cell-formatter/geolocation-formatter.js +49 -0
  60. package/es/components/cell-formatter/image-formatter.js +153 -0
  61. package/es/components/cell-formatter/index.js +26 -0
  62. package/es/components/cell-formatter/last-modifier-formatter.js +87 -0
  63. package/es/components/cell-formatter/link-formatter.js +144 -0
  64. package/es/components/cell-formatter/long-text-formatter.js +106 -0
  65. package/es/components/cell-formatter/mtime-formatter.js +57 -0
  66. package/es/components/cell-formatter/multiple-select-formatter.js +70 -0
  67. package/es/components/cell-formatter/number-formatter.js +46 -0
  68. package/es/components/cell-formatter/rate-formatter.js +74 -0
  69. package/es/components/cell-formatter/single-select-formatter.js +69 -0
  70. package/es/components/cell-formatter/text-formatter.js +35 -0
  71. package/es/components/cell-formatter/url-formatter.js +35 -0
  72. package/es/components/cell-formatter/widgets/file-item-formatter.js +50 -0
  73. package/es/components/cell-formatter/widgets/image-previewer-lightbox.js +119 -0
  74. package/es/components/common/collaborator-item.js +63 -0
  75. package/es/components/common/edit-editor-button.js +56 -0
  76. package/es/components/common/images-lazy-load.js +148 -0
  77. package/es/components/common/link-editor-option.js +113 -0
  78. package/es/components/common/mobile/mb-editor-header.js +48 -0
  79. package/es/components/common/modal-portal.js +44 -0
  80. package/es/components/common/select-editor-option.js +106 -0
  81. package/es/components/common/select-item.js +58 -0
  82. package/es/components/file-uploader/index.js +53 -0
  83. package/es/components/loading.js +7 -0
  84. package/es/components/toast/alert.js +150 -0
  85. package/es/components/toast/index.js +3 -0
  86. package/es/components/toast/toast.js +179 -0
  87. package/es/components/toast/toastManager.js +170 -0
  88. package/es/components/toast/toaster.js +76 -0
  89. package/es/css/cell-editor.css +614 -0
  90. package/es/css/cell-formatter.css +241 -0
  91. package/es/css/custom-rc-calendar.css +118 -0
  92. package/es/css/image-previewer-ligntbox.css +87 -0
  93. package/es/css/loading.css +54 -0
  94. package/es/index.js +5 -0
  95. package/es/lang/index.js +50 -0
  96. package/es/locals/de.js +2 -0
  97. package/es/locals/en.js +17 -0
  98. package/es/locals/fr.js +2 -0
  99. package/es/locals/zh-CN.js +17 -0
  100. package/es/utils/cell-types.js +25 -0
  101. package/es/utils/constants.js +41 -0
  102. package/es/utils/editor-utils.js +71 -0
  103. package/es/utils/normalize-long-text-value.js +68 -0
  104. package/es/utils/number-precision.js +163 -0
  105. package/es/utils/utils.js +116 -0
  106. package/es/utils/value-format-utils.js +281 -0
  107. package/lib/ImageFormatter/index.js +2 -1
  108. package/lib/ImagePreviewerLightbox/index.js +3 -2
  109. package/lib/ImagePreviewerLightbox/utils.js +3 -2
  110. package/package.json +1 -1
@@ -0,0 +1,245 @@
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 { DatePicker } from 'antd-mobile';
7
+ import moment from 'moment';
8
+ import Calendar from '@seafile/seafile-calendar';
9
+ import * as SeaDatePicker from '@seafile/seafile-calendar/lib/Picker';
10
+ import { getLocale } from '../../lang';
11
+ import { initDateEditorLanguage } from '../../utils/editor-utils';
12
+ import MBEditorHeader from '../common/mobile/mb-editor-header';
13
+ import '@seafile/seafile-calendar/assets/index.css';
14
+ import '../../css/custom-rc-calendar.css';
15
+
16
+ var DateEidtorPopover = /*#__PURE__*/function (_React$PureComponent) {
17
+ _inherits(DateEidtorPopover, _React$PureComponent);
18
+
19
+ var _super = _createSuper(DateEidtorPopover);
20
+
21
+ function DateEidtorPopover(props) {
22
+ var _this;
23
+
24
+ _classCallCheck(this, DateEidtorPopover);
25
+
26
+ _this = _super.call(this, props);
27
+
28
+ _this.handleHistaryBack = function (e) {
29
+ e.preventDefault();
30
+
31
+ _this.closePopover();
32
+ };
33
+
34
+ _this.handleDateChange = function (date) {
35
+ var _this$props = _this.props,
36
+ dateFormat = _this$props.dateFormat,
37
+ showHourAndMinute = _this$props.showHourAndMinute;
38
+ var newValue = moment(date);
39
+
40
+ if (showHourAndMinute) {
41
+ var datePickerValue = _this.state.datePickerValue;
42
+ var HM = datePickerValue.format('HH:mm');
43
+ var format = dateFormat.split(' ')[0]; // 'YYYY-MM-DD HH:mm'
44
+
45
+ var newDate = moment(date).format(format) + ' ' + HM;
46
+ newValue = moment(newDate);
47
+ }
48
+
49
+ _this.setState({
50
+ datePickerValue: moment(date)
51
+ });
52
+
53
+ _this.props.onValueChanged(newValue.format(dateFormat));
54
+ };
55
+
56
+ _this.handleTimeChange = function (time) {
57
+ var datePickerValue = _this.state.datePickerValue;
58
+ var dateFormat = _this.props.dateFormat;
59
+ var format = dateFormat.split(' ')[0]; // 'YYYY-MM-DD HH:mm'
60
+
61
+ var YMD = datePickerValue.format(format);
62
+ var newDate = YMD + ' ' + moment(time).format('HH:mm');
63
+ var newValue = moment(newDate);
64
+
65
+ _this.setState({
66
+ datePickerValue: newValue
67
+ });
68
+
69
+ _this.props.onValueChanged(datePickerValue.format(dateFormat));
70
+ };
71
+
72
+ _this.closePopover = function () {
73
+ _this.props.onClosePopover();
74
+ };
75
+
76
+ _this.deleteDate = function () {
77
+ _this.props.onValueChanged('');
78
+
79
+ _this.closePopover();
80
+ };
81
+
82
+ _this.onChange = function (value) {
83
+ if (!value) return;
84
+ var dateFormat = _this.props.dateFormat;
85
+
86
+ _this.setState({
87
+ datePickerValue: value
88
+ });
89
+
90
+ _this.props.onValueChanged(value.format(dateFormat));
91
+ };
92
+
93
+ _this.onContainerClick = function (event) {
94
+ if (_this.editorPopover && _this.editorPopover.contains(event.target)) {
95
+ event.stopPropagation();
96
+ event.nativeEvent.stopImmediatePropagation();
97
+ return false;
98
+ }
99
+ };
100
+
101
+ _this.setEditorPopover = function (editorPopover) {
102
+ _this.editorPopover = editorPopover;
103
+ };
104
+
105
+ _this.getCalendarContainer = function () {
106
+ return _this.calendarContainerRef.current;
107
+ };
108
+
109
+ _this.getCalender = function () {
110
+ var _this$props2 = _this.props,
111
+ dateFormat = _this$props2.dateFormat,
112
+ lang = _this$props2.lang;
113
+ var defaultValue = moment().clone();
114
+ return /*#__PURE__*/React.createElement(Calendar, {
115
+ locale: initDateEditorLanguage(lang),
116
+ format: dateFormat,
117
+ defaultValue: defaultValue,
118
+ dateInputPlaceholder: getLocale('Please_input'),
119
+ showDateInput: false,
120
+ focusablePanel: false,
121
+ showToday: false,
122
+ showTime: false,
123
+ style: {
124
+ width: '100%',
125
+ fontSize: '14px'
126
+ }
127
+ });
128
+ };
129
+
130
+ _this.renderDataPicker = function () {
131
+ var dateFormat = _this.props.dateFormat;
132
+ var datePickerValue = _this.state.datePickerValue;
133
+
134
+ var calendar = _this.getCalender();
135
+
136
+ return /*#__PURE__*/React.createElement(SeaDatePicker, {
137
+ open: true,
138
+ style: {
139
+ width: '100%'
140
+ },
141
+ calendar: calendar,
142
+ value: datePickerValue,
143
+ getCalendarContainer: _this.getCalendarContainer,
144
+ onChange: _this.onChange
145
+ }, function (_ref) {
146
+ var value = _ref.value;
147
+ value = value && value.format(dateFormat);
148
+ return /*#__PURE__*/React.createElement("div", {
149
+ tabIndex: "0",
150
+ onFocus: _this.onReadOnlyFocus
151
+ }, /*#__PURE__*/React.createElement("input", {
152
+ placeholder: getLocale('Please_select'),
153
+ readOnly: true,
154
+ tabIndex: "-1",
155
+ className: "form-control",
156
+ value: value || ''
157
+ }), /*#__PURE__*/React.createElement("div", {
158
+ ref: _this.calendarContainerRef,
159
+ style: {
160
+ height: '22rem'
161
+ }
162
+ }));
163
+ });
164
+ };
165
+
166
+ _this.state = {
167
+ open: true,
168
+ datePickerValue: props.value ? moment(props.value) : moment().clone()
169
+ };
170
+ _this.calendarContainerRef = React.createRef();
171
+ return _this;
172
+ }
173
+
174
+ _createClass(DateEidtorPopover, [{
175
+ key: "componentDidMount",
176
+ value: function componentDidMount() {
177
+ history.pushState(null, null, '#'); // eslint-disable-line
178
+
179
+ window.addEventListener('popstate', this.handleHistaryBack, false);
180
+ }
181
+ }, {
182
+ key: "componentWillUnmount",
183
+ value: function componentWillUnmount() {
184
+ window.removeEventListener('popstate', this.handleHistaryBack, false);
185
+ }
186
+ }, {
187
+ key: "render",
188
+ value: function render() {
189
+ var _this$props3 = this.props,
190
+ lang = _this$props3.lang,
191
+ column = _this$props3.column,
192
+ dateFormat = _this$props3.dateFormat,
193
+ showHourAndMinute = _this$props3.showHourAndMinute;
194
+ var leftFormat = dateFormat.split(' ')[0];
195
+ var rightFormat = dateFormat.split(' ')[1];
196
+ var datePickerValue = this.state.datePickerValue;
197
+ return /*#__PURE__*/React.createElement("div", {
198
+ ref: this.setEditorPopover,
199
+ className: "dtable-ui-mb-editor-popover mb-date-editor-popover",
200
+ onClick: this.onContainerClick
201
+ }, /*#__PURE__*/React.createElement(MBEditorHeader, {
202
+ title: column.name,
203
+ leftContent: /*#__PURE__*/React.createElement("i", {
204
+ className: "dtable-font dtable-icon-return"
205
+ }),
206
+ rightContent: /*#__PURE__*/React.createElement("span", null, getLocale('Done')),
207
+ onLeftClick: this.props.onClosePopover,
208
+ onRightClick: this.props.onClosePopover
209
+ }), /*#__PURE__*/React.createElement("div", {
210
+ className: "dtable-ui-mb-editor-body dtable-ui-mb-date-editor-body"
211
+ }, /*#__PURE__*/React.createElement("div", {
212
+ className: "mb-date-editor-input"
213
+ }, /*#__PURE__*/React.createElement("div", {
214
+ className: "date-input"
215
+ }, /*#__PURE__*/React.createElement(DatePicker, {
216
+ mode: "date",
217
+ locale: initDateEditorLanguage(lang),
218
+ value: this.state.value,
219
+ onChange: this.handleDateChange
220
+ }, /*#__PURE__*/React.createElement("div", {
221
+ className: "date-input-day"
222
+ }, datePickerValue && datePickerValue.format(leftFormat)))), showHourAndMinute && /*#__PURE__*/React.createElement("div", {
223
+ className: "date-input"
224
+ }, /*#__PURE__*/React.createElement(DatePicker, {
225
+ mode: "time",
226
+ locale: initDateEditorLanguage(lang),
227
+ value: this.state.value,
228
+ onChange: this.handleTimeChange
229
+ }, /*#__PURE__*/React.createElement("div", {
230
+ className: "date-input-day"
231
+ }, datePickerValue && datePickerValue.format(rightFormat))))), /*#__PURE__*/React.createElement("div", {
232
+ className: "dtable-ui mb-date-editor-picker"
233
+ }, this.renderDataPicker()), /*#__PURE__*/React.createElement("div", {
234
+ className: "mb-date-editor-clear"
235
+ }, /*#__PURE__*/React.createElement("div", {
236
+ onClick: this.deleteDate,
237
+ className: "clear-date"
238
+ }, getLocale('Clear')))));
239
+ }
240
+ }]);
241
+
242
+ return DateEidtorPopover;
243
+ }(React.PureComponent);
244
+
245
+ export default DateEidtorPopover;
@@ -0,0 +1,170 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
4
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
5
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
6
+ import React from 'react';
7
+ import { getLocale } from '../../lang';
8
+ import MBEditorHeader from '../common/mobile/mb-editor-header';
9
+
10
+ var MBLinkEditorPopover = /*#__PURE__*/function (_React$Component) {
11
+ _inherits(MBLinkEditorPopover, _React$Component);
12
+
13
+ var _super = _createSuper(MBLinkEditorPopover);
14
+
15
+ function MBLinkEditorPopover(props) {
16
+ var _this;
17
+
18
+ _classCallCheck(this, MBLinkEditorPopover);
19
+
20
+ _this = _super.call(this, props);
21
+
22
+ _this.handleHistaryBack = function (e) {
23
+ e.preventDefault();
24
+
25
+ _this.props.onClosePopover();
26
+ };
27
+
28
+ _this.onContainerClick = function (event) {
29
+ if (_this.editorPopover && _this.editorPopover.contains(event.target)) {
30
+ event.stopPropagation();
31
+ event.nativeEvent.stopImmediatePropagation();
32
+ return false;
33
+ }
34
+ };
35
+
36
+ _this.onChangeSearch = function (event) {
37
+ var searchVal = _this.state.searchVal;
38
+
39
+ if (searchVal === event.target.value) {
40
+ return;
41
+ }
42
+
43
+ searchVal = event.target.value;
44
+
45
+ _this.setState({
46
+ searchVal: searchVal
47
+ });
48
+ };
49
+
50
+ _this.getSelectedOptions = function () {
51
+ var _this$props = _this.props,
52
+ value = _this$props.value,
53
+ options = _this$props.options;
54
+
55
+ if (!Array.isArray(value)) {
56
+ return [];
57
+ }
58
+
59
+ return options.filter(function (option) {
60
+ return value.indexOf(option.email) > -1;
61
+ });
62
+ };
63
+
64
+ _this.getFilterOptions = function () {
65
+ var options = _this.props.options;
66
+ var searchVal = _this.state.searchVal;
67
+ return searchVal ? options.filter(function (item) {
68
+ return item.name.indexOf(searchVal) > -1;
69
+ }) : options;
70
+ };
71
+
72
+ _this.onSelectOption = function (option) {
73
+ _this.props.onOptionItemToggle(option);
74
+ };
75
+
76
+ _this.onRemoveOption = function (option) {
77
+ _this.props.onOptionItemToggle(option);
78
+ };
79
+
80
+ _this.renderFilteredOptions = function (options) {
81
+ var value = _this.props.value;
82
+ return options.map(function (option, index) {
83
+ var isSelect = value.some(function (item) {
84
+ return item === option.id;
85
+ });
86
+ return /*#__PURE__*/React.createElement("div", {
87
+ className: "mb-link-option-item",
88
+ key: index,
89
+ onMouseDown: _this.onSelectOption.bind(_assertThisInitialized(_this), option)
90
+ }, /*#__PURE__*/React.createElement("span", {
91
+ className: "mb-option-info"
92
+ }, /*#__PURE__*/React.createElement("span", {
93
+ className: "option-name"
94
+ }, option.name)), isSelect && /*#__PURE__*/React.createElement("i", {
95
+ className: "mb-option-checked dtable-font dtable-icon-check-mark"
96
+ }));
97
+ });
98
+ };
99
+
100
+ _this.setEditorPopover = function (editorPopover) {
101
+ _this.editorPopover = editorPopover;
102
+ };
103
+
104
+ _this.state = {
105
+ searchVal: ''
106
+ };
107
+ return _this;
108
+ }
109
+
110
+ _createClass(MBLinkEditorPopover, [{
111
+ key: "componentDidMount",
112
+ value: function componentDidMount() {
113
+ history.pushState(null, null, '#'); // eslint-disable-line
114
+
115
+ window.addEventListener('popstate', this.handleHistaryBack, false);
116
+ }
117
+ }, {
118
+ key: "componentWillUnmount",
119
+ value: function componentWillUnmount() {
120
+ window.removeEventListener('popstate', this.handleHistaryBack, false);
121
+ }
122
+ }, {
123
+ key: "render",
124
+ value: function render() {
125
+ var column = this.props.column;
126
+ var searchVal = this.state.searchVal;
127
+ var filterOptions = this.getFilterOptions();
128
+ return /*#__PURE__*/React.createElement("div", {
129
+ ref: this.setEditorPopover,
130
+ className: "dtable-ui-mb-editor-popover mb-link-editor-popover",
131
+ onClick: this.onContainerClick
132
+ }, /*#__PURE__*/React.createElement(MBEditorHeader, {
133
+ title: column.name,
134
+ leftContent: /*#__PURE__*/React.createElement("i", {
135
+ className: "dtable-font dtable-icon-return"
136
+ }),
137
+ rightContent: /*#__PURE__*/React.createElement("span", null, getLocale('Done')),
138
+ onLeftClick: this.props.onClosePopover,
139
+ onRightClick: this.props.onClosePopover
140
+ }), /*#__PURE__*/React.createElement("div", {
141
+ className: "dtable-ui-mb-editor-body dtable-ui-mb-link-editor-body"
142
+ }, /*#__PURE__*/React.createElement("div", {
143
+ className: "mb-search-link-items"
144
+ }, /*#__PURE__*/React.createElement("input", {
145
+ className: "form-control",
146
+ type: "text",
147
+ placeholder: getLocale('Find_an_option'),
148
+ value: searchVal,
149
+ onChange: this.onChangeSearch,
150
+ onClick: this.onInputClick
151
+ })), /*#__PURE__*/React.createElement("div", {
152
+ className: "mb-link-container"
153
+ }, /*#__PURE__*/React.createElement("div", {
154
+ className: "title"
155
+ }, getLocale('Choose_an_option')), /*#__PURE__*/React.createElement("div", {
156
+ className: "content"
157
+ }, filterOptions.length === 0 && /*#__PURE__*/React.createElement("div", {
158
+ className: "search-result-none"
159
+ }, getLocale('No_options_available')), filterOptions.length > 0 && this.renderFilteredOptions(filterOptions)))));
160
+ }
161
+ }]);
162
+
163
+ return MBLinkEditorPopover;
164
+ }(React.Component);
165
+
166
+ MBLinkEditorPopover.defaultProps = {
167
+ isReadOnly: false,
168
+ value: []
169
+ };
170
+ export default MBLinkEditorPopover;
@@ -0,0 +1,230 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
4
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
5
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
6
+ import React, { Fragment } from 'react';
7
+ import { getLocale } from '../../lang';
8
+ import SelectEditorOption from '../common/select-editor-option';
9
+ import MBEditorHeader from '../common/mobile/mb-editor-header';
10
+
11
+ var MBSingleSelectPopover = /*#__PURE__*/function (_React$Component) {
12
+ _inherits(MBSingleSelectPopover, _React$Component);
13
+
14
+ var _super = _createSuper(MBSingleSelectPopover);
15
+
16
+ function MBSingleSelectPopover(props) {
17
+ var _this;
18
+
19
+ _classCallCheck(this, MBSingleSelectPopover);
20
+
21
+ _this = _super.call(this, props);
22
+
23
+ _this.handleHistaryBack = function (e) {
24
+ e.preventDefault();
25
+
26
+ _this.props.onClosePopover();
27
+ };
28
+
29
+ _this.onContainerClick = function (event) {
30
+ if (_this.editorPopover && _this.editorPopover.contains(event.target)) {
31
+ event.stopPropagation();
32
+ event.nativeEvent.stopImmediatePropagation();
33
+ return false;
34
+ }
35
+ };
36
+
37
+ _this.onChangeSearch = function (event) {
38
+ var searchVal = _this.state.searchVal;
39
+
40
+ if (searchVal === event.target.value) {
41
+ return;
42
+ }
43
+
44
+ searchVal = event.target.value;
45
+
46
+ _this.setState({
47
+ searchVal: searchVal
48
+ });
49
+ };
50
+
51
+ _this.getSelectedOptions = function () {
52
+ var _this$props = _this.props,
53
+ value = _this$props.value,
54
+ options = _this$props.options;
55
+
56
+ if (!Array.isArray(value)) {
57
+ return [];
58
+ }
59
+
60
+ return options.filter(function (option) {
61
+ return value.indexOf(option.id) > -1;
62
+ });
63
+ };
64
+
65
+ _this.getFilteredOptions = function () {
66
+ var options = _this.props.options;
67
+ var searchVal = _this.state.searchVal;
68
+ return searchVal ? options.filter(function (item) {
69
+ return item.name.indexOf(searchVal) > -1;
70
+ }) : options;
71
+ };
72
+
73
+ _this.onSelectOption = function (option) {
74
+ _this.props.onOptionItemToggle(option);
75
+ };
76
+
77
+ _this.onAddNewOption = function (event) {
78
+ event.stopPropagation();
79
+ event.nativeEvent.stopImmediatePropagation();
80
+
81
+ var newOption = _this.state.searchVal.trim();
82
+
83
+ if (newOption) {
84
+ _this.props.onAddNewOption(newOption);
85
+
86
+ _this.props.onClosePopover();
87
+ }
88
+ };
89
+
90
+ _this.onRemoveOption = function (option) {
91
+ _this.props.onOptionItemToggle(option);
92
+ };
93
+
94
+ _this.renderSelectOptions = function (options) {
95
+ var value = _this.props.value;
96
+ return options.map(function (option, index) {
97
+ var isSelect = value.some(function (item) {
98
+ return item === option.id;
99
+ });
100
+ var style = {
101
+ backgroundColor: option.color,
102
+ color: option.textColor || null
103
+ };
104
+ return /*#__PURE__*/React.createElement("div", {
105
+ className: "mb-select-option-item",
106
+ key: index,
107
+ onMouseDown: _this.onSelectOption.bind(_assertThisInitialized(_this), option)
108
+ }, /*#__PURE__*/React.createElement("span", {
109
+ className: "mb-select-item"
110
+ }, /*#__PURE__*/React.createElement("span", {
111
+ className: "item-name",
112
+ style: style
113
+ }, option.name)), /*#__PURE__*/React.createElement("span", {
114
+ className: "mb-item-checked"
115
+ }, isSelect && /*#__PURE__*/React.createElement("i", {
116
+ className: "dtable-font dtable-icon-check-mark"
117
+ })));
118
+ });
119
+ };
120
+
121
+ _this.setEditorPopover = function (editorPopover) {
122
+ _this.editorPopover = editorPopover;
123
+ };
124
+
125
+ _this.state = {
126
+ searchVal: ''
127
+ };
128
+ return _this;
129
+ }
130
+
131
+ _createClass(MBSingleSelectPopover, [{
132
+ key: "componentDidMount",
133
+ value: function componentDidMount() {
134
+ history.pushState(null, null, '#'); // eslint-disable-line
135
+
136
+ window.addEventListener('popstate', this.handleHistaryBack, false);
137
+ }
138
+ }, {
139
+ key: "componentWillUnmount",
140
+ value: function componentWillUnmount() {
141
+ window.removeEventListener('popstate', this.handleHistaryBack, false);
142
+ }
143
+ }, {
144
+ key: "render",
145
+ value: function render() {
146
+ var _this2 = this;
147
+
148
+ var _this$props2 = this.props,
149
+ isReadOnly = _this$props2.isReadOnly,
150
+ column = _this$props2.column,
151
+ isSupportNewOption = _this$props2.isSupportNewOption,
152
+ isShowRemoveIcon = _this$props2.isShowRemoveIcon;
153
+ var searchVal = this.state.searchVal;
154
+ var selectedOptions = this.getSelectedOptions();
155
+ var filteredOptions = this.getFilteredOptions();
156
+ var isShowRemoveBtn = !isReadOnly && isShowRemoveIcon;
157
+ var isShowCreateBtn = !isReadOnly && isSupportNewOption && !!searchVal;
158
+
159
+ if (isShowCreateBtn) {
160
+ isShowCreateBtn = filteredOptions.length === 0;
161
+ }
162
+
163
+ return /*#__PURE__*/React.createElement("div", {
164
+ ref: this.setEditorPopover,
165
+ className: "dtable-ui-mb-editor-popover mb-select-editor-popover",
166
+ style: {
167
+ zIndex: 99
168
+ },
169
+ onClick: this.onContainerClick
170
+ }, /*#__PURE__*/React.createElement(MBEditorHeader, {
171
+ title: column.name,
172
+ leftContent: /*#__PURE__*/React.createElement("i", {
173
+ className: "dtable-font dtable-icon-return"
174
+ }),
175
+ onLeftClick: this.props.onClosePopover
176
+ }), /*#__PURE__*/React.createElement("div", {
177
+ className: "dtable-ui-mb-editor-body dtable-ui-mb-select-editor-body"
178
+ }, /*#__PURE__*/React.createElement("div", {
179
+ className: "mb-selected-item"
180
+ }, /*#__PURE__*/React.createElement("div", {
181
+ className: "title"
182
+ }, getLocale('Current_option')), /*#__PURE__*/React.createElement("div", {
183
+ className: "content"
184
+ }, selectedOptions.length === 0 && /*#__PURE__*/React.createElement("span", {
185
+ className: "empty-placeholder"
186
+ }, getLocale('No_option')), selectedOptions.length > 0 && selectedOptions.map(function (selectedOption) {
187
+ return /*#__PURE__*/React.createElement(SelectEditorOption, {
188
+ key: selectedOption.id,
189
+ option: selectedOption,
190
+ isShowRemoveIcon: isShowRemoveBtn,
191
+ onDeleteSelectOption: _this2.onRemoveOption
192
+ });
193
+ }))), /*#__PURE__*/React.createElement("div", {
194
+ className: "mb-search-select-items"
195
+ }, /*#__PURE__*/React.createElement("input", {
196
+ className: "form-control",
197
+ type: "text",
198
+ placeholder: getLocale('Find_an_option'),
199
+ value: searchVal,
200
+ onChange: this.onChangeSearch,
201
+ onClick: this.onInputClick
202
+ })), /*#__PURE__*/React.createElement("div", {
203
+ className: "mb-select-options-container"
204
+ }, /*#__PURE__*/React.createElement("div", {
205
+ className: "title"
206
+ }, /*#__PURE__*/React.createElement("span", null, getLocale('Choose_an_option'))), /*#__PURE__*/React.createElement("div", {
207
+ className: "content"
208
+ }, /*#__PURE__*/React.createElement(Fragment, null, filteredOptions.length === 0 && /*#__PURE__*/React.createElement("div", {
209
+ className: "search-result-none"
210
+ }, getLocale('No_options_available')), filteredOptions.length > 0 && this.renderSelectOptions(filteredOptions)))), isShowCreateBtn && /*#__PURE__*/React.createElement("div", {
211
+ className: "mb-create-select-item",
212
+ onClick: this.onAddNewOption
213
+ }, /*#__PURE__*/React.createElement("i", {
214
+ className: "dtable-font dtable-icon-add-table"
215
+ }), /*#__PURE__*/React.createElement("span", {
216
+ className: "add-new-option"
217
+ }, "".concat(getLocale('Add_an_option'), " ").concat(searchVal)))));
218
+ }
219
+ }]);
220
+
221
+ return MBSingleSelectPopover;
222
+ }(React.Component);
223
+
224
+ MBSingleSelectPopover.defaultProps = {
225
+ isReadOnly: false,
226
+ isShowRemoveIcon: false,
227
+ isSupportNewOption: false,
228
+ value: []
229
+ };
230
+ export default MBSingleSelectPopover;