@arim-aisdc/public-components 2.2.8 → 2.3.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/dist/assets/iconfont/table/iconfont.css +29 -9
- package/dist/assets/iconfont/table/iconfont.ttf +0 -0
- package/dist/components/BaseInfo/BaseInfo.d.ts +1 -1
- package/dist/components/CustomForm/CustomForm.js +8 -4
- package/dist/components/CustomForm/type.d.ts +1 -1
- package/dist/components/QueryFilter/QueryFilter.js +9 -4
- package/dist/components/QueryFilter/type.d.ts +2 -5
- package/dist/components/TableMax/TableBody/Row.js +21 -13
- package/dist/components/TableMax/TableBody/index.less +14 -0
- package/dist/components/TableMax/TableHeader/Cell.d.ts +3 -1
- package/dist/components/TableMax/TableHeader/Cell.js +19 -16
- package/dist/components/TableMax/TableHeader/index.d.ts +2 -1
- package/dist/components/TableMax/TableHeader/index.js +11 -20
- package/dist/components/TableMax/TableHeader/index.less +7 -0
- package/dist/components/TableMax/TableMax.d.ts +1 -2
- package/dist/components/TableMax/TableMax.js +11 -7
- package/dist/components/TableMax/components/{ColumnFilter/FilterDateRange → ColumnFilterV2/DateRange}/index.d.ts +2 -1
- package/dist/components/TableMax/components/ColumnFilterV2/DateRange/index.js +135 -0
- package/dist/components/TableMax/components/{ColumnFilter/FilterDateRange → ColumnFilterV2/DateRange}/index.less +5 -5
- package/dist/components/TableMax/components/ColumnFilterV2/Filter.d.ts +9 -0
- package/dist/components/TableMax/components/{ColumnFilter/index.js → ColumnFilterV2/Filter.js} +173 -226
- package/dist/components/TableMax/components/{ColumnFilter → ColumnFilterV2}/MultipleSelect/index.d.ts +3 -1
- package/dist/components/TableMax/components/ColumnFilterV2/MultipleSelect/index.js +124 -0
- package/dist/components/TableMax/components/ColumnFilterV2/MultipleSelect/index.less +32 -0
- package/dist/components/TableMax/components/ColumnFilterV2/NumberRange/index.d.ts +10 -0
- package/dist/components/TableMax/components/ColumnFilterV2/NumberRange/index.js +98 -0
- package/dist/components/TableMax/components/ColumnFilterV2/NumberRange/index.less +27 -0
- package/dist/components/TableMax/components/ColumnFilterV2/SingleSelect/index.d.ts +12 -0
- package/dist/components/TableMax/components/ColumnFilterV2/SingleSelect/index.js +107 -0
- package/dist/components/TableMax/components/ColumnFilterV2/SingleSelect/index.less +43 -0
- package/dist/components/TableMax/components/{ColumnFilter → ColumnFilterV2}/customFilterFns.js +1 -1
- package/dist/components/TableMax/components/{ColumnFilter → ColumnFilterV2}/index.d.ts +15 -1
- package/dist/components/TableMax/components/ColumnFilterV2/index.js +149 -0
- package/dist/components/TableMax/components/ColumnFilterV2/index.less +23 -0
- package/dist/components/TableMax/components/ColumnSetting/index.js +4 -13
- package/dist/components/TableMax/components/ColumnSort/customSortFns.js +43 -8
- package/dist/components/TableMax/components/ColumnSort/index.js +8 -1
- package/dist/components/TableMax/components/ColumnSort/index.less +6 -4
- package/dist/components/TableMax/index.d.ts +2 -2
- package/dist/components/TableMax/index.js +1 -1
- package/dist/components/TableMax/type.d.ts +33 -5
- package/dist/components/TableMax/type.js +21 -1
- package/dist/components/TableMax/utils.d.ts +13 -2
- package/dist/components/TableMax/utils.js +81 -8
- package/dist/themes/variables.less +5 -5
- package/dist/themes/variablesConfig.js +6 -6
- package/dist/utils/request.d.ts +4 -3
- package/dist/utils/request.js +4 -4
- package/package.json +1 -1
- package/dist/components/TableMax/components/ColumnFilter/FilterDateRange/index.js +0 -101
- package/dist/components/TableMax/components/ColumnFilter/MultipleSelect/index.js +0 -52
- package/dist/components/TableMax/components/ColumnFilter/MultipleSelect/index.less +0 -20
- package/dist/components/TableMax/components/ColumnFilter/SingleSelect/index.d.ts +0 -10
- package/dist/components/TableMax/components/ColumnFilter/SingleSelect/index.js +0 -27
- package/dist/components/TableMax/components/ColumnFilter/SingleSelect/index.less +0 -8
- /package/dist/components/TableMax/components/{ColumnFilter → ColumnFilterV2}/customFilterFns.d.ts +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useUpdateEffect } from 'ahooks';
|
|
8
|
+
import { Button, Checkbox, Input, Spin } from 'antd';
|
|
9
|
+
import { useMemo, useState } from 'react';
|
|
10
|
+
import "./index.less";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
var CheckboxGroup = Checkbox.Group;
|
|
15
|
+
var MultipleSelect = function MultipleSelect(_ref) {
|
|
16
|
+
var _ref$value = _ref.value,
|
|
17
|
+
value = _ref$value === void 0 ? [] : _ref$value,
|
|
18
|
+
onChange = _ref.onChange,
|
|
19
|
+
options = _ref.options,
|
|
20
|
+
onSearch = _ref.onSearch,
|
|
21
|
+
isRemoteSearch = _ref.isRemoteSearch,
|
|
22
|
+
loading = _ref.loading,
|
|
23
|
+
onCloseFilterPanel = _ref.onCloseFilterPanel;
|
|
24
|
+
// 内部state
|
|
25
|
+
var _useState = useState(Array.isArray(value) ? value : [value]),
|
|
26
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
27
|
+
innerValue = _useState2[0],
|
|
28
|
+
setInnerValue = _useState2[1];
|
|
29
|
+
|
|
30
|
+
// 前端搜索输入值
|
|
31
|
+
var _useState3 = useState(''),
|
|
32
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
33
|
+
frontendSearchValue = _useState4[0],
|
|
34
|
+
setFrontendSearchValue = _useState4[1];
|
|
35
|
+
var checkAll = options.length === innerValue.length;
|
|
36
|
+
var indeterminate = innerValue.length > 0 && innerValue.length < options.length;
|
|
37
|
+
var handleCheckBoxChange = function handleCheckBoxChange(changedValue) {
|
|
38
|
+
console.log('changedValue :>> ', changedValue);
|
|
39
|
+
setInnerValue(changedValue);
|
|
40
|
+
};
|
|
41
|
+
var handleConfirm = function handleConfirm() {
|
|
42
|
+
onChange(innerValue);
|
|
43
|
+
onCloseFilterPanel();
|
|
44
|
+
};
|
|
45
|
+
var handleReset = function handleReset() {
|
|
46
|
+
setInnerValue([]);
|
|
47
|
+
onChange([]);
|
|
48
|
+
};
|
|
49
|
+
useUpdateEffect(function () {
|
|
50
|
+
// console.log('value :>> ', value);
|
|
51
|
+
setInnerValue(Array.isArray(value) ? value : [value]);
|
|
52
|
+
}, [value.toString()]);
|
|
53
|
+
var onCheckAllChange = function onCheckAllChange(e) {
|
|
54
|
+
console.log('checkAll :>> ', e.target.checked);
|
|
55
|
+
var checkAll = e.target.checked;
|
|
56
|
+
if (checkAll) {
|
|
57
|
+
setInnerValue(options.map(function (item) {
|
|
58
|
+
return item.value;
|
|
59
|
+
}));
|
|
60
|
+
} else {
|
|
61
|
+
setInnerValue([]);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var handleInputChange = function handleInputChange(e) {
|
|
65
|
+
var value = e.target.value;
|
|
66
|
+
if (isRemoteSearch) {
|
|
67
|
+
onSearch(value);
|
|
68
|
+
} else {
|
|
69
|
+
setFrontendSearchValue(value);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// 最终的可选值
|
|
74
|
+
var finalOptions = useMemo(function () {
|
|
75
|
+
if (isRemoteSearch) {
|
|
76
|
+
return options;
|
|
77
|
+
}
|
|
78
|
+
var input = (frontendSearchValue !== null && frontendSearchValue !== void 0 ? frontendSearchValue : '').toUpperCase().trim();
|
|
79
|
+
return options.filter(function (option) {
|
|
80
|
+
var _option$label;
|
|
81
|
+
var optionFilterString = ('' + ((_option$label = option.label) !== null && _option$label !== void 0 ? _option$label : option.children)).toUpperCase().trim();
|
|
82
|
+
return optionFilterString.indexOf(input) !== -1;
|
|
83
|
+
});
|
|
84
|
+
}, [options, frontendSearchValue]);
|
|
85
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
86
|
+
className: "tableMax-filter-multipleSelect",
|
|
87
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
88
|
+
className: "header",
|
|
89
|
+
children: /*#__PURE__*/_jsx(Input, {
|
|
90
|
+
placeholder: "\u8F93\u5165\u641C\u7D22",
|
|
91
|
+
onChange: handleInputChange
|
|
92
|
+
})
|
|
93
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
94
|
+
className: "body",
|
|
95
|
+
children: loading ? /*#__PURE__*/_jsx("div", {
|
|
96
|
+
className: "loading",
|
|
97
|
+
children: /*#__PURE__*/_jsx(Spin, {})
|
|
98
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
99
|
+
children: [/*#__PURE__*/_jsx(Checkbox, {
|
|
100
|
+
indeterminate: indeterminate,
|
|
101
|
+
onChange: onCheckAllChange,
|
|
102
|
+
checked: checkAll,
|
|
103
|
+
children: "\u5168\u9009"
|
|
104
|
+
}), /*#__PURE__*/_jsx(CheckboxGroup, {
|
|
105
|
+
options: finalOptions,
|
|
106
|
+
value: innerValue,
|
|
107
|
+
onChange: handleCheckBoxChange
|
|
108
|
+
})]
|
|
109
|
+
})
|
|
110
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
111
|
+
className: "footer",
|
|
112
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
113
|
+
type: "text",
|
|
114
|
+
onClick: handleReset,
|
|
115
|
+
children: "\u91CD\u7F6E"
|
|
116
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
117
|
+
type: "primary",
|
|
118
|
+
onClick: handleConfirm,
|
|
119
|
+
children: "\u786E\u5B9A"
|
|
120
|
+
})]
|
|
121
|
+
})]
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
export default MultipleSelect;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
.tableMax-filter-multipleSelect {
|
|
2
|
+
width: 212px;
|
|
3
|
+
.header {
|
|
4
|
+
border-bottom: 1px solid @tableColor7;
|
|
5
|
+
padding: 8px 12px;
|
|
6
|
+
}
|
|
7
|
+
.body {
|
|
8
|
+
height: 220px;
|
|
9
|
+
overflow-y: auto;
|
|
10
|
+
padding: 4px 12px;
|
|
11
|
+
.loading {
|
|
12
|
+
height: 100%;
|
|
13
|
+
width: 100%;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
}
|
|
18
|
+
.ant-checkbox-group {
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
.ant-checkbox-wrapper {
|
|
22
|
+
line-height: 24px;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
.footer {
|
|
27
|
+
border-top: 1px solid @tableColor7;
|
|
28
|
+
padding: 8px 12px;
|
|
29
|
+
display: flex;
|
|
30
|
+
justify-content: space-between;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
type IProps = {
|
|
4
|
+
column: any;
|
|
5
|
+
onChange: (params: any) => void;
|
|
6
|
+
value: [number, number] | undefined;
|
|
7
|
+
onCloseFilterPanel?: () => void;
|
|
8
|
+
};
|
|
9
|
+
declare const NumberRange: React.FC<IProps>;
|
|
10
|
+
export default NumberRange;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { Button, InputNumber } from 'antd';
|
|
8
|
+
import React, { useState } from 'react';
|
|
9
|
+
import { noValue } from "../../../utils";
|
|
10
|
+
import "./index.less";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
var NumberRange = function NumberRange(props) {
|
|
14
|
+
var _column$getFacetedMin, _column$getFacetedMin2, _columnDef$cell, _column$getFacetedMin3, _column$getFacetedMin4, _columnDef$cell2;
|
|
15
|
+
var column = props.column,
|
|
16
|
+
onChange = props.onChange,
|
|
17
|
+
propsValue = props.value,
|
|
18
|
+
onCloseFilterPanel = props.onCloseFilterPanel;
|
|
19
|
+
var columnDef = column === null || column === void 0 ? void 0 : column.columnDef;
|
|
20
|
+
var _useState = useState(propsValue),
|
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
22
|
+
range = _useState2[0],
|
|
23
|
+
setRange = _useState2[1];
|
|
24
|
+
var handleConfirm = function handleConfirm() {
|
|
25
|
+
onChange(range);
|
|
26
|
+
onCloseFilterPanel();
|
|
27
|
+
};
|
|
28
|
+
var changeRange = function changeRange(newValue, type) {
|
|
29
|
+
if (type === 'min') {
|
|
30
|
+
var newMinValue = columnDef.unitsChangeFn && typeof newValue === 'number' ? columnDef.unitsChangeFn(newValue) : newValue;
|
|
31
|
+
setRange(function (old) {
|
|
32
|
+
if (noValue(newMinValue) && noValue(old === null || old === void 0 ? void 0 : old[1])) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return [newMinValue, old === null || old === void 0 ? void 0 : old[1]];
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
var newMaxValue = columnDef.unitsChangeFn && typeof newValue === 'number' ? columnDef.unitsChangeFn(newValue) : newValue;
|
|
39
|
+
setRange(function (old) {
|
|
40
|
+
if (noValue(old === null || old === void 0 ? void 0 : old[0]) && noValue(newMaxValue)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return [old === null || old === void 0 ? void 0 : old[0], newMaxValue];
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var handleReset = function handleReset() {
|
|
48
|
+
setRange(undefined);
|
|
49
|
+
onChange(undefined);
|
|
50
|
+
};
|
|
51
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
52
|
+
className: "table-filter-number-range-wrapper",
|
|
53
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
54
|
+
className: "table-filter-number-range-body",
|
|
55
|
+
children: [/*#__PURE__*/_jsx(InputNumber, {
|
|
56
|
+
placeholder: "".concat((_column$getFacetedMin = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin !== void 0 && _column$getFacetedMin[0] ? "(".concat((_column$getFacetedMin2 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin2 === void 0 ? void 0 : _column$getFacetedMin2[0], ")") : '请输入'),
|
|
57
|
+
onChange: function onChange(value) {
|
|
58
|
+
return changeRange(value, 'min');
|
|
59
|
+
},
|
|
60
|
+
value: range && columnDef.unitsChangeFn ? (_columnDef$cell = columnDef.cell) === null || _columnDef$cell === void 0 ? void 0 : _columnDef$cell.call(columnDef, {
|
|
61
|
+
getValue: function getValue() {
|
|
62
|
+
return range === null || range === void 0 ? void 0 : range[0];
|
|
63
|
+
}
|
|
64
|
+
}) : range === null || range === void 0 ? void 0 : range[0],
|
|
65
|
+
style: {
|
|
66
|
+
height: 32
|
|
67
|
+
}
|
|
68
|
+
}), /*#__PURE__*/_jsx("p", {
|
|
69
|
+
className: "split-wrapper",
|
|
70
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
71
|
+
className: "horizontal-line"
|
|
72
|
+
})
|
|
73
|
+
}), /*#__PURE__*/_jsx(InputNumber, {
|
|
74
|
+
placeholder: "".concat((_column$getFacetedMin3 = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin3 !== void 0 && _column$getFacetedMin3[1] ? "(".concat((_column$getFacetedMin4 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin4 === void 0 ? void 0 : _column$getFacetedMin4[1], ")") : '请输入'),
|
|
75
|
+
onChange: function onChange(value) {
|
|
76
|
+
return changeRange(value, 'max');
|
|
77
|
+
},
|
|
78
|
+
value: range && columnDef.unitsChangeFn ? (_columnDef$cell2 = columnDef.cell) === null || _columnDef$cell2 === void 0 ? void 0 : _columnDef$cell2.call(columnDef, {
|
|
79
|
+
getValue: function getValue() {
|
|
80
|
+
return range === null || range === void 0 ? void 0 : range[1];
|
|
81
|
+
}
|
|
82
|
+
}) : range === null || range === void 0 ? void 0 : range[1]
|
|
83
|
+
})]
|
|
84
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
85
|
+
className: "table-filter-number-range-footer",
|
|
86
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
87
|
+
type: "text",
|
|
88
|
+
onClick: handleReset,
|
|
89
|
+
children: "\u91CD\u7F6E"
|
|
90
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
91
|
+
type: "primary",
|
|
92
|
+
onClick: handleConfirm,
|
|
93
|
+
children: "\u786E\u5B9A"
|
|
94
|
+
})]
|
|
95
|
+
})]
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
export default NumberRange;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.table-filter-number-range-wrapper {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
.table-filter-number-range-body {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
width: 188px;
|
|
8
|
+
padding: 8px 12px;
|
|
9
|
+
.split-wrapper {
|
|
10
|
+
margin: 5px 0px;
|
|
11
|
+
display: flex;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
.horizontal-line {
|
|
14
|
+
height: 2px;
|
|
15
|
+
display: inline-block;
|
|
16
|
+
background: @tableColor4;
|
|
17
|
+
width: 12px;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
.table-filter-number-range-footer {
|
|
22
|
+
display: flex;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
border-top: 1px solid @tableColor4;
|
|
25
|
+
padding: 8px 12px;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import './index.less';
|
|
2
|
+
interface IProps {
|
|
3
|
+
value: string | number | undefined;
|
|
4
|
+
options: any[];
|
|
5
|
+
onChange: (value: string | number | undefined) => void;
|
|
6
|
+
onSearch: (value: string) => void;
|
|
7
|
+
isRemoteSearch: boolean;
|
|
8
|
+
loading: boolean;
|
|
9
|
+
onCloseFilterPanel: () => void;
|
|
10
|
+
}
|
|
11
|
+
declare const SingleSelect: ({ value, onChange, options, onSearch, isRemoteSearch, loading, onCloseFilterPanel, }: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default SingleSelect;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useUpdateEffect } from 'ahooks';
|
|
8
|
+
import { Button, Input, Spin } from 'antd';
|
|
9
|
+
import { useMemo, useState } from 'react';
|
|
10
|
+
import "./index.less";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
var SingleSelect = function SingleSelect(_ref) {
|
|
14
|
+
var _ref$value = _ref.value,
|
|
15
|
+
value = _ref$value === void 0 ? undefined : _ref$value,
|
|
16
|
+
onChange = _ref.onChange,
|
|
17
|
+
options = _ref.options,
|
|
18
|
+
onSearch = _ref.onSearch,
|
|
19
|
+
isRemoteSearch = _ref.isRemoteSearch,
|
|
20
|
+
loading = _ref.loading,
|
|
21
|
+
onCloseFilterPanel = _ref.onCloseFilterPanel;
|
|
22
|
+
// 内部state
|
|
23
|
+
var _useState = useState(value),
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
+
innerValue = _useState2[0],
|
|
26
|
+
setInnerValue = _useState2[1];
|
|
27
|
+
|
|
28
|
+
// 前端搜索输入值
|
|
29
|
+
var _useState3 = useState(''),
|
|
30
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
31
|
+
frontendSearchValue = _useState4[0],
|
|
32
|
+
setFrontendSearchValue = _useState4[1];
|
|
33
|
+
var handleClick = function handleClick(changedValue) {
|
|
34
|
+
console.log('changedValue :>> ', changedValue);
|
|
35
|
+
setInnerValue(changedValue);
|
|
36
|
+
};
|
|
37
|
+
var handleConfirm = function handleConfirm() {
|
|
38
|
+
onChange(innerValue);
|
|
39
|
+
onCloseFilterPanel();
|
|
40
|
+
};
|
|
41
|
+
var handleReset = function handleReset() {
|
|
42
|
+
setInnerValue(undefined);
|
|
43
|
+
onChange(undefined);
|
|
44
|
+
};
|
|
45
|
+
useUpdateEffect(function () {
|
|
46
|
+
// console.log('value :>> ', value);
|
|
47
|
+
setInnerValue(value);
|
|
48
|
+
}, [value]);
|
|
49
|
+
var handleInputChange = function handleInputChange(e) {
|
|
50
|
+
var value = e.target.value;
|
|
51
|
+
if (isRemoteSearch) {
|
|
52
|
+
onSearch(value);
|
|
53
|
+
} else {
|
|
54
|
+
setFrontendSearchValue(value);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// 最终的可选值
|
|
59
|
+
var finalOptions = useMemo(function () {
|
|
60
|
+
if (isRemoteSearch) {
|
|
61
|
+
return options;
|
|
62
|
+
}
|
|
63
|
+
var input = (frontendSearchValue !== null && frontendSearchValue !== void 0 ? frontendSearchValue : '').toUpperCase().trim();
|
|
64
|
+
return options.filter(function (option) {
|
|
65
|
+
var _option$label;
|
|
66
|
+
var optionFilterString = ('' + ((_option$label = option.label) !== null && _option$label !== void 0 ? _option$label : option.children)).toUpperCase().trim();
|
|
67
|
+
return optionFilterString.indexOf(input) !== -1;
|
|
68
|
+
});
|
|
69
|
+
}, [options, frontendSearchValue]);
|
|
70
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
71
|
+
className: "tableMax-filter-singleSelect",
|
|
72
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
73
|
+
className: "header",
|
|
74
|
+
children: /*#__PURE__*/_jsx(Input, {
|
|
75
|
+
placeholder: "\u8F93\u5165\u641C\u7D22",
|
|
76
|
+
onChange: handleInputChange
|
|
77
|
+
})
|
|
78
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
79
|
+
className: "body",
|
|
80
|
+
children: loading ? /*#__PURE__*/_jsx("div", {
|
|
81
|
+
className: "loading",
|
|
82
|
+
children: /*#__PURE__*/_jsx(Spin, {})
|
|
83
|
+
}) : finalOptions.map(function (option) {
|
|
84
|
+
var _option$label2;
|
|
85
|
+
return /*#__PURE__*/_jsx("div", {
|
|
86
|
+
className: "item ".concat(innerValue === option.value ? 'selected' : ''),
|
|
87
|
+
onClick: function onClick() {
|
|
88
|
+
return handleClick(option.value);
|
|
89
|
+
},
|
|
90
|
+
children: (_option$label2 = option.label) !== null && _option$label2 !== void 0 ? _option$label2 : option.children
|
|
91
|
+
}, option.value);
|
|
92
|
+
})
|
|
93
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
94
|
+
className: "footer",
|
|
95
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
96
|
+
type: "text",
|
|
97
|
+
onClick: handleReset,
|
|
98
|
+
children: "\u91CD\u7F6E"
|
|
99
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
100
|
+
type: "primary",
|
|
101
|
+
onClick: handleConfirm,
|
|
102
|
+
children: "\u786E\u5B9A"
|
|
103
|
+
})]
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
export default SingleSelect;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.tableMax-filter-singleSelect {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
width: 212px;
|
|
4
|
+
.header {
|
|
5
|
+
border-bottom: 1px solid @tableColor7;
|
|
6
|
+
padding: 8px 12px;
|
|
7
|
+
}
|
|
8
|
+
.body {
|
|
9
|
+
height: 220px;
|
|
10
|
+
overflow-y: auto;
|
|
11
|
+
padding: 4px 12px;
|
|
12
|
+
.loading {
|
|
13
|
+
height: 100%;
|
|
14
|
+
width: 100%;
|
|
15
|
+
display: flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
}
|
|
19
|
+
.item {
|
|
20
|
+
padding: 2px 4px;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
border-radius: 2px;
|
|
23
|
+
height: 20px;
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
line-height: 20px;
|
|
26
|
+
white-space: nowrap;
|
|
27
|
+
overflow: hidden;
|
|
28
|
+
text-overflow: ellipsis;
|
|
29
|
+
}
|
|
30
|
+
.item:hover {
|
|
31
|
+
background-color: @tableColor8;
|
|
32
|
+
}
|
|
33
|
+
.selected {
|
|
34
|
+
background-color: @tableColor8;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
.footer {
|
|
38
|
+
border-top: 1px solid @tableColor7;
|
|
39
|
+
padding: 8px 12px;
|
|
40
|
+
display: flex;
|
|
41
|
+
justify-content: space-between;
|
|
42
|
+
}
|
|
43
|
+
}
|
package/dist/components/TableMax/components/{ColumnFilter → ColumnFilterV2}/customFilterFns.js
RENAMED
|
@@ -4,7 +4,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
4
4
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
-
import { timeRangeFilter } from "./
|
|
7
|
+
import { timeRangeFilter } from "./DateRange/index";
|
|
8
8
|
|
|
9
9
|
// AutoComplete使用的模糊筛选
|
|
10
10
|
var fuzzyFilter = function fuzzyFilter(row, columnId, filterValue) {
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { TableMaxColumnType } from "../../type";
|
|
2
2
|
import { BuiltInFilterFn, Column } from '@tanstack/react-table';
|
|
3
3
|
import customFilterFns from './customFilterFns';
|
|
4
|
+
import './index.less';
|
|
4
5
|
export declare const defaultDateFormat = "YYYY-MM-DD";
|
|
5
6
|
export declare enum FilterType {
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated 此枚举值已废弃,用DateRange代替
|
|
9
|
+
*/
|
|
6
10
|
Date = "date",// 日期范围筛选
|
|
11
|
+
DateRange = "dateRange",// 日期范围筛选
|
|
7
12
|
SingleDate = "singleDate",// 单日期筛选
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated 此枚举值已废弃,用NumberRange代替
|
|
15
|
+
*/
|
|
8
16
|
Integer = "integer",// 数字范围筛选
|
|
17
|
+
NumberRange = "numberRange",// 数字范围筛选
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated 此枚举值已废弃,用SingleNumber代替
|
|
20
|
+
*/
|
|
9
21
|
SingleInteger = "singleInteger",// 数字筛选
|
|
22
|
+
SingleNumber = "singleNumber",// 数字筛选
|
|
10
23
|
SingleSelect = "singleSelect",// 单选
|
|
11
24
|
MultiSelect = "multiSelect",// 多选
|
|
12
25
|
AutoComplete = "autoComplete",// 自动补全
|
|
@@ -17,6 +30,7 @@ export type IFilterFnEnum = {
|
|
|
17
30
|
[key in FilterType]: FilterFnType;
|
|
18
31
|
};
|
|
19
32
|
export declare function setDefaultFilterFn(columns: TableMaxColumnType[]): TableMaxColumnType[];
|
|
20
|
-
export declare function
|
|
33
|
+
export declare function ColumnFilter({ column, manualFiltering }: {
|
|
21
34
|
column: Column<any, unknown>;
|
|
35
|
+
manualFiltering: boolean;
|
|
22
36
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
var _FILTER_FN_ENUM;
|
|
2
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
7
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
8
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
9
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
11
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
13
|
+
import { createPortal } from 'react-dom';
|
|
14
|
+
import { useConfig } from "../../../ConfigProvider";
|
|
15
|
+
import Filter from "./Filter";
|
|
16
|
+
import "./index.less";
|
|
17
|
+
|
|
18
|
+
// 日期筛选组件默认格式
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
21
|
+
export var defaultDateFormat = 'YYYY-MM-DD';
|
|
22
|
+
|
|
23
|
+
// 筛选类型
|
|
24
|
+
export var FilterType = /*#__PURE__*/function (FilterType) {
|
|
25
|
+
FilterType["Date"] = "date";
|
|
26
|
+
FilterType["DateRange"] = "dateRange";
|
|
27
|
+
FilterType["SingleDate"] = "singleDate";
|
|
28
|
+
FilterType["Integer"] = "integer";
|
|
29
|
+
FilterType["NumberRange"] = "numberRange";
|
|
30
|
+
FilterType["SingleInteger"] = "singleInteger";
|
|
31
|
+
FilterType["SingleNumber"] = "singleNumber";
|
|
32
|
+
FilterType["SingleSelect"] = "singleSelect";
|
|
33
|
+
FilterType["MultiSelect"] = "multiSelect";
|
|
34
|
+
FilterType["AutoComplete"] = "autoComplete";
|
|
35
|
+
FilterType["Input"] = "input";
|
|
36
|
+
return FilterType;
|
|
37
|
+
}({}); // 输入框
|
|
38
|
+
// 不同筛选类型需要特定的过滤函数
|
|
39
|
+
var FILTER_FN_ENUM = (_FILTER_FN_ENUM = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FILTER_FN_ENUM, FilterType.Date, 'timeRangeFilter'), FilterType.DateRange, 'timeRangeFilter'), FilterType.SingleDate, 'fuzzyFilter'), FilterType.MultiSelect, 'multiSelectFilter'), FilterType.Integer, 'numberRangeFilter'), FilterType.NumberRange, 'numberRangeFilter'), FilterType.SingleInteger, 'fuzzyFilter'), FilterType.SingleNumber, 'fuzzyFilter'), FilterType.SingleSelect, 'fuzzyFilter'), FilterType.AutoComplete, 'fuzzyFilter'), _defineProperty(_FILTER_FN_ENUM, FilterType.Input, 'fuzzyFilter'));
|
|
40
|
+
|
|
41
|
+
// 给columns配置填充默认的过滤函数
|
|
42
|
+
export function setDefaultFilterFn(columns) {
|
|
43
|
+
columns.forEach(function (column) {
|
|
44
|
+
if (column.filterType && !column.filterFn && FILTER_FN_ENUM[column.filterType]) {
|
|
45
|
+
// 当前列指定了过滤组件,但是没有指定过滤函数,在这里自动补上
|
|
46
|
+
column.filterFn = FILTER_FN_ENUM[column.filterType];
|
|
47
|
+
} else if (!column.filterType && !column.filterFn) {
|
|
48
|
+
// 默认使用MultiSelect组件的场景,加上过滤函数
|
|
49
|
+
column.filterFn = FILTER_FN_ENUM[FilterType.MultiSelect];
|
|
50
|
+
}
|
|
51
|
+
if (column.columns) {
|
|
52
|
+
setDefaultFilterFn(column.columns);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return columns;
|
|
56
|
+
}
|
|
57
|
+
export function ColumnFilter(_ref) {
|
|
58
|
+
var column = _ref.column,
|
|
59
|
+
manualFiltering = _ref.manualFiltering;
|
|
60
|
+
var _useConfig = useConfig(),
|
|
61
|
+
root = _useConfig.root;
|
|
62
|
+
var _useState = useState(false),
|
|
63
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
64
|
+
filterPanelVisible = _useState2[0],
|
|
65
|
+
setFilterPanelVisible = _useState2[1];
|
|
66
|
+
var _useState3 = useState(),
|
|
67
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
68
|
+
columnConfigStyle = _useState4[0],
|
|
69
|
+
setColumnConfigStyle = _useState4[1];
|
|
70
|
+
var filterPanelWrapperRef = useRef(null);
|
|
71
|
+
|
|
72
|
+
// 点击空白处关闭弹层
|
|
73
|
+
useEffect(function () {
|
|
74
|
+
var clickHandler = function clickHandler() {
|
|
75
|
+
// console.log('close :>> ');
|
|
76
|
+
setFilterPanelVisible(false);
|
|
77
|
+
};
|
|
78
|
+
if (filterPanelVisible) {
|
|
79
|
+
window.addEventListener('click', clickHandler);
|
|
80
|
+
}
|
|
81
|
+
return function () {
|
|
82
|
+
window.removeEventListener('click', clickHandler);
|
|
83
|
+
};
|
|
84
|
+
}, [filterPanelVisible]);
|
|
85
|
+
|
|
86
|
+
// 处理弹层位置
|
|
87
|
+
useLayoutEffect(function () {
|
|
88
|
+
if (filterPanelVisible && filterPanelWrapperRef.current) {
|
|
89
|
+
// console.log('useLayoutEffect', configWrapperRef.current.getBoundingClientRect(), window.innerHeight);
|
|
90
|
+
var _filterPanelWrapperRe = filterPanelWrapperRef.current.getBoundingClientRect(),
|
|
91
|
+
bottom = _filterPanelWrapperRe.bottom,
|
|
92
|
+
height = _filterPanelWrapperRe.height,
|
|
93
|
+
top = _filterPanelWrapperRe.top,
|
|
94
|
+
left = _filterPanelWrapperRe.left,
|
|
95
|
+
width = _filterPanelWrapperRe.width,
|
|
96
|
+
right = _filterPanelWrapperRe.right;
|
|
97
|
+
var btnHeight = 16; // 按钮高度
|
|
98
|
+
// 处理上下位置
|
|
99
|
+
if (bottom > window.innerHeight && top - btnHeight >= height) {
|
|
100
|
+
// 如果弹层在设置按钮下方被遮挡,不能完整展示 & 设置按钮上方可完整展示弹层 就把弹层展示到设置按钮上方
|
|
101
|
+
filterPanelWrapperRef.current.style.top = "".concat(top - height - btnHeight, "px");
|
|
102
|
+
}
|
|
103
|
+
// 处理左右位置
|
|
104
|
+
if (right > window.innerWidth) {
|
|
105
|
+
// 如果弹层右侧被遮挡,不能完整展示 & 左侧可完整展示弹层 就把弹层展示到设置按钮左侧
|
|
106
|
+
filterPanelWrapperRef.current.style.left = "".concat(window.innerWidth - 10, "px");
|
|
107
|
+
} else if (left < 0) {
|
|
108
|
+
// 如果弹层在设置按钮左侧被遮挡,不能完整展示,将弹层向右移动
|
|
109
|
+
filterPanelWrapperRef.current.style.left = "".concat(width + 10, "px");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}, [filterPanelVisible]);
|
|
113
|
+
|
|
114
|
+
// 点击设置按钮打开/关闭弹层
|
|
115
|
+
var onFilterIconClick = function onFilterIconClick(event) {
|
|
116
|
+
var _event$target;
|
|
117
|
+
var _ref2 = (event === null || event === void 0 || (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.getBoundingClientRect()) || {},
|
|
118
|
+
configRectRight = _ref2.right,
|
|
119
|
+
configRectBottom = _ref2.bottom;
|
|
120
|
+
setColumnConfigStyle({
|
|
121
|
+
left: configRectRight,
|
|
122
|
+
top: configRectBottom + 9
|
|
123
|
+
});
|
|
124
|
+
setTimeout(function () {
|
|
125
|
+
setFilterPanelVisible(!filterPanelVisible);
|
|
126
|
+
}, 0);
|
|
127
|
+
};
|
|
128
|
+
var handleClosePanel = useCallback(function () {
|
|
129
|
+
setFilterPanelVisible(false);
|
|
130
|
+
}, []);
|
|
131
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
132
|
+
children: [/*#__PURE__*/_jsx("i", {
|
|
133
|
+
className: "iconfont-table icon-table-filter filter-icon ".concat(!!column.getFilterValue() ? 'height-light-filter' : ''),
|
|
134
|
+
onClick: onFilterIconClick
|
|
135
|
+
}), filterPanelVisible ? /*#__PURE__*/createPortal( /*#__PURE__*/_jsx("div", {
|
|
136
|
+
ref: filterPanelWrapperRef,
|
|
137
|
+
className: "filter-panel-wrapper",
|
|
138
|
+
style: columnConfigStyle,
|
|
139
|
+
onClick: function onClick(e) {
|
|
140
|
+
return e.stopPropagation();
|
|
141
|
+
},
|
|
142
|
+
children: /*#__PURE__*/_jsx(Filter, {
|
|
143
|
+
column: column,
|
|
144
|
+
onCloseFilterPanel: handleClosePanel,
|
|
145
|
+
manualFiltering: manualFiltering
|
|
146
|
+
})
|
|
147
|
+
}), root ? document.querySelector(root) : document.body) : null]
|
|
148
|
+
});
|
|
149
|
+
}
|