@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.
- package/CHANGELOG.json +20 -0
- package/CHANGELOG.md +8 -1
- package/es/components/Collapse/index.js +3 -2
- package/es/components/Collapse/style.css +1 -0
- package/es/components/Collapse/style.less +1 -0
- package/es/components/Descriptions/style.css +1 -0
- package/es/components/Descriptions/style.less +1 -0
- package/es/components/Drawer/index.d.ts +20 -1
- package/es/components/Drawer/index.js +53 -9
- package/es/components/Drawer/style.css +8 -0
- package/es/components/Drawer/style.less +9 -0
- package/es/components/RadioGroup/style.css +7 -0
- package/es/components/RadioGroup/style.less +9 -0
- package/es/components/Table/ColumnSetting/index.d.ts +16 -0
- package/es/components/Table/ColumnSetting/index.js +91 -0
- package/es/components/Table/ColumnSetting/style.css +47 -0
- package/es/components/Table/ColumnSetting/style.less +46 -0
- package/es/components/Table/index.d.ts +27 -2
- package/es/components/Table/index.js +127 -3
- package/es/components/Table/style.css +4 -0
- package/es/components/Table/style.less +7 -0
- package/es/constants/language/datetime/en.js +37 -37
- package/es/constants/language/table/en.js +4 -1
- package/es/constants/language/table/type.d.ts +3 -0
- package/es/constants/language/table/zh.js +4 -1
- package/es/index.css +108 -40
- package/es/index.less +4 -3
- package/es/style/theme.less +13 -2
- package/lib/components/Collapse/index.js +3 -2
- package/lib/components/Collapse/style.css +1 -0
- package/lib/components/Collapse/style.less +1 -0
- package/lib/components/Descriptions/style.css +1 -0
- package/lib/components/Descriptions/style.less +1 -0
- package/lib/components/Drawer/index.d.ts +20 -1
- package/lib/components/Drawer/index.js +53 -9
- package/lib/components/Drawer/style.css +8 -0
- package/lib/components/Drawer/style.less +9 -0
- package/lib/components/RadioGroup/style.css +7 -0
- package/lib/components/RadioGroup/style.less +9 -0
- package/lib/components/Table/ColumnSetting/index.d.ts +16 -0
- package/lib/components/Table/ColumnSetting/index.js +104 -0
- package/lib/components/Table/ColumnSetting/style.css +47 -0
- package/lib/components/Table/ColumnSetting/style.less +46 -0
- package/lib/components/Table/index.d.ts +27 -2
- package/lib/components/Table/index.js +126 -2
- package/lib/components/Table/style.css +4 -0
- package/lib/components/Table/style.less +7 -0
- package/lib/constants/language/datetime/en.js +37 -37
- package/lib/constants/language/table/en.js +4 -1
- package/lib/constants/language/table/type.d.ts +3 -0
- package/lib/constants/language/table/zh.js +4 -1
- package/lib/index.css +3481 -3413
- package/lib/index.less +4 -3
- package/lib/style/theme.less +13 -2
- package/package.json +5 -4
@@ -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():
|
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 =
|
62
|
-
var SMALL_WIDTH =
|
63
|
-
var LARGE_WIDTH =
|
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
|
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
|
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;
|