dtable-ui-component 7.0.1-ial.1 → 7.0.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 (38) hide show
  1. package/lib/AsyncUserSelect/index.css +38 -28
  2. package/lib/AsyncUserSelect/index.js +32 -19
  3. package/lib/DTableCustomizeSearchInput/index.css +75 -0
  4. package/lib/DTableCustomizeSearchInput/index.js +133 -0
  5. package/lib/DTableCustomizeSelect/index.css +120 -42
  6. package/lib/DTableCustomizeSelect/index.js +12 -6
  7. package/lib/DTableFiltersPopover/index.js +8 -9
  8. package/lib/DTableFiltersPopover/utils/filter-item-utils.js +7 -19
  9. package/lib/DTableFiltersPopover/widgets/collaborator-filter/index.js +5 -9
  10. package/lib/DTableFiltersPopover/widgets/filter-group.js +1 -1
  11. package/lib/DTableFiltersPopover/widgets/filter-item.js +16 -8
  12. package/lib/DTableFiltersPopover/widgets/filter-list/index.css +8 -8
  13. package/lib/DTableModalHeader/index.css +22 -0
  14. package/lib/DTableModalHeader/index.js +10 -3
  15. package/lib/DTableSelect/dtable-select-label.css +8 -3
  16. package/lib/DTableSelect/dtable-select-label.js +1 -1
  17. package/lib/DTableSelect/index.js +3 -3
  18. package/lib/DTableSelect/select-dropdown-indicator/index.css +16 -0
  19. package/lib/DTableSelect/select-dropdown-indicator/index.js +24 -0
  20. package/lib/DTableSelect/user-select.css +7 -46
  21. package/lib/DTableSelect/utils.js +170 -79
  22. package/lib/FieldDisplaySetting/index.js +1 -1
  23. package/lib/SelectItem/index.js +1 -1
  24. package/lib/SelectOptionGroup/KeyCodes.js +96 -4
  25. package/lib/SelectOptionGroup/index.css +44 -54
  26. package/lib/SelectOptionGroup/index.js +35 -18
  27. package/lib/SelectOptionGroup/option.js +16 -4
  28. package/lib/assets/icons/close.svg +1 -0
  29. package/lib/assets/icons/down.svg +3 -0
  30. package/lib/index.js +3 -10
  31. package/package.json +1 -1
  32. package/lib/DTableCustomizeCollaboratorSelect/index.css +0 -86
  33. package/lib/DTableCustomizeCollaboratorSelect/index.js +0 -158
  34. package/lib/DTableGroupSelect/index.css +0 -96
  35. package/lib/DTableGroupSelect/index.js +0 -131
  36. package/lib/DTableGroupSelect/option.js +0 -42
  37. package/lib/DTableGroupSelect/select-option-group.css +0 -54
  38. package/lib/DTableGroupSelect/select-option-group.js +0 -227
