@qn-pandora/pandora-component 4.1.6 → 4.2.0

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 (55) hide show
  1. package/CHANGELOG.json +20 -0
  2. package/CHANGELOG.md +8 -1
  3. package/es/components/Collapse/index.js +3 -2
  4. package/es/components/Collapse/style.css +1 -0
  5. package/es/components/Collapse/style.less +1 -0
  6. package/es/components/Descriptions/style.css +1 -0
  7. package/es/components/Descriptions/style.less +1 -0
  8. package/es/components/Drawer/index.d.ts +20 -1
  9. package/es/components/Drawer/index.js +53 -9
  10. package/es/components/Drawer/style.css +8 -0
  11. package/es/components/Drawer/style.less +9 -0
  12. package/es/components/RadioGroup/style.css +7 -0
  13. package/es/components/RadioGroup/style.less +9 -0
  14. package/es/components/Table/ColumnSetting/index.d.ts +16 -0
  15. package/es/components/Table/ColumnSetting/index.js +91 -0
  16. package/es/components/Table/ColumnSetting/style.css +47 -0
  17. package/es/components/Table/ColumnSetting/style.less +46 -0
  18. package/es/components/Table/index.d.ts +27 -2
  19. package/es/components/Table/index.js +127 -3
  20. package/es/components/Table/style.css +4 -0
  21. package/es/components/Table/style.less +7 -0
  22. package/es/constants/language/datetime/en.js +37 -37
  23. package/es/constants/language/table/en.js +4 -1
  24. package/es/constants/language/table/type.d.ts +3 -0
  25. package/es/constants/language/table/zh.js +4 -1
  26. package/es/index.css +108 -40
  27. package/es/index.less +4 -3
  28. package/es/style/theme.less +13 -2
  29. package/lib/components/Collapse/index.js +3 -2
  30. package/lib/components/Collapse/style.css +1 -0
  31. package/lib/components/Collapse/style.less +1 -0
  32. package/lib/components/Descriptions/style.css +1 -0
  33. package/lib/components/Descriptions/style.less +1 -0
  34. package/lib/components/Drawer/index.d.ts +20 -1
  35. package/lib/components/Drawer/index.js +53 -9
  36. package/lib/components/Drawer/style.css +8 -0
  37. package/lib/components/Drawer/style.less +9 -0
  38. package/lib/components/RadioGroup/style.css +7 -0
  39. package/lib/components/RadioGroup/style.less +9 -0
  40. package/lib/components/Table/ColumnSetting/index.d.ts +16 -0
  41. package/lib/components/Table/ColumnSetting/index.js +104 -0
  42. package/lib/components/Table/ColumnSetting/style.css +47 -0
  43. package/lib/components/Table/ColumnSetting/style.less +46 -0
  44. package/lib/components/Table/index.d.ts +27 -2
  45. package/lib/components/Table/index.js +126 -2
  46. package/lib/components/Table/style.css +4 -0
  47. package/lib/components/Table/style.less +7 -0
  48. package/lib/constants/language/datetime/en.js +37 -37
  49. package/lib/constants/language/table/en.js +4 -1
  50. package/lib/constants/language/table/type.d.ts +3 -0
  51. package/lib/constants/language/table/zh.js +4 -1
  52. package/lib/index.css +3481 -3413
  53. package/lib/index.less +4 -3
  54. package/lib/style/theme.less +13 -2
  55. package/package.json +5 -4
@@ -11,5 +11,6 @@
11
11
 
12
12
  .@{ant-prefix}-descriptions-item-content {
13
13
  color: @font-color-7;
14
+ overflow: hidden;
14
15
  }
15
16
  }
@@ -57,22 +57,33 @@ export declare type IDrawerProps = Overwrite<DrawerProps, {
57
57
  * 是否允许拖拽
58
58
  */
59
59
  canDrag?: boolean;
60
+ /**
61
+ * 关闭按钮显示的位置,默认left
62
+ */
60
63
  closeIconPlacement?: 'left' | 'right';
61
64
  /**
62
65
  * 无遮罩时点击空白处中的哪些元素不关闭
63
66
  */
64
67
  nonCloseSelector?: string;
65
68
  size?: 'small' | 'default' | 'large';
69
+ /**
70
+ * 是否显示全屏按钮
71
+ */
72
+ showFullScreen?: boolean;
73
+ onScreenFullChange?: (showFullScreen: boolean) => void;
66
74
  }>;
