@kdcloudjs/table 1.1.5-canary.2 → 1.1.5-canary.4

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.
@@ -1,6 +1,8 @@
1
1
  import { TablePipeline } from "../pipeline";
2
+ import { ReactNode } from 'react';
2
3
  export interface colGroupExtendOption {
3
4
  onChangeExtendStatus?({}: any, {}: any): void;
4
5
  extendStatus?: {};
6
+ extendIcon?: ReactNode | ((extendStatus: boolean) => ReactNode);
5
7
  }
6
8
  export declare const colGroupExtendable: (opts?: colGroupExtendOption) => (pipeline: TablePipeline) => TablePipeline;
@@ -60,11 +60,13 @@ export var colGroupExtendable = function colGroupExtendable() {
60
60
  var addIcon = function addIcon(col) {
61
61
  var result = _extends({}, col);
62
62
 
63
+ var curColState = curState[col.code];
64
+ var displaycolExtendIcon = typeof opts.extendIcon === 'function' ? opts.extendIcon(curColState) : opts.extendIcon;
63
65
  var addIconNode = /*#__PURE__*/React.createElement(React.Fragment, null, internals.safeRenderHeader(_extends({}, col)), /*#__PURE__*/React.createElement(ExtendIconStyle, {
64
66
  onClick: function onClick() {
65
67
  toggle(col);
66
68
  }
67
- }, /*#__PURE__*/React.createElement(ExpandIcon, {
69
+ }, displaycolExtendIcon || /*#__PURE__*/React.createElement(ExpandIcon, {
68
70
  style: {
69
71
  userSelect: 'none',
70
72
  marginLeft: 2,
@@ -73,8 +75,8 @@ export var colGroupExtendable = function colGroupExtendable() {
73
75
  verticalAlign: 'middle'
74
76
  },
75
77
  className: cx(_defineProperty({}, Classes.tableExtendIcon, true)),
76
- size: 16,
77
- isExtend: curState[col.code]
78
+ size: 14,
79
+ isExtend: curColState
78
80
  })));
79
81
  result.title = addIconNode;
80
82
  return result;
@@ -16,7 +16,11 @@ export interface FilterFeatureOptions {
16
16
  filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
17
17
  /** 是否对触发弹出过滤面板 的 click 事件调用 event.stopPropagation() */
18
18
  stopClickEventPropagation?: boolean;
19
- /** 是否隐藏过滤弹出菜单header区域 */
19
+ /** 是否对按ESC键时关闭面板的 keydown 事件调用 event.stopPropagation() */
20
+ stopESCKeyDownEventPropagation?: boolean;
21
+ /** 是否隐藏过滤面板的header区域 */
20
22
  hideFilterPopupHeader?: boolean;
23
+ /** 指定过滤面板渲染的父节点 */
24
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
21
25
  }
22
26
  export declare function filter(opts?: FilterFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -29,7 +29,9 @@ export function filter() {
29
29
  mode = opts.mode,
30
30
  filterIcon = opts.filterIcon,
31
31
  stopClickEventPropagation = opts.stopClickEventPropagation,
32
- hideFilterPopupHeader = opts.hideFilterPopupHeader;
32
+ stopESCKeyDownEventPropagation = opts.stopESCKeyDownEventPropagation,
33
+ hideFilterPopupHeader = opts.hideFilterPopupHeader,
34
+ getPopupParent = opts.getPopupParent;
33
35
  var inputFilters = (_b = (_a = filters !== null && filters !== void 0 ? filters : pipeline.getStateAtKey(stateKey)) !== null && _a !== void 0 ? _a : defaultFilters) !== null && _b !== void 0 ? _b : [];
34
36
  inputFilters = mode === 'single' ? _sliceInstanceProperty(inputFilters).call(inputFilters, 0, 1) : inputFilters;
35
37
  var inputFiltersMap = new _Map(_mapInstanceProperty(inputFilters).call(inputFilters, function (filterItem) {
@@ -93,7 +95,9 @@ export function filter() {
93
95
  isFilterActive: filterActive,
94
96
  className: cx((_cx = {}, _defineProperty(_cx, Classes.tableFilterTrigger, true), _defineProperty(_cx, "active", filterActive), _cx)),
95
97
  stopClickEventPropagation: stopClickEventPropagation,
96
- hideFilterPopupHeader: hideFilterPopupHeader
98
+ stopESCKeyDownEventPropagation: stopESCKeyDownEventPropagation,
99
+ hideFilterPopupHeader: hideFilterPopupHeader,
100
+ getPopupParent: getPopupParent
97
101
  })]); // result.headerCellProps = mergeCellProps(col.headerCellProps, {
98
102
  // style: {
99
103
  // paddingRight: '18px'
@@ -12,7 +12,9 @@ interface FilterProps {
12
12
  setFilter: CustomeFilterPanelProps['setFilter'];
13
13
  onClick?: (e: React.MouseEvent) => any;
14
14
  stopClickEventPropagation?: boolean;
15
+ stopESCKeyDownEventPropagation?: boolean;
15
16
  hideFilterPopupHeader?: boolean;
17
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
16
18
  }
17
- declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, hideFilterPopupHeader }: FilterProps): JSX.Element;
19
+ declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent }: FilterProps): JSX.Element;
18
20
  export default Filter;
@@ -26,10 +26,11 @@ function Panel(_ref) {
26
26
  filterIcon = _ref.filterIcon,
27
27
  hidePanel = _ref.hidePanel,
28
28
  renderPanelContent = _ref.renderPanelContent,
29
- hideFilterPopupHeader = _ref.hideFilterPopupHeader;
29
+ hideFilterPopupHeader = _ref.hideFilterPopupHeader,
30
+ popupParent = _ref.popupParent;
30
31
  var filterPanelRef = React.useRef(null);
31
32
 
32
- var _React$useState = React.useState(calculatePopupRelative(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader))),
33
+ var _React$useState = React.useState(calculatePopupRelative(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader))),
33
34
  _React$useState2 = _slicedToArray(_React$useState, 2),
34
35
  position = _React$useState2[0],
35
36
  setPosition = _React$useState2[1];
@@ -40,7 +41,7 @@ function Panel(_ref) {
40
41
  };
41
42
 
42
43
  var handleFilterPanelResize = function handleFilterPanelResize(resize) {
43
- setPosition(calculatePopupRelative(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader)));
44
+ setPosition(calculatePopupRelative(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader)));
44
45
  };