@@ -1,131 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _ModalPortal = _interopRequireDefault(require("../ModalPortal"));
12
- var _selectOptionGroup = _interopRequireDefault(require("./select-option-group"));
13
- require("./index.css");
14
- var _jsxRuntime = require("react/jsx-runtime");
15
- class DTableGroupSelect extends _react.Component {
16
- constructor(props) {
17
- super(props);
18
- this.onSelectToggle = event => {
19
- event.preventDefault();
20
- if (this.state.isShowSelectOptions) event.stopPropagation();
21
- let eventClassName = event.target.className;
22
- if (eventClassName.indexOf('dtable-icon-x') > -1 || eventClassName === 'option-group-search') return;
23
- if (event.target.value === '') return;
24
- this.setState({
25
- isShowSelectOptions: !this.state.isShowSelectOptions
26
- });
27
- };
28
- this.onClickOutside = event => {
29
- if (this.props.isShowSelected && event.target.className.includes('icon-fork-number')) {
30
- return;
31
- }
32
- if (!this.selector.contains(event.target)) {
33
- this.closeSelect();
34
- }
35
- };
36
- this.closeSelect = () => {
37
- this.setState({
38
- isShowSelectOptions: false
39
- });
40
- };
41
- this.getSelectedOptionTop = () => {
42
- if (!this.selector) return 38;
43
- const _this$selector$getBou = this.selector.getBoundingClientRect(),
44
- height = _this$selector$getBou.height;
45
- return height;
46
- };
47
- this.getFilterOptions = searchValue => {
48
- const options = this.props.options;
49
- const validSearchVal = searchValue.trim().toLowerCase();
50
- if (!validSearchVal) return options || [];
51
- return options.filter(option => option.name.toLowerCase().includes(validSearchVal));
52
- };
53
- this.state = {
54
- isShowSelectOptions: false
55
- };
56
- }
57
- UNSAFE_componentWillReceiveProps(nextProps) {
58
- if (nextProps.selectedOptions.length !== this.props.selectedOptions.length) {
59
- // when selectedOptions change and dom rendered, calculate top
60
- setTimeout(() => {
61
- this.forceUpdate();
62
- }, 1);
63
- }
64
- }
65
- render() {
66
- let _this$props = this.props,
67
- className = _this$props.className,
68
- selectedOptions = _this$props.selectedOptions,
69
- options = _this$props.options,
70
- placeholder = _this$props.placeholder,
71
- searchPlaceholder = _this$props.searchPlaceholder,
72
- noOptionsPlaceholder = _this$props.noOptionsPlaceholder,
73
- isInModal = _this$props.isInModal;
74
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
75
- ref: node => this.selector = node,
76
- className: (0, _classnames.default)('group-select custom-select', {
77
- 'focus': this.state.isShowSelectOptions
78
- }, className),
79
- onClick: this.onSelectToggle,
80
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
81
- className: "selected-option",
82
- children: [selectedOptions.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
83
- className: "selected-option-show",
84
- children: selectedOptions.map(item => /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
85
- className: "selected-option-item mr-1 pr-1 pl-2",
86
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
87
- className: "selected-option-item-name",
88
- children: item.name
89
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("i", {
90
- className: "dtable-font dtable-icon-x ml-1",
91
- onClick: () => {
92
- this.props.onDeleteOption(item);
93
- }
94
- })]
95
- }, item.id))
96
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
97
- className: "select-placeholder",
98
- children: placeholder
99
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("i", {
100
- className: "sf3-font-down sf3-font"
101
- })]
102
- }), this.state.isShowSelectOptions && !isInModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_selectOptionGroup.default, {
103
- selectedOptions: selectedOptions,
104
- top: this.getSelectedOptionTop(),
105
- options: options,
106
- onSelectOption: this.props.onSelectOption,
107
- searchPlaceholder: searchPlaceholder,
108
- noOptionsPlaceholder: noOptionsPlaceholder,
109
- onClickOutside: this.onClickOutside,
110
- closeSelect: this.closeSelect,
111
- getFilterOptions: this.getFilterOptions
112
- }), this.state.isShowSelectOptions && isInModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ModalPortal.default, {
113
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_selectOptionGroup.default, {
114
- className: className,
115
- selectedOptions: selectedOptions,
116
- position: this.selector.getBoundingClientRect(),
117
- isInModal: isInModal,
118
- top: this.getSelectedOptionTop(),
119
- options: options,
120
- onSelectOption: this.props.onSelectOption,
121
- searchPlaceholder: searchPlaceholder,
122
- noOptionsPlaceholder: noOptionsPlaceholder,
123
- onClickOutside: this.onClickOutside,
124
- closeSelect: this.closeSelect,
125
- getFilterOptions: this.getFilterOptions
126
- })
127
- })]
128
- });
129
- }
130
- }
131
- var _default = exports.default = DTableGroupSelect;
@@ -1,42 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _jsxRuntime = require("react/jsx-runtime");
12
- class Option extends _react.Component {
13
- constructor() {
14
- super(...arguments);
15
- this.onSelectOption = e => {
16
- e.stopPropagation();
17
- this.props.onSelectOption(this.props.option);
18
- };
19
- this.onMouseEnter = () => {
20
- if (!this.props.disableHover) {
21
- this.props.changeIndex(this.props.index);
22
- }
23
- };
24
- this.onMouseLeave = () => {
25
- if (!this.props.disableHover) {
26
- this.props.changeIndex(-1);
27
- }
28
- };
29
- }
30
- render() {
31
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
32
- className: (0, _classnames.default)('d-flex option', {
33
- 'option-active': this.props.isActive
34
- }),
35
- onClick: this.onSelectOption,
36
- onMouseEnter: this.onMouseEnter,
37
- onMouseLeave: this.onMouseLeave,
38
- children: this.props.children
39
- });
40
- }
41
- }
42
- var _default = exports.default = Option;
@@ -1,54 +0,0 @@
1
- .group-selector .option {
2
- display: block;
3
- width: 100%;
4
- line-height: 24px;
5
- padding: 6px 10px;
6
- clear: both;
7
- font-weight: 400;
8
- text-align: inherit;
9
- background-color: transparent;
10
- border: 0;
11
- overflow: hidden;
12
- text-overflow: ellipsis;
13
- white-space: nowrap;
14
- display: flex;
15
- align-items: center;
16
- justify-content: space-between;
17
- }
18
-
19
- .group-selector .option .dtable-icon-check-mark {
20
- font-size: 12px;
21
- color: #798d99;
22
- }
23
-
24
- .group-selector .option.option-active {
25
- background-color: #20a0ff;
26
- color: #fff;
27
- cursor: pointer;
28
- }
29
-
30
- .group-selector .option.option-active .dtable-icon-check-mark,
31
- .group-selector .option.option-active .select-option-name {
32
- color: #fff !important;
33
- }
34
-
35
- .group-selector .option .select-option-name .single-select-option {
36
- margin: 0 0 0 12px;
37
- }
38
-
39
- .group-selector .option .select-option-name .multiple-select-option {
40
- margin: 0;
41
- }
42
-
43
- .group-selector .option-group-dtable-ui-single-select-selector .select-option-name {
44
- display: flex;
45
- align-items: center;
46
- justify-content: space-between;
47
- }
48
-
49
- .group-selector .option-group-dtable-ui-single-select-selector .option:hover,
50
- .group-selector .option-group-dtable-ui-single-select-selector .option.option-active,
51
- .group-selector .option-group-dtable-ui-multiple-select-selector .option:hover,
52
- .group-selector .option-group-dtable-ui-multiple-select-selector .option.option-active {
53
- background-color: #f5f5f5;
54
- }
@@ -1,227 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _DTableSearchInput = _interopRequireDefault(require("../DTableSearchInput"));
12
- var _option = _interopRequireDefault(require("./option"));
13
- var _KeyCodes = _interopRequireDefault(require("../SelectOptionGroup/KeyCodes"));
14
- require("./select-option-group.css");
15
- var _jsxRuntime = require("react/jsx-runtime");
16
- const OPTION_HEIGHT = 32;
17
- class SelectOptionGroup extends _react.Component {
18
- constructor(props) {
19
- super(props);
20
- this.handleDocumentClick = e => {
21
- this.props.onClickOutside(e);
22
- };
23
- this.resetMenuStyle = () => {
24
- const _this$props = this.props,
25
- isInModal = _this$props.isInModal,
26
- position = _this$props.position;
27
- const _this$optionGroupRef$ = this.optionGroupRef.getBoundingClientRect(),
28
- top = _this$optionGroupRef$.top,
29
- height = _this$optionGroupRef$.height;
30
- if (isInModal) {
31
- if (position.y + position.height + height > window.innerHeight) {
32
- this.optionGroupRef.style.top = position.y - height + 'px';
33
- }
34
- this.optionGroupRef.style.opacity = 1;
35
- this.searchInputRef.current && this.searchInputRef.current.inputRef.focus();
36
- } else {
37
- if (height + top > window.innerHeight) {
38
- const borderWidth = 2;
39
- this.optionGroupRef.style.top = -1 * (height + borderWidth) + 'px';
40
- }
41
- }
42
- };
43
- this.onHotKey = event => {
44
- const keyCode = event.keyCode;
45
- if (keyCode === _KeyCodes.default.UpArrow) {
46
- this.onPressUp();
47
- } else if (keyCode === _KeyCodes.default.DownArrow) {
48
- this.onPressDown();
49
- } else if (keyCode === _KeyCodes.default.Enter) {
50
- let option = this.filterOptions && this.filterOptions[this.state.activeIndex];
51
- if (option) {
52
- this.props.onSelectOption(option);
53
- }
54
- } else if (keyCode === _KeyCodes.default.Tab || keyCode === _KeyCodes.default.Escape) {
55
- this.props.closeSelect();
56
- }
57
- };
58
- this.onPressUp = () => {
59
- if (this.state.activeIndex > 0) {
60
- this.setState({
61
- activeIndex: this.state.activeIndex - 1
62
- }, () => {
63
- this.scrollContent();
64
- });
65
- }
66
- };
67
- this.onPressDown = () => {
68
- if (this.filterOptions && this.state.activeIndex < this.filterOptions.length - 1) {
69
- this.setState({
70
- activeIndex: this.state.activeIndex + 1
71
- }, () => {
72
- this.scrollContent();
73
- });
74
- }
75
- };
76
- this.onMouseDown = e => {
77
- const isInModal = this.props.isInModal;
78
- // prevent event propagation when click option or search input
79
- if (isInModal) {
80
- e.stopPropagation();
81
- e.nativeEvent.stopImmediatePropagation();
82
- }
83
- };
84
- this.scrollContent = () => {
85
- const _this$optionGroupCont = this.optionGroupContentRef,
86
- offsetHeight = _this$optionGroupCont.offsetHeight,
87
- scrollTop = _this$optionGroupCont.scrollTop;
88
- this.setState({
89
- disableHover: true
90
- });
91
- this.timer = setTimeout(() => {
92
- this.setState({
93
- disableHover: false
94
- });
95
- }, 500);
96
- if (this.state.activeIndex * OPTION_HEIGHT === 0) {
97
- this.optionGroupContentRef.scrollTop = 0;
98
- return;
99
- }
100
- if (this.state.activeIndex * OPTION_HEIGHT < scrollTop) {
101
- this.optionGroupContentRef.scrollTop = scrollTop - OPTION_HEIGHT;
102
- } else if (this.state.activeIndex * OPTION_HEIGHT > offsetHeight + scrollTop) {
103
- this.optionGroupContentRef.scrollTop = scrollTop + OPTION_HEIGHT;
104
- }
105
- };
106
- this.changeIndex = index => {
107
- this.setState({
108
- activeIndex: index
109
- });
110
- };
111
- this.onChangeSearch = searchVal => {
112
- this.setState({
113
- searchVal: searchVal || '',
114
- activeIndex: -1
115
- });
116
- };
117
- this.clearValue = () => {
118
- this.setState({
119
- searchVal: '',
120
- activeIndex: -1
121
- });
122
- };
123
- this.renderOptGroup = searchVal => {
124
- let _this$props2 = this.props,
125
- noOptionsPlaceholder = _this$props2.noOptionsPlaceholder,
126
- onSelectOption = _this$props2.onSelectOption,
127
- selectedOptions = _this$props2.selectedOptions;
128
- this.filterOptions = this.props.getFilterOptions(searchVal);
129
- if (this.filterOptions.length === 0) {
130
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
131
- className: "none-search-result",
132
- children: noOptionsPlaceholder
133
- });
134
- }
135
- return this.filterOptions.map((option, index) => {
136
- const isSelected = selectedOptions.some(item => item.id === option.id);
137
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_option.default, {
138
- index: index,
139
- isActive: this.state.activeIndex === index,
140
- option: option,
141
- onSelectOption: onSelectOption,
142
- changeIndex: this.changeIndex,
143
- disableHover: this.state.disableHover,
144
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
145
- className: "option-label text-truncate",
146
- title: option.label,
147
- children: option.label
148
- }), isSelected && /*#__PURE__*/(0, _jsxRuntime.jsx)("i", {
149
- className: "dtable-font dtable-icon-check-mark"
150
- })]
151
- }, "".concat(option.id, "-").concat(index));
152
- });
153
- };
154
- this.state = {
155
- searchVal: '',
156
- activeIndex: -1,
157
- disableHover: false
158
- };
159
- this.filterOptions = null;
160
- this.timer = null;
161
- this.searchInputRef = /*#__PURE__*/_react.default.createRef();
162
- }
163
- componentDidMount() {
164
- window.addEventListener('keydown', this.onHotKey);
165
- document.addEventListener('mousedown', this.handleDocumentClick);
166
- setTimeout(() => {
167
- this.resetMenuStyle();
168
- }, 1);
169
- }
170
- componentWillUnmount() {
171
- this.filterOptions = null;
172
- this.timer && clearTimeout(this.timer);
173
- window.removeEventListener('keydown', this.onHotKey);
174
- document.removeEventListener('mousedown', this.handleDocumentClick);
175
- }
176
- render() {
177
- const _this$props3 = this.props,
178
- searchPlaceholder = _this$props3.searchPlaceholder,
179
- top = _this$props3.top,
180
- left = _this$props3.left,
181
- minWidth = _this$props3.minWidth,
182
- isInModal = _this$props3.isInModal,
183
- position = _this$props3.position,
184
- className = _this$props3.className;
185
- let searchVal = this.state.searchVal;
186
- let style = {
187
- top: top || 0,
188
- left: left || 0
189
- };
190
- if (minWidth) {
191
- style = {
192
- top: top || 0,
193
- left: left || 0,
194
- minWidth
195
- };
196
- }
197
- if (isInModal) {
198
- style = {
199
- position: 'fixed',
200
- left: position.x,
201
- top: position.y + position.height,
202
- minWidth: position.width,
203
- opacity: 0
204
- };
205
- }
206
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
207
- className: (0, _classnames.default)('option-group group-selector', className ? 'option-group-' + className : ''),
208
- ref: ref => this.optionGroupRef = ref,
209
- style: style,
210
- onMouseDown: this.onMouseDown,
211
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
212
- className: "option-group-search position-relative",
213
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DTableSearchInput.default, {
214
- className: "option-search-control",
215
- placeholder: searchPlaceholder,
216
- onChange: this.onChangeSearch,
217
- ref: this.searchInputRef
218
- })
219
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
220
- className: "option-group-content",
221
- ref: ref => this.optionGroupContentRef = ref,
222
- children: this.renderOptGroup(searchVal)
223
- })]
224
- });
225
- }
226
- }
227
- var _default = exports.default = SelectOptionGroup;