67
75
  export declare class Drawer extends React.Component<React.PropsWithChildren<IDrawerProps>, any> {
68
76
  drawerId: string;
69
77
  isResizing: boolean;
70
78
  realWidth: React.ReactText;
79
+ isFullscreen: boolean;
71
80
  throttleMouseMove: import("lodash").DebouncedFunc<(e: any) => void>;
72
81
  get closable(): boolean | undefined;
73
- get extra(): {} | null | undefined;
82
+ get extra(): JSX.Element;
74
83
  setIsResizing(isResizing?: boolean): void;
75
84
  setRealWidth(realWidth: string | number): void;
85
+ setIsFullscreen(isFullscreen: boolean): void;
86
+ handleFull(): void;
76
87
  onMouseDown(): void;
77
88
  onMouseUp(): void;
78
89
  onMouseMove(e: any): void;
@@ -136,12 +147,20 @@ declare const _default: (props: {
136
147
  * 是否允许拖拽
137
148
  */
138
149
  canDrag?: boolean | undefined;
150
+ /**
151
+ * 关闭按钮显示的位置,默认left
152
+ */
139
153
  closeIconPlacement?: import("antd/es/collapse/Collapse").ExpandIconPosition;
140
154
  /**
141
155
  * 无遮罩时点击空白处中的哪些元素不关闭
142
156
  */
143
157
  nonCloseSelector?: string | undefined;
144
158
  size?: "small" | "default" | "large" | undefined;
159
+ /**
160
+ * 是否显示全屏按钮
161
+ */
162
+ showFullScreen?: boolean | undefined;
163
+ onScreenFullChange?: ((showFullScreen: boolean) => void) | undefined;
145
164
  } & Pick<DrawerProps, "style" | "autoFocus" | "prefixCls" | "footer" | "extra" | "bodyStyle" | "forceRender" | "keyboard" | "destroyOnClose" | "closeIcon" | "drawerStyle" | "headerStyle" | "contentWrapperStyle" | "push" | "handler" | "footerStyle" | "level" | "levelMove"> & {
146
165
  children?: React.ReactNode;
147
166
  } & {
@@ -53,14 +53,16 @@ var lodash_1 = require("lodash");
53
53
  var mobx_react_1 = require("mobx-react");
54
54
  var mobx_1 = require("mobx");
55
55
  var antd_1 = require("antd");
56
+ var screenfull_1 = __importDefault(require("screenfull"));
57
+ var pandora_component_icons_1 = require("@qn-pandora/pandora-component-icons");
56
58
  var dom_1 = require("../../utils/dom");
57
59
  var style_1 = require("../../constants/style");
58
60
  var modalPopupContainer_1 = __importDefault(require("../../hoc/modalPopupContainer"));
59
61
  var bind_1 = __importDefault(require("../../utils/bind"));
60
62
  var CloseIcon_1 = __importDefault(require("./CloseIcon"));
61
- var DEFAULT_WIDTH = 640;
62
- var SMALL_WIDTH = 480;
63
- var LARGE_WIDTH = 960;
63
+ var DEFAULT_WIDTH = '50%';
64
+ var SMALL_WIDTH = '38%';
65
+ var LARGE_WIDTH = '75%';
64
66
  var MAX_WIDTH = 6000;
65
67
  var MIN_WIDTH = 300;
66
68
  var Drawer = /** @class */ (function (_super) {
@@ -70,6 +72,7 @@ var Drawer = /** @class */ (function (_super) {
70
72
  _this.drawerId = "drawer-id-" + Math.floor(Math.random() * 10000);
71
73
  _this.isResizing = false;
72
74
  _this.realWidth = _this.initWidth(_this.props.width, _this.props.size);
75
+ _this.isFullscreen = false;
73
76
  _this.throttleMouseMove = lodash_1.throttle(function (e) { return _this.onMouseMove(e); }, 100);
74
77
  return _this;
75
78
  }
@@ -87,13 +90,17 @@ var Drawer = /** @class */ (function (_super) {
87
90
  });
88
91
  Object.defineProperty(Drawer.prototype, "extra", {
89
92
  get: function () {
90
- var _a = this.props, closable = _a.closable, closeIconPlacement = _a.closeIconPlacement, onClose = _a.onClose;
93
+ var _a = this.props, closable = _a.closable, closeIconPlacement = _a.closeIconPlacement, onClose = _a.onClose, showFullScreen = _a.showFullScreen;
94
+ var fullIcon = showFullScreen === true ? (this.isFullscreen ? (react_1.default.createElement(pandora_component_icons_1.FullscreenExitOutlined, { onClick: this.handleFull, className: style_1.SDK_PREFIX + "-drawer-header-full-icon" })) : (react_1.default.createElement(pandora_component_icons_1.FullscreenOutlined, { onClick: this.handleFull, className: style_1.SDK_PREFIX + "-drawer-header-full-icon" }))) : null;
91
95
  if (closable !== false && closeIconPlacement === 'right') {
92
96
  return (react_1.default.createElement(react_1.default.Fragment, null,
93
97
  this.props.extra,
98
+ fullIcon,
94
99
  react_1.default.createElement(CloseIcon_1.default, { className: style_1.SDK_PREFIX + "-drawer-close-icon", onClick: onClose })));
95
100
  }
96
- return this.props.extra;
101
+ return (react_1.default.createElement(react_1.default.Fragment, null,
102
+ fullIcon,
103
+ this.props.extra));
97
104
  },
98
105
  enumerable: true,
99
106
  configurable: true
@@ -105,6 +112,17 @@ var Drawer = /** @class */ (function (_super) {
105
112
  Drawer.prototype.setRealWidth = function (realWidth) {
106
113
  this.realWidth = realWidth;
107
114
  };
115
+ Drawer.prototype.setIsFullscreen = function (isFullscreen) {
116
+ this.isFullscreen = isFullscreen;
117
+ };
118
+ Drawer.prototype.handleFull = function () {
119
+ var draw = document.querySelector("." + this.drawerId);
120
+ if (!screenfull_1.default || !draw) {
121
+ return;
122
+ }
123
+ this.setIsFullscreen(!this.isFullscreen);
124
+ screenfull_1.default.toggle(draw);
125
+ };
108
126
  Drawer.prototype.onMouseDown = function () {
109
127
  this.setIsResizing(true);
110
128
  };
@@ -124,6 +142,8 @@ var Drawer = /** @class */ (function (_super) {
124
142
  };
125
143
  Drawer.prototype.onMouseClick = function (e) {
126
144
  var _a = this.props, mask = _a.mask, maskClosable = _a.maskClosable, nonCloseSelector = _a.nonCloseSelector, onClose = _a.onClose, visible = _a.visible;
145
+ if (this.isResizing)
146
+ return;
127
147
  if (mask === false && maskClosable && visible) {
128
148
  var currentEl = e.target;
129
149
  var shouldClose = true;
@@ -157,11 +177,21 @@ var Drawer = /** @class */ (function (_super) {
157
177
  return DEFAULT_WIDTH;
158
178
  };
159
179
  Drawer.prototype.componentDidMount = function () {
180
+ document.body.addEventListener('mousedown', this.onMouseClick);
181
+ var onScreenFullChange = this.props.onScreenFullChange;
182
+ if (this.props.showFullScreen) {
183
+ if (screenfull_1.default && onScreenFullChange) {
184
+ screenfull_1.default.on('change', function () {
185
+ if (screenfull_1.default) {
186
+ onScreenFullChange(screenfull_1.default.isFullscreen);
187
+ }
188
+ });
189
+ }
190
+ }
160
191
  if (this.props.canDrag) {
161
192
  document.addEventListener('mousemove', this.throttleMouseMove);
162
193
  document.addEventListener('mouseup', this.onMouseUp);
163
194
  }
164
- document.body.addEventListener('click', this.onMouseClick);
165
195
  };
166
196
  Drawer.prototype.UNSAFE_componentWillUpdate = function (nextProps) {
167
197
  if (nextProps.canDrag && !this.props.canDrag) {
@@ -179,9 +209,6 @@ var Drawer = /** @class */ (function (_super) {
179
209
  var _b = this.props, width = _b.width, className = _b.className, children = _b.children, canDrag = _b.canDrag, visible = _b.visible, closable = _b.closable, extra = _b.extra, size = _b.size, onClose = _b.onClose, other = __rest(_b, ["width", "className", "children", "canDrag", "visible", "closable", "extra", "size", "onClose"]);
180
210
  return (react_1.default.createElement(antd_1.Drawer, __assign({ className: classnames_1.default(this.drawerId, style_1.SDK_PREFIX + "-drawer", className, (_a = {},
181
211
  _a[style_1.SDK_PREFIX + "-drawer-no-mask"] = this.props.mask === false,
182
- _a[style_1.SDK_PREFIX + "-drawer-size-small"] = size === 'small',
183
- _a[style_1.SDK_PREFIX + "-drawer-size-default"] = size === 'default',
184
- _a[style_1.SDK_PREFIX + "-drawer-size-large"] = size === 'large',
185
212
  _a)), width: this.realWidth || 800, zIndex: 1200, visible: visible, closable: this.closable, extra: this.extra, closeIcon: react_1.default.createElement(CloseIcon_1.default, { className: style_1.SDK_PREFIX + "-drawer-close-icon", onClick: onClose }), onClose: onClose }, other),
186
213
  canDrag && (react_1.default.createElement("div", { className: style_1.SDK_PREFIX + "-scroll-handler", onMouseDown: this.onMouseDown })),
187
214
  children));
@@ -194,6 +221,10 @@ var Drawer = /** @class */ (function (_super) {
194
221
  mobx_1.observable,
195
222
  __metadata("design:type", Object)
196
223
  ], Drawer.prototype, "realWidth", void 0);
224
+ __decorate([
225
+ mobx_1.observable,
226
+ __metadata("design:type", Boolean)
227
+ ], Drawer.prototype, "isFullscreen", void 0);
197
228
  __decorate([
198
229
  mobx_1.computed,
199
230
  __metadata("design:type", Object),
@@ -218,6 +249,19 @@ var Drawer = /** @class */ (function (_super) {
218
249
  __metadata("design:paramtypes", [Object]),
219
250
  __metadata("design:returntype", void 0)
220
251
  ], Drawer.prototype, "setRealWidth", null);
252
+ __decorate([
253
+ bind_1.default,
254
+ mobx_1.action,
255
+ __metadata("design:type", Function),
256
+ __metadata("design:paramtypes", [Boolean]),
257
+ __metadata("design:returntype", void 0)
258
+ ], Drawer.prototype, "setIsFullscreen", null);
259
+ __decorate([
260
+ bind_1.default,
261
+ __metadata("design:type", Function),
262
+ __metadata("design:paramtypes", []),
263
+ __metadata("design:returntype", void 0)
264
+ ], Drawer.prototype, "handleFull", null);
221
265
  __decorate([
222
266
  bind_1.default,
223
267
  __metadata("design:type", Function),
@@ -263,6 +263,9 @@
263
263
  height: 60px;
264
264
  line-height: 60px;
265
265
  }
266
+ .pandora-sdk-drawer .ant-drawer-header-title {
267
+ overflow: hidden;
268
+ }
266
269
  .pandora-sdk-drawer-size-small {
267
270
  max-width: 38%;
268
271
  }
@@ -288,3 +291,8 @@
288
291
  .pandora-sdk-drawer-close-icon {
289
292
  margin-left: 24px;
290
293
  }
294
+ .pandora-sdk-drawer-header-full-icon {
295
+ margin-left: 24px;
296
+ color: #333;
297
+ font-size: 14px;
298
+ }
@@ -14,6 +14,9 @@
14
14
  height: 60px;
15
15
  line-height: 60px;
16
16
  }
17
+ .@{ant-prefix}-drawer-header-title {
18
+ overflow: hidden;
19
+ }
17
20
  }
18
21
 
19
22
  .@{sdk-prefix}-drawer-size-small {
@@ -46,3 +49,9 @@
46
49
  .@{sdk-prefix}-drawer-close-icon {
47
50
  margin-left: 24px;
48
51
  }
52
+
53
+ .@{sdk-prefix}-drawer-header-full-icon {
54
+ margin-left: 24px;
55
+ color: @font-color-7;
56
+ font-size: 14px;
57
+ }
@@ -377,12 +377,19 @@ span.ant-radio + * {
377
377
  .ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child {
378
378
  border-right-color: #e5e5e5;
379
379
  }
380
+ .pandora-sdk-solid-radio-group .ant-radio-button-wrapper:not(.pandora-sdk-solid-radio-group .ant-radio-button-wrapper-checked)::before {
381
+ background-color: #bfbfbf;
382
+ }
380
383
  .pandora-sdk-solid-radio-group .ant-radio-button-wrapper {
381
384
  padding: 0 12px;
382
385
  }
383
386
  .pandora-sdk-solid-radio-group .ant-radio-button-wrapper:not(.pandora-sdk-solid-radio-group .ant-radio-button-wrapper-checked) {
384
387
  border-color: #bfbfbf;
385
388
  }
389
+ .pandora-sdk-solid-radio-group .ant-radio-button-wrapper:focus-within {
390
+ -webkit-box-shadow: unset;
391
+ box-shadow: unset;
392
+ }
386
393
  .pandora-sdk-solid-radio-group .ant-radio:not(.pandora-sdk-solid-radio-group .ant-radio-checked) .ant-radio-inner {
387
394
  border-color: #bfbfbf;
388
395
  }
@@ -2,11 +2,20 @@
2
2
  @import '../../style/theme.less';
3
3
 
4
4
  .@{sdk-prefix}-solid-radio-group {
5
+ .@{ant-prefix}-radio-button-wrapper:not(.@{sdk-prefix}-solid-radio-group
6
+ .@{ant-prefix}-radio-button-wrapper-checked) {
7
+ &::before {
8
+ background-color: @border-color-2;
9
+ }
10
+ }
5
11
  .@{ant-prefix}-radio-button-wrapper {
6
12
  padding: 0 12px;
7
13
  &:not(&-checked) {
8
14
  border-color: @input-border-color;
9
15
  }
16
+ &:focus-within {
17
+ box-shadow: unset;
18
+ }
10
19
  }
11
20
 
12
21
  .@{ant-prefix}-radio {
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export declare const All = "_all";
3
+ export interface IOption {
4
+ label: string | React.ReactNode;
5
+ value: string;
6
+ }
7
+ export interface ISettingBtnProps {
8
+ overlayClass?: string;
9
+ onHiddenKeysChange?: (value: string[]) => void;
10
+ hiddenKeys?: string[];
11
+ options?: IOption[];
12
+ loading?: boolean;
13
+ }
14
+ export declare function ColumnSetting(props: ISettingBtnProps): JSX.Element;
15
+ declare const _default: React.MemoExoticComponent<typeof ColumnSetting>;
16
+ export default _default;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spread = (this && this.__spread) || function () {
19
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
20
+ return ar;
21
+ };
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
26
+ result["default"] = mod;
27
+ return result;
28
+ };
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ var react_1 = __importStar(require("react"));
34
+ var classnames_1 = __importDefault(require("classnames"));
35
+ var lodash_1 = require("lodash");
36
+ var antd_1 = require("antd");
37
+ var icons_1 = require("@ant-design/icons");
38
+ var config_provider_1 = require("antd/es/config-provider");
39
+ var language_1 = require("../../../utils/language");
40
+ var type_1 = require("../../../constants/language/table/type");
41
+ var style_1 = require("../../../constants/style");
42
+ var NameLimiter_1 = __importDefault(require("../../NameLimiter"));
43
+ var Input_1 = __importDefault(require("../../Input"));
44
+ exports.All = '_all';
45
+ function ColumnSetting(props) {
46
+ var overlayClass = props.overlayClass, _a = props.hiddenKeys, hiddenKeys = _a === void 0 ? [] : _a, onHiddenKeysChange = props.onHiddenKeysChange, _b = props.options, options = _b === void 0 ? [] : _b, loading = props.loading;
47
+ var locale = react_1.useContext(config_provider_1.ConfigContext).locale;
48
+ var _c = __read(react_1.useState(''), 2), prefix = _c[0], setPrefix = _c[1];
49
+ var allKeys = react_1.useMemo(function () {
50
+ return options.map(function (item) { return item.value; });
51
+ }, [options]);
52
+ var realOptions = react_1.useMemo(function () {
53
+ if (!prefix || prefix.length === 0)
54
+ return options;
55
+ return options.filter(function (item) {
56
+ if (typeof item.label === 'string' &&
57
+ item.label.toLowerCase().indexOf(prefix.toLowerCase()) !== -1) {
58
+ return true;
59
+ }
60
+ return false;
61
+ });
62
+ }, [prefix, options]);
63
+ var realValues = react_1.useMemo(function () {
64
+ return allKeys.filter(function (item) { return !lodash_1.includes(hiddenKeys, item); });
65
+ }, [hiddenKeys, allKeys]);
66
+ var allCheckChange = react_1.useCallback(function (e) {
67
+ if (e.target.checked) {
68
+ onHiddenKeysChange === null || onHiddenKeysChange === void 0 ? void 0 : onHiddenKeysChange([]);
69
+ return;
70
+ }
71
+ onHiddenKeysChange === null || onHiddenKeysChange === void 0 ? void 0 : onHiddenKeysChange(allKeys);
72
+ }, [onHiddenKeysChange, allKeys]);
73
+ var handlePrefixChange = react_1.useCallback(function (value) {
74
+ setPrefix(value || '');
75
+ }, [setPrefix]);
76
+ var handleChange = react_1.useCallback(function (e) {
77
+ var v = e.target.value;
78
+ var checked = e.target.checked;
79
+ // 添加
80
+ if (checked) {
81
+ var checkedValues_1 = Array.from(new Set(__spread(realValues, [v])));
82
+ onHiddenKeysChange === null || onHiddenKeysChange === void 0 ? void 0 : onHiddenKeysChange(allKeys.filter(function (item) { return !lodash_1.includes(checkedValues_1, item); }));
83
+ return;
84
+ }
85
+ // 删除
86
+ var restValues = realValues.filter(function (item) { return item !== v; });
87
+ onHiddenKeysChange === null || onHiddenKeysChange === void 0 ? void 0 : onHiddenKeysChange(allKeys.filter(function (item) { return !lodash_1.includes(restValues, item); }));
88
+ }, [onHiddenKeysChange, realValues, allKeys]);
89
+ return (react_1.default.createElement(antd_1.Popover, { trigger: "click", placement: "bottomRight", content: react_1.default.createElement(antd_1.Spin, { spinning: !!loading },
90
+ react_1.default.createElement("div", { className: classnames_1.default(style_1.SDK_PREFIX + "-table-column-setting-popover", overlayClass) },
91
+ react_1.default.createElement("div", { className: style_1.SDK_PREFIX + "-table-column-setting-header" },
92
+ react_1.default.createElement(antd_1.Checkbox, { value: exports.All, checked: hiddenKeys.length === 0, onChange: allCheckChange, className: style_1.SDK_PREFIX + "-table-column-setting-all-check" }, language_1.formatString(type_1.TableLocale.check_all, locale)),
93
+ react_1.default.createElement(Input_1.default, { value: prefix, allowClear: true, onChange: handlePrefixChange, placeholder: language_1.formatString(type_1.TableLocale.search, locale), className: style_1.SDK_PREFIX + "-table-column-setting-search-input" })),
94
+ react_1.default.createElement("div", null,
95
+ react_1.default.createElement("div", { className: style_1.SDK_PREFIX + "-table-column-setting-content" }, realOptions.map(function (item) {
96
+ return (react_1.default.createElement("div", { key: item.value },
97
+ react_1.default.createElement("div", { className: style_1.SDK_PREFIX + "-table-column-setting-checkbox-container" },
98
+ react_1.default.createElement(antd_1.Checkbox, { checked: !!realValues.find(function (v) { return v === item.value; }), value: item.value, className: style_1.SDK_PREFIX + "-table-column-setting-checkbox", onChange: handleChange },
99
+ react_1.default.createElement("span", { className: style_1.SDK_PREFIX + "-table-column-setting-value" }, typeof item.label === 'string' ? (react_1.default.createElement(NameLimiter_1.default, { name: item.label })) : (item.label))))));
100
+ }))))) },
101
+ react_1.default.createElement(icons_1.SettingOutlined, { className: style_1.SDK_PREFIX + "-table-column-setting-icon" })));
102
+ }
103
+ exports.ColumnSetting = ColumnSetting;
104
+ exports.default = react_1.default.memo(ColumnSetting);
@@ -0,0 +1,47 @@
1
+ .pandora-sdk-table-column-setting-popover {
2
+ padding: 10px;
3
+ width: 100%;
4
+ width: 600px;
5
+ max-height: 300px;
6
+ overflow-y: auto;
7
+ }
8
+ .pandora-sdk-table-column-setting-popover .pandora-sdk-table-column-setting-header {
9
+ border-bottom: 1px solid #e5e5e5;
10
+ display: -webkit-box;
11
+ display: -ms-flexbox;
12
+ display: flex;
13
+ padding-bottom: 10px;
14
+ }
15
+ .pandora-sdk-table-column-setting-popover .pandora-sdk-table-column-setting-header .pandora-sdk-table-column-setting-all-check {
16
+ line-height: 32px;
17
+ }
18
+ .pandora-sdk-table-column-setting-popover .pandora-sdk-table-column-setting-header .pandora-sdk-table-column-setting-search-input {
19
+ width: 200px;
20
+ }
21
+ .pandora-sdk-table-column-setting-icon {
22
+ color: #333;
23
+ }
24
+ .pandora-sdk-table-column-setting-content {
25
+ display: -webkit-box;
26
+ display: -ms-flexbox;
27
+ display: flex;
28
+ -ms-flex-wrap: wrap;
29
+ flex-wrap: wrap;
30
+ }
31
+ .pandora-sdk-table-column-setting-content > div {
32
+ -webkit-box-flex: 0;
33
+ -ms-flex: 0 0 33.33%;
34
+ flex: 0 0 33.33%;
35
+ -webkit-box-sizing: border-box;
36
+ box-sizing: border-box;
37
+ position: relative;
38
+ overflow: hidden;
39
+ text-overflow: ellipsis;
40
+ }
41
+ .pandora-sdk-table-column-setting-content > div .pandora-sdk-table-column-setting-checkbox-container .pandora-sdk-table-column-setting-checkbox {
42
+ width: 100%;
43
+ overflow: hidden;
44
+ }
45
+ .pandora-sdk-table-column-setting-content > div .pandora-sdk-table-column-setting-checkbox-container .pandora-sdk-table-column-setting-checkbox > span:nth-child(2) {
46
+ overflow: hidden;
47
+ }
@@ -0,0 +1,46 @@
1
+ @import '../../../style/theme.less';
2
+
3
+ .@{sdk-prefix}-table-column-setting-popover {
4
+ padding: 10px;
5
+ width: 100%;
6
+ width: 600px;
7
+ .@{sdk-prefix}-table-column-setting-header {
8
+ border-bottom: 1px solid @border-color-base;
9
+ display: flex;
10
+ padding-bottom: 10px;
11
+ .@{sdk-prefix}-table-column-setting-all-check {
12
+ line-height: 32px;
13
+ }
14
+ .@{sdk-prefix}-table-column-setting-search-input {
15
+ width: 200px;
16
+ }
17
+ }
18
+ max-height: 300px;
19
+ overflow-y: auto;
20
+ }
21
+
22
+ .@{sdk-prefix}-table-column-setting-icon {
23
+ color: @font-color-7;
24
+ }
25
+
26
+ .@{sdk-prefix}-table-column-setting-content {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ }
30
+
31
+ .@{sdk-prefix}-table-column-setting-content > div {
32
+ flex: 0 0 33.33%;
33
+ box-sizing: border-box;
34
+ position: relative;
35
+ overflow: hidden;
36
+ text-overflow: ellipsis;
37
+ .@{sdk-prefix}-table-column-setting-checkbox-container {
38
+ .@{sdk-prefix}-table-column-setting-checkbox {
39
+ width: 100%;
40
+ overflow: hidden;
41
+ }
42
+ .@{sdk-prefix}-table-column-setting-checkbox > span:nth-child(2) {
43
+ overflow: hidden;
44
+ }
45
+ }
46
+ }
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
- import { TableProps } from 'antd/es/table';
2
+ import { TableProps, ColumnType, ColumnGroupType } from 'antd/es/table';
3
3
  import { TableRowSelection } from 'antd/es/table/interface';
4
+ import { IOption } from './ColumnSetting';
4
5
  /**
5
6
  * 表格提供自定义多选, 通过 rowSelection对象的selectedRowKeys和onChange来控制多选的状态
6
7
  * 需要注意的是, 当在外部进行增删改或者外部需要控制选择状态时, 例如删除之后清空全选状态, 需要受控
@@ -20,7 +21,17 @@ export interface IOptionItem {
20
21
  */
21
22
  disabled?: boolean | ((selectItems: any[]) => boolean);
22
23
  }
23
- export interface ITableProps<T> extends TableProps<T> {
24
+ export interface IColumnType<T> extends ColumnType<T> {
25
+ colTitle?: string | React.ReactNode;
26
+ configurable?: boolean;
27
+ }
28
+ export interface IColumnGroupType<T> extends ColumnGroupType<T> {
29
+ colTitle?: string | React.ReactNode;
30
+ configurable?: boolean;
31
+ }
32
+ export declare type IColumnsType<T> = Array<IColumnGroupType<T> | IColumnType<T>>;
33
+ export interface ITableProps<T> extends Omit<TableProps<T>, 'columns'> {
34
+ columns?: IColumnsType<T>;
24
35
  /**
25
36
  * 设置selectedRow选项, 可以获取当前选中的所有
26
37
  * 数据.
@@ -30,6 +41,10 @@ export interface ITableProps<T> extends TableProps<T> {
30
41
  /** 如果支持多选,则batchOptions为多选时的一些批量操作,如删除、添加等 */
31
42
  batchOptions?: IOptionItem[];
32
43
  emptyText?: React.ReactNode;
44
+ showColumnSetting?: boolean;
45
+ hiddenColumns?: string[];
46
+ onHiddenColumnsChange?: (keys: string[]) => void;
47
+ columnSettingOverlayClass?: string;
33
48
  }
34
49
  /**
35
50
  * pandora2.0风格的表格
@@ -44,15 +59,25 @@ declare class Table<T = any> extends React.Component<ITableProps<T>, any> {
44
59
  static contextType: React.Context<import("antd/es/config-provider").ConfigConsumerProps>;
45
60
  indeterminate: boolean;
46
61
  checkAll: boolean;
62
+ hiddenColumn: string[] | undefined;
47
63
  UNSAFE_componentWillReceiveProps(nextProps: ITableProps<T>): void;
48
64
  get selectedRowKeys(): React.ReactText[];
49
65
  get rowSelection(): TableRowSelection<T> | undefined;
50
66
  get undisabledData(): readonly T[];
51
67
  get keysOfCurrentPage(): any[];
52
68
  get emptyTextComp(): {};
69
+ get columnsSettingOptions(): IOption[];
70
+ get columnKeys(): {
71
+ allKeys: string[];
72
+ unconfigableKeys: string[];
73
+ resetKeys: string[];
74
+ };
75
+ handleHideColumnsChange(keys: string[]): Promise<void> | undefined;
76
+ getColumns(): IColumnsType<T> | undefined;
53
77
  getRowKey(row: any, index: number): any;
54
78
  setIndeterminate(indeterminate: boolean): void;
55
79
  setCheckAll(checkAll: boolean): void;
80
+ setHiddenColumn(hiddenColumn?: string[]): void;
56
81
  setCheckboxStatus(selectedRowsOfCurrentPage?: T[], dataSource?: T[]): void;
57
82
  handleSelectionChange(selectedRowKeys: React.Key[], selectedRowsOfCurrentPage: any[]): void;
58
83
  onRowSelectionChange(selectedRowKeys: React.Key[], selectedRowsOfCurrentPage: any[]): void;