45
46
 
46
47
  useEffect(function () {
@@ -74,7 +75,9 @@ function Filter(_ref2) {
74
75
  filterModel = _ref2.filterModel,
75
76
  isFilterActive = _ref2.isFilterActive,
76
77
  stopClickEventPropagation = _ref2.stopClickEventPropagation,
77
- hideFilterPopupHeader = _ref2.hideFilterPopupHeader;
78
+ stopESCKeyDownEventPropagation = _ref2.stopESCKeyDownEventPropagation,
79
+ hideFilterPopupHeader = _ref2.hideFilterPopupHeader,
80
+ getPopupParent = _ref2.getPopupParent;
78
81
 
79
82
  var _React$useState3 = React.useState(false),
80
83
  _React$useState4 = _slicedToArray(_React$useState3, 2),
@@ -109,25 +112,30 @@ function Filter(_ref2) {
109
112
  var handleIconClick = function handleIconClick(e) {
110
113
  // 只有当icon区域点击会触发面板展开
111
114
  // 防止 createPortal 区域的点击触发该事件
112
- if (!e.currentTarget.contains(e.target)) {
113
- return;
115
+ if (e.currentTarget.contains(e.target)) {
116
+ setShowPanel(true);
114
117
  }
115
118
 
116
119
  if (stopClickEventPropagation) {
117
120
  e.stopPropagation();
118
121
  }
119
-
120
- setShowPanel(true);
121
122
  };
122
123
 
123
124
  var handleKeyDown = function handleKeyDown(e) {
124
- if (e.currentTarget.contains(e.target) && e.keyCode === KeyCode.ESC) {
125
- setShowPanel(false);
125
+ if (e.keyCode === KeyCode.ESC) {
126
+ if (e.currentTarget.contains(e.target)) {
127
+ setShowPanel(false);
128
+ }
129
+
130
+ if (stopESCKeyDownEventPropagation) {
131
+ e.stopPropagation();
132
+ }
126
133
  }
127
134
  };
128
135
 
129
136
  var iconClassName = cx((_cx = {}, _defineProperty(_cx, className, true), _defineProperty(_cx, 'filter-panel-open', showPanel), _cx));
130
137
  var displayFilterIcon = typeof filterIcon === 'function' ? filterIcon(isFilterActive) : filterIcon;
138
+ var popupParent = (getPopupParent === null || getPopupParent === void 0 ? void 0 : getPopupParent(iconWrapRef.current)) || document.body;
131
139
  return /*#__PURE__*/React.createElement(FilterIconSpanStyle, {
132
140
  style: style,
133
141
  className: iconClassName,
@@ -146,8 +154,9 @@ function Filter(_ref2) {
146
154
  filterIcon: displayFilterIcon,
147
155
  hidePanel: hidePanel,
148
156
  renderPanelContent: renderPanelContent,
149
- hideFilterPopupHeader: hideFilterPopupHeader
150
- }), document.body));
157
+ hideFilterPopupHeader: hideFilterPopupHeader,
158
+ popupParent: popupParent
159
+ }), popupParent));
151
160
  }
