@4399ywkf/design 1.3.12 → 2.1.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/MaxTokenSlider/index.d.ts +25 -0
- package/dist/MaxTokenSlider/index.js +148 -0
- package/dist/MaxTokenSlider/style.d.ts +6 -0
- package/dist/MaxTokenSlider/style.js +14 -0
- package/dist/Table/components/ColumnSetting/index.js +25 -35
- package/dist/Table/components/ColumnSetting/style.d.ts +16 -0
- package/dist/Table/components/ColumnSetting/style.js +19 -0
- package/dist/Table/components/EnumFilter/index.d.ts +8 -8
- package/dist/Table/components/EnumFilter/index.js +34 -36
- package/dist/Table/components/EnumFilter/style.d.ts +54 -0
- package/dist/Table/components/EnumFilter/style.js +58 -0
- package/dist/Table/components/Export/RadioMode.d.ts +1 -5
- package/dist/Table/components/Export/RadioMode.js +10 -11
- package/dist/Table/components/Export/index.js +160 -207
- package/dist/Table/components/Export/style.d.ts +15 -0
- package/dist/Table/components/Export/style.js +19 -0
- package/dist/Table/components/FilterDropdown/index.d.ts +7 -7
- package/dist/Table/components/FilterDropdown/index.js +6 -7
- package/dist/Table/components/FilterDropdown/style.d.ts +13 -0
- package/dist/Table/components/FilterDropdown/style.js +17 -0
- package/dist/Table/components/FilterKeys/index.d.ts +2 -2
- package/dist/Table/components/FilterKeys/index.js +51 -69
- package/dist/Table/components/FilterKeys/style.d.ts +29 -0
- package/dist/Table/components/FilterKeys/style.js +33 -0
- package/dist/Table/components/Reload/index.js +8 -21
- package/dist/Table/components/SearchInput/index.d.ts +3 -4
- package/dist/Table/components/SearchInput/index.js +50 -38
- package/dist/Table/components/SearchInput/style.d.ts +11 -0
- package/dist/Table/components/SearchInput/style.js +15 -0
- package/dist/Table/components/TableSize/index.js +7 -10
- package/dist/Table/components/TableTitle/index.d.ts +1 -1
- package/dist/Table/components/TableTitle/index.js +36 -38
- package/dist/Table/components/TableTitle/style.d.ts +25 -0
- package/dist/Table/components/TableTitle/style.js +29 -0
- package/dist/Table/context.d.ts +32 -0
- package/dist/Table/context.js +31 -0
- package/dist/Table/hooks/index.d.ts +8 -0
- package/dist/Table/hooks/index.js +8 -0
- package/dist/Table/hooks/useColumnsInit.d.ts +6 -0
- package/dist/Table/hooks/useColumnsInit.js +44 -0
- package/dist/Table/hooks/useEmptyText.d.ts +11 -0
- package/dist/Table/hooks/useEmptyText.js +34 -0
- package/dist/Table/hooks/usePagination.d.ts +9 -0
- package/dist/Table/hooks/usePagination.js +50 -0
- package/dist/Table/hooks/useQuerySnapshot.d.ts +6 -0
- package/dist/Table/hooks/useQuerySnapshot.js +63 -0
- package/dist/Table/hooks/useRowSelection.d.ts +11 -0
- package/dist/Table/hooks/useRowSelection.js +34 -0
- package/dist/Table/hooks/useSearchEffect.d.ts +9 -0
- package/dist/Table/hooks/useSearchEffect.js +48 -0
- package/dist/Table/hooks/useTableChange.d.ts +10 -0
- package/dist/Table/hooks/useTableChange.js +56 -0
- package/dist/Table/hooks/useTriggerSearch.d.ts +22 -0
- package/dist/Table/hooks/useTriggerSearch.js +130 -0
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.js +25 -1
- package/dist/Table/store/createStore.d.ts +2 -0
- package/dist/Table/store/createStore.js +30 -0
- package/dist/Table/store/hooks.d.ts +33 -0
- package/dist/Table/store/hooks.js +98 -0
- package/dist/Table/store/slices/column/actions.d.ts +9 -0
- package/dist/Table/store/slices/column/actions.js +10 -0
- package/dist/Table/store/slices/column/initialState.d.ts +2 -0
- package/dist/Table/store/slices/column/initialState.js +3 -0
- package/dist/Table/store/slices/persist/actions.d.ts +10 -0
- package/dist/Table/store/slices/persist/actions.js +28 -0
- package/dist/Table/store/slices/persist/api.d.ts +8 -0
- package/dist/Table/store/slices/persist/api.js +40 -0
- package/dist/Table/store/slices/query/actions.d.ts +32 -0
- package/dist/Table/store/slices/query/actions.js +129 -0
- package/dist/Table/store/slices/query/initialState.d.ts +2 -0
- package/dist/Table/store/slices/query/initialState.js +5 -0
- package/dist/Table/store/slices/request/actions.d.ts +8 -0
- package/dist/Table/store/slices/request/actions.js +14 -0
- package/dist/Table/store/slices/request/initialState.d.ts +2 -0
- package/dist/Table/store/slices/request/initialState.js +7 -0
- package/dist/Table/store/slices/ui/actions.d.ts +11 -0
- package/dist/Table/store/slices/ui/actions.js +15 -0
- package/dist/Table/store/slices/ui/initialState.d.ts +2 -0
- package/dist/Table/store/slices/ui/initialState.js +4 -0
- package/dist/Table/store/types.d.ts +79 -0
- package/dist/Table/store/types.js +1 -0
- package/dist/Table/style.d.ts +3 -0
- package/dist/Table/style.js +10 -0
- package/dist/Table/table.d.ts +2 -8
- package/dist/Table/table.js +160 -185
- package/dist/Table/type.d.ts +50 -64
- package/dist/Table/type.js +1 -3
- package/dist/Table/utils/Provide.d.ts +6 -9
- package/dist/Table/utils/Provide.js +4 -258
- package/dist/Table/utils/columnKey.d.ts +2 -0
- package/dist/Table/utils/columnKey.js +6 -0
- package/dist/Table/utils/getColumn.d.ts +7 -7
- package/dist/Table/utils/getColumnEnumProps.d.ts +4 -2
- package/dist/Table/utils/getColumnEnumProps.js +8 -6
- package/dist/Table/utils/getColumnMerge.d.ts +7 -2
- package/dist/Table/utils/getColumnMerge.js +3 -2
- package/dist/Table/utils/getDateColumn.d.ts +8 -7
- package/dist/Table/utils/getDateColumn.js +22 -68
- package/dist/Table/utils/getInputColumn.d.ts +2 -1
- package/dist/Table/utils/getInputColumn.js +2 -6
- package/dist/Table/utils/getSort.d.ts +4 -2
- package/dist/Table/utils/getSort.js +15 -12
- package/dist/Table/utils/index.d.ts +5 -20
- package/dist/Table/utils/index.js +16 -136
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/package.json +34 -25
- package/dist/Table/components/ColumnSetting/index.css +0 -4
- package/dist/Table/components/EnumFilter/index.css +0 -57
- package/dist/Table/components/FilterDropdown/index.css +0 -11
- package/dist/Table/components/FilterKeys/index.css +0 -19
- package/dist/Table/components/SearchInput/style.css +0 -10
- package/dist/Table/style.css +0 -42
|
@@ -6,45 +6,46 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
7
|
import { useDeepCompareEffect } from 'ahooks';
|
|
8
8
|
import _ from 'lodash-es';
|
|
9
|
-
import React, {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
9
|
+
import React, { useMemo, useState } from 'react';
|
|
10
|
+
import { useTableContext } from "../../context";
|
|
11
|
+
import { useColumns, useFilter } from "../../store/hooks";
|
|
12
|
+
import { genColumnKey } from "../../utils/columnKey";
|
|
13
13
|
import ColumnSetting from "../ColumnSetting";
|
|
14
14
|
import Export from "../Export";
|
|
15
15
|
import FilterKeys from "../FilterKeys";
|
|
16
16
|
import Reload from "../Reload";
|
|
17
17
|
import SearchInput from "../SearchInput";
|
|
18
18
|
import TableSize from "../TableSize";
|
|
19
|
+
import { useStyles } from "./style";
|
|
19
20
|
var TableTitle = function TableTitle(props) {
|
|
21
|
+
var _useStyles = useStyles(),
|
|
22
|
+
styles = _useStyles.styles;
|
|
20
23
|
var currentPageData = props.currentPageData;
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
var _useColumns = useColumns(),
|
|
25
|
+
propsColumns = _useColumns.columns;
|
|
26
|
+
var _useFilter = useFilter(),
|
|
27
|
+
filter = _useFilter.filter;
|
|
28
|
+
var ctx = useTableContext();
|
|
29
|
+
var propsTitle = ctx.title,
|
|
30
|
+
isShowToggleColumns = ctx.isShowToggleColumns,
|
|
31
|
+
isShowSize = ctx.isShowSize,
|
|
32
|
+
isShowExport = ctx.isShowExport,
|
|
33
|
+
isShowReload = ctx.isShowReload,
|
|
34
|
+
quickInputToolTipRender = ctx.quickInputToolTipRender,
|
|
35
|
+
quickInputPlaceholder = ctx.quickInputPlaceholder;
|
|
30
36
|
var _useState = useState([]),
|
|
31
37
|
_useState2 = _slicedToArray(_useState, 2),
|
|
32
38
|
searchKeys = _useState2[0],
|
|
33
39
|
setSearchKeys = _useState2[1];
|
|
34
|
-
// const [filterKeys, setFilterKeys] = useState<{ key: string; value: string[] }[]>([]);
|
|
35
|
-
|
|
36
|
-
var store = useContext(StoreContext);
|
|
37
|
-
var _useStore = useStore(store),
|
|
38
|
-
queryData = _useStore.queryData;
|
|
39
40
|
useDeepCompareEffect(function () {
|
|
40
41
|
var keys = [];
|
|
41
|
-
propsColumns.
|
|
42
|
+
propsColumns.forEach(function (column, index) {
|
|
42
43
|
if (column.quickFilter) {
|
|
43
44
|
var _column$dataIndex;
|
|
44
45
|
var columnKey = genColumnKey(column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : (_column$dataIndex = column.dataIndex) === null || _column$dataIndex === void 0 ? void 0 : _column$dataIndex.toString()), index);
|
|
45
46
|
keys.push({
|
|
46
47
|
key: columnKey,
|
|
47
|
-
title: column.title
|
|
48
|
+
title: typeof column.title === 'function' ? columnKey : column.title
|
|
48
49
|
});
|
|
49
50
|
}
|
|
50
51
|
});
|
|
@@ -53,32 +54,29 @@ var TableTitle = function TableTitle(props) {
|
|
|
53
54
|
var renderTitle = useMemo(function () {
|
|
54
55
|
if (!propsTitle) return undefined;
|
|
55
56
|
if (typeof propsTitle === 'function') {
|
|
56
|
-
return propsTitle(currentPageData);
|
|
57
|
+
return propsTitle(currentPageData !== null && currentPageData !== void 0 ? currentPageData : []);
|
|
57
58
|
}
|
|
58
59
|
if (typeof propsTitle === 'string') {
|
|
59
60
|
return propsTitle;
|
|
60
61
|
}
|
|
61
62
|
return undefined;
|
|
62
|
-
}, [propsTitle]);
|
|
63
|
+
}, [propsTitle, currentPageData]);
|
|
63
64
|
var filterKeys = useMemo(function () {
|
|
64
|
-
if (_.isEmpty(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}, [queryData.filter]);
|
|
65
|
+
if (_.isEmpty(filter)) return [];
|
|
66
|
+
return Object.keys(filter).map(function (o) {
|
|
67
|
+
return {
|
|
68
|
+
key: o,
|
|
69
|
+
value: filter[o].value
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}, [filter]);
|
|
75
73
|
if (!propsTitle && searchKeys.length <= 0 && !isShowToggleColumns && !isShowSize && !isShowExport && !isShowReload && filterKeys.length <= 0) {
|
|
76
74
|
return undefined;
|
|
77
75
|
}
|
|
78
76
|
return /*#__PURE__*/React.createElement("div", {
|
|
79
|
-
className:
|
|
77
|
+
className: styles.title
|
|
80
78
|
}, /*#__PURE__*/React.createElement("div", null, renderTitle), /*#__PURE__*/React.createElement("div", {
|
|
81
|
-
className:
|
|
79
|
+
className: styles.right
|
|
82
80
|
}, filterKeys.length > 0 && /*#__PURE__*/React.createElement(FilterKeys, {
|
|
83
81
|
data: filterKeys
|
|
84
82
|
}), searchKeys.length > 0 && /*#__PURE__*/React.createElement(SearchInput, {
|
|
@@ -86,11 +84,11 @@ var TableTitle = function TableTitle(props) {
|
|
|
86
84
|
quickInputToolTipRender: quickInputToolTipRender,
|
|
87
85
|
quickInputPlaceholder: quickInputPlaceholder
|
|
88
86
|
}), isShowReload && /*#__PURE__*/React.createElement("div", {
|
|
89
|
-
className:
|
|
87
|
+
className: styles.toolbarItem
|
|
90
88
|
}, /*#__PURE__*/React.createElement(Reload, null)), isShowSize && /*#__PURE__*/React.createElement("div", {
|
|
91
|
-
className:
|
|
89
|
+
className: styles.toolbarItem
|
|
92
90
|
}, /*#__PURE__*/React.createElement(TableSize, null)), isShowToggleColumns && /*#__PURE__*/React.createElement("div", {
|
|
93
|
-
className:
|
|
91
|
+
className: styles.toolbarItem
|
|
94
92
|
}, /*#__PURE__*/React.createElement(ColumnSetting, null)), /*#__PURE__*/React.createElement(Export, null)));
|
|
95
93
|
};
|
|
96
94
|
export default TableTitle;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const useStyles: (props?: unknown) => import("antd-style").ReturnStyles<{
|
|
2
|
+
title: {
|
|
3
|
+
padding: string;
|
|
4
|
+
display: "flex";
|
|
5
|
+
flexDirection: "row";
|
|
6
|
+
justifyContent: "space-between";
|
|
7
|
+
};
|
|
8
|
+
right: {
|
|
9
|
+
display: "flex";
|
|
10
|
+
flex: number;
|
|
11
|
+
justifyContent: "flex-end";
|
|
12
|
+
alignItems: "center";
|
|
13
|
+
gap: number;
|
|
14
|
+
};
|
|
15
|
+
toolbarItem: {
|
|
16
|
+
marginBlock: number;
|
|
17
|
+
marginInline: number;
|
|
18
|
+
color: string;
|
|
19
|
+
fontSize: number;
|
|
20
|
+
cursor: "pointer";
|
|
21
|
+
'&:hover': {
|
|
22
|
+
color: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createStyles } from 'antd-style';
|
|
2
|
+
export var useStyles = createStyles(function (_ref) {
|
|
3
|
+
var token = _ref.token;
|
|
4
|
+
return {
|
|
5
|
+
title: {
|
|
6
|
+
padding: "".concat(token.paddingXS, "px 0"),
|
|
7
|
+
display: 'flex',
|
|
8
|
+
flexDirection: 'row',
|
|
9
|
+
justifyContent: 'space-between'
|
|
10
|
+
},
|
|
11
|
+
right: {
|
|
12
|
+
display: 'flex',
|
|
13
|
+
flex: 1,
|
|
14
|
+
justifyContent: 'flex-end',
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
gap: token.marginXS
|
|
17
|
+
},
|
|
18
|
+
toolbarItem: {
|
|
19
|
+
marginBlock: 0,
|
|
20
|
+
marginInline: token.marginXXS,
|
|
21
|
+
color: token.colorTextSecondary,
|
|
22
|
+
fontSize: token.fontSizeLG,
|
|
23
|
+
cursor: 'pointer',
|
|
24
|
+
'&:hover': {
|
|
25
|
+
color: token.colorPrimary
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ExportParams, RichColumn } from './type';
|
|
3
|
+
import type { QuerySnapshot } from './store/types';
|
|
4
|
+
export interface TableContextValue {
|
|
5
|
+
columns: RichColumn<unknown>[];
|
|
6
|
+
title?: (data: readonly unknown[]) => React.ReactNode;
|
|
7
|
+
dataSource?: unknown[];
|
|
8
|
+
isShowToggleColumns?: boolean;
|
|
9
|
+
isShowSize?: boolean;
|
|
10
|
+
isShowExport?: boolean | ExportParams;
|
|
11
|
+
isShowReload?: boolean;
|
|
12
|
+
quickInputToolTipRender?: (v: unknown[]) => React.ReactNode;
|
|
13
|
+
quickInputPlaceholder?: (v: unknown[]) => string;
|
|
14
|
+
rowSelection?: Record<string, unknown>;
|
|
15
|
+
request?: (params: Record<string, unknown>) => Promise<{
|
|
16
|
+
data: unknown[];
|
|
17
|
+
total?: number;
|
|
18
|
+
success?: boolean;
|
|
19
|
+
message?: string;
|
|
20
|
+
}>;
|
|
21
|
+
manualRequest: boolean;
|
|
22
|
+
params?: Record<string, unknown>;
|
|
23
|
+
onSearch?: (payload: QuerySnapshot) => void;
|
|
24
|
+
onRequestError?: (error: Error) => void;
|
|
25
|
+
renderRequestError?: (error: Error) => React.ReactNode;
|
|
26
|
+
renderRequestEmpty?: () => React.ReactNode;
|
|
27
|
+
triggerSearch: () => Promise<void>;
|
|
28
|
+
reload: () => Promise<void>;
|
|
29
|
+
reset: () => void;
|
|
30
|
+
}
|
|
31
|
+
export declare const TableContext: React.Context<TableContextValue>;
|
|
32
|
+
export declare const useTableContext: () => TableContextValue;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
5
|
+
import { createContext, useContext } from 'react';
|
|
6
|
+
var noop = function noop() {};
|
|
7
|
+
var noopAsync = /*#__PURE__*/function () {
|
|
8
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
9
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
10
|
+
while (1) switch (_context.prev = _context.next) {
|
|
11
|
+
case 0:
|
|
12
|
+
case "end":
|
|
13
|
+
return _context.stop();
|
|
14
|
+
}
|
|
15
|
+
}, _callee);
|
|
16
|
+
}));
|
|
17
|
+
return function noopAsync() {
|
|
18
|
+
return _ref.apply(this, arguments);
|
|
19
|
+
};
|
|
20
|
+
}();
|
|
21
|
+
var defaultValue = {
|
|
22
|
+
columns: [],
|
|
23
|
+
manualRequest: false,
|
|
24
|
+
triggerSearch: noopAsync,
|
|
25
|
+
reload: noopAsync,
|
|
26
|
+
reset: noop
|
|
27
|
+
};
|
|
28
|
+
export var TableContext = /*#__PURE__*/createContext(defaultValue);
|
|
29
|
+
export var useTableContext = function useTableContext() {
|
|
30
|
+
return useContext(TableContext);
|
|
31
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { useQuerySnapshot } from './useQuerySnapshot';
|
|
2
|
+
export { usePagination } from './usePagination';
|
|
3
|
+
export { useColumnsInit } from './useColumnsInit';
|
|
4
|
+
export { useSearchEffect } from './useSearchEffect';
|
|
5
|
+
export { useTriggerSearch } from './useTriggerSearch';
|
|
6
|
+
export { useTableChange } from './useTableChange';
|
|
7
|
+
export { useRowSelection } from './useRowSelection';
|
|
8
|
+
export { useEmptyText } from './useEmptyText';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { useQuerySnapshot } from "./useQuerySnapshot";
|
|
2
|
+
export { usePagination } from "./usePagination";
|
|
3
|
+
export { useColumnsInit } from "./useColumnsInit";
|
|
4
|
+
export { useSearchEffect } from "./useSearchEffect";
|
|
5
|
+
export { useTriggerSearch } from "./useTriggerSearch";
|
|
6
|
+
export { useTableChange } from "./useTableChange";
|
|
7
|
+
export { useRowSelection } from "./useRowSelection";
|
|
8
|
+
export { useEmptyText } from "./useEmptyText";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useDeepCompareEffect } from 'ahooks';
|
|
2
|
+
import { useContext, useRef } from 'react';
|
|
3
|
+
import { useStore } from 'zustand';
|
|
4
|
+
import { genColumnKey } from "../utils/columnKey";
|
|
5
|
+
import { StoreContext } from "../utils/Provide";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 在组件挂载时,根据 columns 配置初始化默认的 filter、sort、columnSetting。
|
|
9
|
+
* 仅执行一次(通过 ref 标记)。
|
|
10
|
+
*/
|
|
11
|
+
export function useColumnsInit(columns, storageName) {
|
|
12
|
+
var store = useContext(StoreContext);
|
|
13
|
+
var setFilter = useStore(store, function (s) {
|
|
14
|
+
return s.setFilter;
|
|
15
|
+
});
|
|
16
|
+
var setSortOrder = useStore(store, function (s) {
|
|
17
|
+
return s.setSortOrder;
|
|
18
|
+
});
|
|
19
|
+
var setColumnSetting = useStore(store, function (s) {
|
|
20
|
+
return s.setColumnSetting;
|
|
21
|
+
});
|
|
22
|
+
var initialized = useRef(false);
|
|
23
|
+
useDeepCompareEffect(function () {
|
|
24
|
+
if (initialized.current || !columns) return;
|
|
25
|
+
initialized.current = true;
|
|
26
|
+
var settingList = [];
|
|
27
|
+
columns.forEach(function (col, index) {
|
|
28
|
+
var _col$dataIndex;
|
|
29
|
+
var key = genColumnKey(col.key || (Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : (_col$dataIndex = col.dataIndex) === null || _col$dataIndex === void 0 ? void 0 : _col$dataIndex.toString()), index);
|
|
30
|
+
if (col.defaultFilteredValue) setFilter(key, col.defaultFilteredValue);
|
|
31
|
+
if (col.filteredValue) setFilter(key, col.filteredValue);
|
|
32
|
+
if (col.defaultSortOrder) setSortOrder(key, col.defaultSortOrder);
|
|
33
|
+
if (col.sortOrder) setSortOrder(key, col.sortOrder);
|
|
34
|
+
settingList.push({
|
|
35
|
+
key: key,
|
|
36
|
+
disabled: col.disable,
|
|
37
|
+
hidden: col.hidden
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
if (!storageName || !localStorage.getItem("".concat(storageName, "_columns"))) {
|
|
41
|
+
setColumnSetting(settingList);
|
|
42
|
+
}
|
|
43
|
+
}, [columns, storageName, setFilter, setSortOrder, setColumnSetting]);
|
|
44
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 根据 request 状态派生 locale.emptyText。
|
|
4
|
+
* 优先展示错误态 → 空态自定义 → 默认。
|
|
5
|
+
*/
|
|
6
|
+
export declare function useEmptyText(options: {
|
|
7
|
+
request?: unknown;
|
|
8
|
+
renderRequestError?: (error: Error) => React.ReactNode;
|
|
9
|
+
renderRequestEmpty?: () => React.ReactNode;
|
|
10
|
+
defaultEmptyText?: React.ReactNode;
|
|
11
|
+
}): React.ReactNode;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Empty } from 'antd';
|
|
2
|
+
import React, { useContext, useMemo } from 'react';
|
|
3
|
+
import { useStore } from 'zustand';
|
|
4
|
+
import { StoreContext } from "../utils/Provide";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 根据 request 状态派生 locale.emptyText。
|
|
8
|
+
* 优先展示错误态 → 空态自定义 → 默认。
|
|
9
|
+
*/
|
|
10
|
+
export function useEmptyText(options) {
|
|
11
|
+
var request = options.request,
|
|
12
|
+
renderRequestError = options.renderRequestError,
|
|
13
|
+
renderRequestEmpty = options.renderRequestEmpty,
|
|
14
|
+
defaultEmptyText = options.defaultEmptyText;
|
|
15
|
+
var store = useContext(StoreContext);
|
|
16
|
+
var requestError = useStore(store, function (s) {
|
|
17
|
+
return s.requestError;
|
|
18
|
+
});
|
|
19
|
+
var requestDataLength = useStore(store, function (s) {
|
|
20
|
+
return s.requestDataSource.length;
|
|
21
|
+
});
|
|
22
|
+
return useMemo(function () {
|
|
23
|
+
if (!request) return defaultEmptyText;
|
|
24
|
+
if (requestError) {
|
|
25
|
+
return renderRequestError ? renderRequestError(requestError) : /*#__PURE__*/React.createElement(Empty, {
|
|
26
|
+
description: requestError.message
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (requestDataLength === 0 && renderRequestEmpty) {
|
|
30
|
+
return renderRequestEmpty();
|
|
31
|
+
}
|
|
32
|
+
return defaultEmptyText;
|
|
33
|
+
}, [request, requestError, renderRequestError, requestDataLength, renderRequestEmpty, defaultEmptyText]);
|
|
34
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TablePaginationConfig } from 'antd/es/table';
|
|
2
|
+
/**
|
|
3
|
+
* 纯派生 hook:从 store(offset/limit) + props 计算分页配置。
|
|
4
|
+
*
|
|
5
|
+
* 不包含任何初始化副作用——初始化由 table.tsx 的 useLayoutEffect 负责:
|
|
6
|
+
* 1. readLocalData 从 localStorage 恢复 offset/limit
|
|
7
|
+
* 2. 如果未命中缓存,由 initPagination 从 props 初始化
|
|
8
|
+
*/
|
|
9
|
+
export declare function usePagination(propsPagination: TablePaginationConfig | false | undefined, total: number): TablePaginationConfig | false | undefined;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
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); }
|
|
7
|
+
import { useContext } from 'react';
|
|
8
|
+
import { useStore } from 'zustand';
|
|
9
|
+
import { StoreContext } from "../utils/Provide";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 纯派生 hook:从 store(offset/limit) + props 计算分页配置。
|
|
13
|
+
*
|
|
14
|
+
* 不包含任何初始化副作用——初始化由 table.tsx 的 useLayoutEffect 负责:
|
|
15
|
+
* 1. readLocalData 从 localStorage 恢复 offset/limit
|
|
16
|
+
* 2. 如果未命中缓存,由 initPagination 从 props 初始化
|
|
17
|
+
*/
|
|
18
|
+
export function usePagination(propsPagination, total) {
|
|
19
|
+
var _propsPagination$show;
|
|
20
|
+
var store = useContext(StoreContext);
|
|
21
|
+
var limit = useStore(store, function (s) {
|
|
22
|
+
return s.limit;
|
|
23
|
+
});
|
|
24
|
+
var offset = useStore(store, function (s) {
|
|
25
|
+
return s.offset;
|
|
26
|
+
});
|
|
27
|
+
var setPagination = useStore(store, function (s) {
|
|
28
|
+
return s.setPagination;
|
|
29
|
+
});
|
|
30
|
+
if (propsPagination === false) return false;
|
|
31
|
+
var pageSize = limit !== null && limit !== void 0 ? limit : 20;
|
|
32
|
+
var current = typeof offset === 'number' && pageSize > 0 ? Math.floor(offset / pageSize) + 1 : 1;
|
|
33
|
+
return _objectSpread(_objectSpread({
|
|
34
|
+
showTotal: function showTotal(t) {
|
|
35
|
+
return "\u5171\u6709 ".concat(t, " \u6761\u8BB0\u5F55");
|
|
36
|
+
},
|
|
37
|
+
total: total,
|
|
38
|
+
showSizeChanger: _typeof(propsPagination) === 'object' ? (_propsPagination$show = propsPagination.showSizeChanger) !== null && _propsPagination$show !== void 0 ? _propsPagination$show : true : true
|
|
39
|
+
}, _typeof(propsPagination) === 'object' ? propsPagination : {}), {}, {
|
|
40
|
+
current: current,
|
|
41
|
+
pageSize: pageSize,
|
|
42
|
+
onChange: function onChange(page, newPageSize) {
|
|
43
|
+
setPagination(page, newPageSize);
|
|
44
|
+
if (_typeof(propsPagination) === 'object') {
|
|
45
|
+
var _propsPagination$onCh;
|
|
46
|
+
(_propsPagination$onCh = propsPagination.onChange) === null || _propsPagination$onCh === void 0 || _propsPagination$onCh.call(propsPagination, page, newPageSize);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useContext, useMemo } from 'react';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
3
|
+
import { StoreContext } from "../utils/Provide";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 从 store 订阅各个查询字段并组合为稳定的 QuerySnapshot。
|
|
7
|
+
* 每个字段独立订阅,避免整体对象导致的无效渲染。
|
|
8
|
+
*/
|
|
9
|
+
export function useQuerySnapshot() {
|
|
10
|
+
var store = useContext(StoreContext);
|
|
11
|
+
var defaultPageSize = useStore(store, function (s) {
|
|
12
|
+
return s.defaultPageSize;
|
|
13
|
+
});
|
|
14
|
+
var defaultCurrent = useStore(store, function (s) {
|
|
15
|
+
return s.defaultCurrent;
|
|
16
|
+
});
|
|
17
|
+
var offset = useStore(store, function (s) {
|
|
18
|
+
return s.offset;
|
|
19
|
+
});
|
|
20
|
+
var limit = useStore(store, function (s) {
|
|
21
|
+
return s.limit;
|
|
22
|
+
});
|
|
23
|
+
var search = useStore(store, function (s) {
|
|
24
|
+
return s.search;
|
|
25
|
+
});
|
|
26
|
+
var filter = useStore(store, function (s) {
|
|
27
|
+
return s.filter;
|
|
28
|
+
});
|
|
29
|
+
var sort = useStore(store, function (s) {
|
|
30
|
+
return s.sort;
|
|
31
|
+
});
|
|
32
|
+
var order = useStore(store, function (s) {
|
|
33
|
+
return s.order;
|
|
34
|
+
});
|
|
35
|
+
var multipleSort = useStore(store, function (s) {
|
|
36
|
+
return s.multipleSort;
|
|
37
|
+
});
|
|
38
|
+
var total = useStore(store, function (s) {
|
|
39
|
+
return s.total;
|
|
40
|
+
});
|
|
41
|
+
var size = useStore(store, function (s) {
|
|
42
|
+
return s.size;
|
|
43
|
+
});
|
|
44
|
+
var storageName = useStore(store, function (s) {
|
|
45
|
+
return s.storageName;
|
|
46
|
+
});
|
|
47
|
+
return useMemo(function () {
|
|
48
|
+
return {
|
|
49
|
+
defaultPageSize: defaultPageSize,
|
|
50
|
+
defaultCurrent: defaultCurrent,
|
|
51
|
+
offset: offset,
|
|
52
|
+
limit: limit,
|
|
53
|
+
search: search,
|
|
54
|
+
filter: filter,
|
|
55
|
+
sort: sort,
|
|
56
|
+
order: order,
|
|
57
|
+
multipleSort: multipleSort,
|
|
58
|
+
total: total,
|
|
59
|
+
size: size,
|
|
60
|
+
storageName: storageName
|
|
61
|
+
};
|
|
62
|
+
}, [defaultPageSize, defaultCurrent, offset, limit, search, filter, sort, order, multipleSort, total, size, storageName]);
|
|
63
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
/**
|
|
3
|
+
* 合并外部 rowSelection props 与 store 中的 selectedRowKeys,
|
|
4
|
+
* 返回可直接传给 antd Table 的 rowSelection 配置。
|
|
5
|
+
*/
|
|
6
|
+
export declare function useRowSelection(propsRowSelection?: Record<string, unknown>): {
|
|
7
|
+
selectedRowKeys: import("react").Key[];
|
|
8
|
+
onChange: (nextKeys: React.Key[], selectedRows: unknown[], info: {
|
|
9
|
+
type: 'single' | 'multiple' | 'all' | 'none' | 'invert';
|
|
10
|
+
}) => void;
|
|
11
|
+
} | undefined;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
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); }
|
|
7
|
+
import { useContext, useMemo } from 'react';
|
|
8
|
+
import { useStore } from 'zustand';
|
|
9
|
+
import { StoreContext } from "../utils/Provide";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 合并外部 rowSelection props 与 store 中的 selectedRowKeys,
|
|
13
|
+
* 返回可直接传给 antd Table 的 rowSelection 配置。
|
|
14
|
+
*/
|
|
15
|
+
export function useRowSelection(propsRowSelection) {
|
|
16
|
+
var store = useContext(StoreContext);
|
|
17
|
+
var selectedRowKeys = useStore(store, function (s) {
|
|
18
|
+
return s.selectedRowKeys;
|
|
19
|
+
});
|
|
20
|
+
var setSelectedRowKeys = useStore(store, function (s) {
|
|
21
|
+
return s.setSelectedRowKeys;
|
|
22
|
+
});
|
|
23
|
+
return useMemo(function () {
|
|
24
|
+
if (!propsRowSelection) return undefined;
|
|
25
|
+
var propsOnChange = propsRowSelection.onChange;
|
|
26
|
+
return _objectSpread(_objectSpread({}, propsRowSelection), {}, {
|
|
27
|
+
selectedRowKeys: selectedRowKeys,
|
|
28
|
+
onChange: function onChange(nextKeys, selectedRows, info) {
|
|
29
|
+
setSelectedRowKeys(nextKeys);
|
|
30
|
+
propsOnChange === null || propsOnChange === void 0 || propsOnChange(nextKeys, selectedRows, info);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}, [propsRowSelection, selectedRowKeys, setSelectedRowKeys]);
|
|
34
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 监听查询参数变化,自动触发 triggerSearch。
|
|
3
|
+
* 用 JSON.stringify 对比避免引用不稳定导致的多余请求。
|
|
4
|
+
*/
|
|
5
|
+
export declare function useSearchEffect(triggerSearch: () => Promise<void>, options: {
|
|
6
|
+
request?: unknown;
|
|
7
|
+
manualRequest: boolean;
|
|
8
|
+
params?: Record<string, unknown>;
|
|
9
|
+
}): void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { useContext, useEffect, useRef } from 'react';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
3
|
+
import { StoreContext } from "../utils/Provide";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 监听查询参数变化,自动触发 triggerSearch。
|
|
7
|
+
* 用 JSON.stringify 对比避免引用不稳定导致的多余请求。
|
|
8
|
+
*/
|
|
9
|
+
export function useSearchEffect(triggerSearch, options) {
|
|
10
|
+
var request = options.request,
|
|
11
|
+
manualRequest = options.manualRequest,
|
|
12
|
+
params = options.params;
|
|
13
|
+
var store = useContext(StoreContext);
|
|
14
|
+
var storeLimit = useStore(store, function (s) {
|
|
15
|
+
return s.limit;
|
|
16
|
+
});
|
|
17
|
+
var storeOffset = useStore(store, function (s) {
|
|
18
|
+
return s.offset;
|
|
19
|
+
});
|
|
20
|
+
var storeOrder = useStore(store, function (s) {
|
|
21
|
+
return s.order;
|
|
22
|
+
});
|
|
23
|
+
var storeFilter = useStore(store, function (s) {
|
|
24
|
+
return s.filter;
|
|
25
|
+
});
|
|
26
|
+
var storeSearch = useStore(store, function (s) {
|
|
27
|
+
return s.search;
|
|
28
|
+
});
|
|
29
|
+
var manualRequested = useStore(store, function (s) {
|
|
30
|
+
return s.manualRequested;
|
|
31
|
+
});
|
|
32
|
+
var prevKeyRef = useRef('');
|
|
33
|
+
useEffect(function () {
|
|
34
|
+
if (storeLimit === undefined) return;
|
|
35
|
+
if (request && manualRequest && !manualRequested) return;
|
|
36
|
+
var key = JSON.stringify({
|
|
37
|
+
limit: storeLimit,
|
|
38
|
+
offset: storeOffset,
|
|
39
|
+
order: storeOrder,
|
|
40
|
+
filter: storeFilter,
|
|
41
|
+
search: storeSearch,
|
|
42
|
+
params: params
|
|
43
|
+
});
|
|
44
|
+
if (prevKeyRef.current === key) return;
|
|
45
|
+
prevKeyRef.current = key;
|
|
46
|
+
triggerSearch();
|
|
47
|
+
}, [storeLimit, storeOffset, storeOrder, storeFilter, storeSearch, params, request, manualRequest, manualRequested, triggerSearch]);
|
|
48
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TablePaginationConfig } from 'antd';
|
|
2
|
+
import type { FilterValue, SorterResult } from 'antd/es/table/interface';
|
|
3
|
+
import type { RichColumn } from '../type';
|
|
4
|
+
/**
|
|
5
|
+
* 返回 antd Table 的 onChange 处理函数,
|
|
6
|
+
* 根据 action 类型分发到对应的 store action。
|
|
7
|
+
*/
|
|
8
|
+
export declare function useTableChange(columns: RichColumn<unknown>[]): (pageConfig: TablePaginationConfig, filters: Record<string, FilterValue | null>, sorter: SorterResult<unknown> | SorterResult<unknown>[], extra: {
|
|
9
|
+
action: string;
|
|
10
|
+
}) => void;
|