152
161
 
153
162
  function _getPanelOffset(ele, hideFilterPopupHeader) {
@@ -1,6 +1,8 @@
1
1
  import { TablePipeline } from "../pipeline";
2
+ import { ReactNode } from 'react';
2
3
  export interface colGroupExtendOption {
3
4
  onChangeExtendStatus?({}: any, {}: any): void;
4
5
  extendStatus?: {};
6
+ extendIcon?: ReactNode | ((extendStatus: boolean) => ReactNode);
5
7
  }
6
8
  export declare const colGroupExtendable: (opts?: colGroupExtendOption) => (pipeline: TablePipeline) => TablePipeline;
@@ -77,12 +77,14 @@ var colGroupExtendable = function colGroupExtendable() {
77
77
 
78
78
  var addIcon = function addIcon(col) {
79
79
  var result = (0, _extends2.default)({}, col);
80
+ var curColState = curState[col.code];
81
+ var displaycolExtendIcon = typeof opts.extendIcon === 'function' ? opts.extendIcon(curColState) : opts.extendIcon;
80
82
 
81
83
  var addIconNode = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, _internals.internals.safeRenderHeader((0, _extends2.default)({}, col)), /*#__PURE__*/_react.default.createElement(ExtendIconStyle, {
82
84
  onClick: function onClick() {
83
85
  toggle(col);
84
86
  }
85
- }, /*#__PURE__*/_react.default.createElement(ExpandIcon, {
87
+ }, displaycolExtendIcon || /*#__PURE__*/_react.default.createElement(ExpandIcon, {
86
88
  style: {
87
89
  userSelect: 'none',
88
90
  marginLeft: 2,
@@ -91,8 +93,8 @@ var colGroupExtendable = function colGroupExtendable() {
91
93
  verticalAlign: 'middle'
92
94
  },
93
95
  className: (0, _classnames.default)((0, _defineProperty2.default)({}, _styles.Classes.tableExtendIcon, true)),
94
- size: 16,
95
- isExtend: curState[col.code]
96
+ size: 14,
97
+ isExtend: curColState
96
98
  })));
97
99
 
98
100
  result.title = addIconNode;
@@ -16,7 +16,11 @@ export interface FilterFeatureOptions {
16
16
  filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
17
17
  /** 是否对触发弹出过滤面板 的 click 事件调用 event.stopPropagation() */
18
18
  stopClickEventPropagation?: boolean;
19
- /** 是否隐藏过滤弹出菜单header区域 */
19
+ /** 是否对按ESC键时关闭面板的 keydown 事件调用 event.stopPropagation() */
20
+ stopESCKeyDownEventPropagation?: boolean;
21
+ /** 是否隐藏过滤面板的header区域 */
20
22
  hideFilterPopupHeader?: boolean;
23
+ /** 指定过滤面板渲染的父节点 */
24
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
21
25
  }
22
26
  export declare function filter(opts?: FilterFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -55,7 +55,9 @@ function filter() {
55
55
  mode = opts.mode,
56
56
  filterIcon = opts.filterIcon,
57
57
  stopClickEventPropagation = opts.stopClickEventPropagation,
58
- hideFilterPopupHeader = opts.hideFilterPopupHeader;
58
+ stopESCKeyDownEventPropagation = opts.stopESCKeyDownEventPropagation,
59
+ hideFilterPopupHeader = opts.hideFilterPopupHeader,
60
+ getPopupParent = opts.getPopupParent;
59
61
  var inputFilters = (_b = (_a = filters !== null && filters !== void 0 ? filters : pipeline.getStateAtKey(stateKey)) !== null && _a !== void 0 ? _a : defaultFilters) !== null && _b !== void 0 ? _b : [];
60
62
  inputFilters = mode === 'single' ? (0, _slice.default)(inputFilters).call(inputFilters, 0, 1) : inputFilters;
61
63
  var inputFiltersMap = new _map.default((0, _map2.default)(inputFilters).call(inputFilters, function (filterItem) {
@@ -116,7 +118,9 @@ function filter() {
116
118
  isFilterActive: filterActive,
117
119
  className: (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.tableFilterTrigger, true), (0, _defineProperty2.default)(_cx, "active", filterActive), _cx)),
118
120
  stopClickEventPropagation: stopClickEventPropagation,
119
- hideFilterPopupHeader: hideFilterPopupHeader
121
+ stopESCKeyDownEventPropagation: stopESCKeyDownEventPropagation,
122
+ hideFilterPopupHeader: hideFilterPopupHeader,
123
+ getPopupParent: getPopupParent
120
124
  })]); // result.headerCellProps = mergeCellProps(col.headerCellProps, {
121
125
  // style: {
122
126
  // paddingRight: '18px'
@@ -12,7 +12,9 @@ interface FilterProps {
12
12
  setFilter: CustomeFilterPanelProps['setFilter'];
13
13
  onClick?: (e: React.MouseEvent) => any;
14
14
  stopClickEventPropagation?: boolean;
15
+ stopESCKeyDownEventPropagation?: boolean;
15
16
  hideFilterPopupHeader?: boolean;
17
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
16
18
  }
17
- declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, hideFilterPopupHeader }: FilterProps): JSX.Element;
19
+ declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent }: FilterProps): JSX.Element;
18
20
  export default Filter;
@@ -58,11 +58,12 @@ function Panel(_ref) {
58
58
  filterIcon = _ref.filterIcon,
59
59
  hidePanel = _ref.hidePanel,
60
60
  renderPanelContent = _ref.renderPanelContent,
61
- hideFilterPopupHeader = _ref.hideFilterPopupHeader;
61
+ hideFilterPopupHeader = _ref.hideFilterPopupHeader,
62
+ popupParent = _ref.popupParent;
62
63
 
63
64
  var filterPanelRef = _react.default.useRef(null);
64
65
 
65
- var _React$useState = _react.default.useState((0, _utils.calculatePopupRelative)(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader))),
66
+ var _React$useState = _react.default.useState((0, _utils.calculatePopupRelative)(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader))),
66
67
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
67
68
  position = _React$useState2[0],
68
69
  setPosition = _React$useState2[1];
@@ -73,7 +74,7 @@ function Panel(_ref) {
73
74
  };
74
75
 
75
76
  var handleFilterPanelResize = function handleFilterPanelResize(resize) {
76
- setPosition((0, _utils.calculatePopupRelative)(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader)));
77
+ setPosition((0, _utils.calculatePopupRelative)(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader)));
77
78
  };
78
79
 
79
80
  (0, _react.useEffect)(function () {
@@ -107,7 +108,9 @@ function Filter(_ref2) {
107
108
  filterModel = _ref2.filterModel,
108
109
  isFilterActive = _ref2.isFilterActive,
109
110
  stopClickEventPropagation = _ref2.stopClickEventPropagation,
110
- hideFilterPopupHeader = _ref2.hideFilterPopupHeader;
111
+ stopESCKeyDownEventPropagation = _ref2.stopESCKeyDownEventPropagation,
112
+ hideFilterPopupHeader = _ref2.hideFilterPopupHeader,
113
+ getPopupParent = _ref2.getPopupParent;
111
114
 
112
115
  var _React$useState3 = _react.default.useState(false),
113
116
  _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
@@ -143,25 +146,30 @@ function Filter(_ref2) {
143
146
  var handleIconClick = function handleIconClick(e) {
144
147
  // 只有当icon区域点击会触发面板展开
145
148
  // 防止 createPortal 区域的点击触发该事件
146
- if (!e.currentTarget.contains(e.target)) {
147
- return;
149
+ if (e.currentTarget.contains(e.target)) {
150
+ setShowPanel(true);
148
151
  }
149
152
 
150
153
  if (stopClickEventPropagation) {
151
154
  e.stopPropagation();
152
155
  }
153
-
154
- setShowPanel(true);
155
156
  };
156
157
 
157
158
  var handleKeyDown = function handleKeyDown(e) {
158
- if (e.currentTarget.contains(e.target) && e.keyCode === _keyCode.default.ESC) {
159
- setShowPanel(false);
159
+ if (e.keyCode === _keyCode.default.ESC) {
160
+ if (e.currentTarget.contains(e.target)) {
161
+ setShowPanel(false);
162
+ }
163
+
164
+ if (stopESCKeyDownEventPropagation) {
165
+ e.stopPropagation();
166
+ }
160
167
  }
161
168
  };
162
169
 
163
170
  var iconClassName = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, className, true), (0, _defineProperty2.default)(_cx, 'filter-panel-open', showPanel), _cx));
164
171
  var displayFilterIcon = typeof filterIcon === 'function' ? filterIcon(isFilterActive) : filterIcon;
172
+ var popupParent = (getPopupParent === null || getPopupParent === void 0 ? void 0 : getPopupParent(iconWrapRef.current)) || document.body;
165
173
  return /*#__PURE__*/_react.default.createElement(FilterIconSpanStyle, {
166
174
  style: style,
167
175
  className: iconClassName,
@@ -180,8 +188,9 @@ function Filter(_ref2) {
180
188
  filterIcon: displayFilterIcon,
181
189
  hidePanel: hidePanel,
182
190
  renderPanelContent: renderPanelContent,
183
- hideFilterPopupHeader: hideFilterPopupHeader
184
- }), document.body));
191
+ hideFilterPopupHeader: hideFilterPopupHeader,
192
+ popupParent: popupParent
193
+ }), popupParent));
185
194
  }
186
195
 
187
196
  function _getPanelOffset(ele, hideFilterPopupHeader) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kdcloudjs/table",
3
- "version": "1.1.5-canary.2",
3
+ "version": "1.1.5-canary.4",
4
4
  "description": "金蝶 react table 组件",
5
5
  "title": "table",
6
6
  "keywords": [