@chaomingd/hooks 0.0.34
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/LICENSE +21 -0
- package/README.md +23 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/useDragAndDrop/index.d.ts +35 -0
- package/dist/esm/useDragAndDrop/index.js +193 -0
- package/dist/esm/useDragAndDrop/index.less +29 -0
- package/dist/esm/useEditModal/index.d.ts +56 -0
- package/dist/esm/useEditModal/index.js +166 -0
- package/dist/esm/useEffectWithTarget/index.d.ts +2 -0
- package/dist/esm/useEffectWithTarget/index.js +36 -0
- package/dist/esm/useLatestState/index.d.ts +8 -0
- package/dist/esm/useLatestState/index.js +36 -0
- package/dist/esm/useListLayout/index.d.ts +20 -0
- package/dist/esm/useListLayout/index.js +112 -0
- package/dist/esm/usePagination/constant.d.ts +2 -0
- package/dist/esm/usePagination/constant.js +2 -0
- package/dist/esm/usePagination/index.d.ts +14 -0
- package/dist/esm/usePagination/index.js +184 -0
- package/dist/esm/usePagination/type.d.ts +68 -0
- package/dist/esm/usePagination/type.js +1 -0
- package/dist/esm/usePagination/utils.d.ts +1 -0
- package/dist/esm/usePagination/utils.js +8 -0
- package/dist/esm/useResizer/index.d.ts +37 -0
- package/dist/esm/useResizer/index.js +173 -0
- package/dist/esm/useResponsive/index.d.ts +44 -0
- package/dist/esm/useResponsive/index.js +94 -0
- package/dist/esm/useSelectionList/index.d.ts +13 -0
- package/dist/esm/useSelectionList/index.js +49 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.js +112 -0
- package/dist/lib/useDragAndDrop/index.d.ts +35 -0
- package/dist/lib/useDragAndDrop/index.js +191 -0
- package/dist/lib/useDragAndDrop/index.less +29 -0
- package/dist/lib/useEditModal/index.d.ts +56 -0
- package/dist/lib/useEditModal/index.js +160 -0
- package/dist/lib/useEffectWithTarget/index.d.ts +2 -0
- package/dist/lib/useEffectWithTarget/index.js +37 -0
- package/dist/lib/useLatestState/index.d.ts +8 -0
- package/dist/lib/useLatestState/index.js +29 -0
- package/dist/lib/useListLayout/index.d.ts +20 -0
- package/dist/lib/useListLayout/index.js +116 -0
- package/dist/lib/usePagination/constant.d.ts +2 -0
- package/dist/lib/usePagination/constant.js +8 -0
- package/dist/lib/usePagination/index.d.ts +14 -0
- package/dist/lib/usePagination/index.js +157 -0
- package/dist/lib/usePagination/type.d.ts +68 -0
- package/dist/lib/usePagination/type.js +5 -0
- package/dist/lib/usePagination/utils.d.ts +1 -0
- package/dist/lib/usePagination/utils.js +14 -0
- package/dist/lib/useResizer/index.d.ts +37 -0
- package/dist/lib/useResizer/index.js +168 -0
- package/dist/lib/useResponsive/index.d.ts +44 -0
- package/dist/lib/useResponsive/index.js +88 -0
- package/dist/lib/useSelectionList/index.d.ts +13 -0
- package/dist/lib/useSelectionList/index.js +45 -0
- package/package.json +39 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
declare class ResizerStore {
|
|
3
|
+
updator: (state: IResizeStoreState) => void;
|
|
4
|
+
state: IResizeStoreState;
|
|
5
|
+
constructor(updator: (state: IResizeStoreState) => void, baseDelta?: IResizerStoreConfig);
|
|
6
|
+
setState(state: Partial<IResizeStoreState>): void;
|
|
7
|
+
}
|
|
8
|
+
type TMinMaxDelta = Pick<IConfig, 'minDeltaX' | 'maxDeltaX' | 'minDeltaY' | 'maxDeltaY'>;
|
|
9
|
+
export interface IConfig {
|
|
10
|
+
firstUpdate?: boolean;
|
|
11
|
+
baseDeltaX?: number;
|
|
12
|
+
baseDeltaY?: number;
|
|
13
|
+
minDeltaX?: number;
|
|
14
|
+
maxDeltaX?: number;
|
|
15
|
+
minDeltaY?: number;
|
|
16
|
+
maxDeltaY?: number;
|
|
17
|
+
getMinMaxDelta?: (state: IResizeStoreState) => Partial<TMinMaxDelta>;
|
|
18
|
+
direction?: 'left' | 'top' | 'right' | 'bottom';
|
|
19
|
+
elRef: MutableRefObject<HTMLElement | null>;
|
|
20
|
+
resizerStore?: ReturnType<typeof useResizerStore>;
|
|
21
|
+
updator?: (state: IResizeStoreState) => any;
|
|
22
|
+
resizingChange?: (resizing: boolean) => void;
|
|
23
|
+
}
|
|
24
|
+
interface IDeltaRect {
|
|
25
|
+
deltaX: number;
|
|
26
|
+
deltaY: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function useResizer(config: IConfig): ResizerStore;
|
|
29
|
+
export interface IResizeStoreState extends IDeltaRect {
|
|
30
|
+
resizing: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface IResizerStoreConfig {
|
|
33
|
+
baseDeltaX?: number;
|
|
34
|
+
baseDeltaY?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function useResizerStore(baseDelta: IResizerStoreConfig): ResizerStore;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useResizer = useResizer;
|
|
7
|
+
exports.useResizerStore = useResizerStore;
|
|
8
|
+
var _utils = require("@chaomingd/utils");
|
|
9
|
+
var _ahooks = require("ahooks");
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _useEffectWithTarget = require("../useEffectWithTarget");
|
|
12
|
+
class ResizerStore {
|
|
13
|
+
state = {
|
|
14
|
+
deltaX: 0,
|
|
15
|
+
deltaY: 0,
|
|
16
|
+
resizing: false
|
|
17
|
+
};
|
|
18
|
+
constructor(updator, baseDelta) {
|
|
19
|
+
this.updator = updator;
|
|
20
|
+
if (baseDelta) {
|
|
21
|
+
this.state.deltaX = baseDelta.baseDeltaX || 0;
|
|
22
|
+
this.state.deltaY = baseDelta.baseDeltaY || 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
setState(state) {
|
|
26
|
+
this.state = {
|
|
27
|
+
...this.state,
|
|
28
|
+
...state
|
|
29
|
+
};
|
|
30
|
+
this.updator(this.state);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function getMinOrMaxDelta(config, state) {
|
|
34
|
+
const delta = {
|
|
35
|
+
...config
|
|
36
|
+
};
|
|
37
|
+
if (config.getMinMaxDelta) {
|
|
38
|
+
Object.assign(delta, config.getMinMaxDelta(state) || {});
|
|
39
|
+
}
|
|
40
|
+
return delta;
|
|
41
|
+
}
|
|
42
|
+
function strictDelta(delta, minMaxDelta) {
|
|
43
|
+
if (minMaxDelta.maxDeltaX !== undefined) {
|
|
44
|
+
if (delta.deltaX !== undefined) {
|
|
45
|
+
delta.deltaX = Math.min(delta.deltaX, minMaxDelta.maxDeltaX);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (minMaxDelta.maxDeltaY !== undefined) {
|
|
49
|
+
if (delta.deltaY !== undefined) {
|
|
50
|
+
delta.deltaY = Math.min(delta.deltaY, minMaxDelta.maxDeltaY);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (minMaxDelta.minDeltaX !== undefined) {
|
|
54
|
+
if (delta.deltaX !== undefined) {
|
|
55
|
+
delta.deltaX = Math.max(delta.deltaX, minMaxDelta.minDeltaX);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (minMaxDelta.minDeltaY !== undefined) {
|
|
59
|
+
if (delta.deltaY !== undefined) {
|
|
60
|
+
delta.deltaY = Math.max(delta.deltaY, minMaxDelta.minDeltaY);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return delta;
|
|
64
|
+
}
|
|
65
|
+
function useResizer(config) {
|
|
66
|
+
const {
|
|
67
|
+
baseDeltaX = 0,
|
|
68
|
+
baseDeltaY = 0,
|
|
69
|
+
direction,
|
|
70
|
+
resizerStore,
|
|
71
|
+
elRef
|
|
72
|
+
} = config;
|
|
73
|
+
const updator = (0, _ahooks.useUpdate)();
|
|
74
|
+
const innerResizerStore = (0, _ahooks.useCreation)(() => {
|
|
75
|
+
return resizerStore || new ResizerStore(config.updator || updator, config);
|
|
76
|
+
}, []);
|
|
77
|
+
innerResizerStore.updator = config.updator || updator;
|
|
78
|
+
const configRef = (0, _react.useRef)(config);
|
|
79
|
+
configRef.current = config;
|
|
80
|
+
const mousedownClientRef = (0, _react.useRef)({
|
|
81
|
+
clientX: 0,
|
|
82
|
+
clientY: 0
|
|
83
|
+
});
|
|
84
|
+
const deltaRef = (0, _react.useRef)({
|
|
85
|
+
deltaX: baseDeltaX,
|
|
86
|
+
deltaY: baseDeltaY
|
|
87
|
+
});
|
|
88
|
+
(0, _useEffectWithTarget.useEffectWithTarget)(() => {
|
|
89
|
+
let offMouseDown;
|
|
90
|
+
let cancelThrottleFunc;
|
|
91
|
+
if (elRef.current) {
|
|
92
|
+
offMouseDown = (0, _utils.listen)(elRef.current, 'mousedown', e => {
|
|
93
|
+
cancelThrottleFunc = handlerResizerMouseDown({
|
|
94
|
+
e,
|
|
95
|
+
mousedownClientRef,
|
|
96
|
+
store: innerResizerStore,
|
|
97
|
+
deltaRef,
|
|
98
|
+
configRef
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// 第一次调用
|
|
103
|
+
if (configRef.current.firstUpdate) {
|
|
104
|
+
innerResizerStore.setState({});
|
|
105
|
+
}
|
|
106
|
+
return () => {
|
|
107
|
+
offMouseDown && offMouseDown();
|
|
108
|
+
cancelThrottleFunc && cancelThrottleFunc();
|
|
109
|
+
};
|
|
110
|
+
}, elRef, [baseDeltaX, baseDeltaY, innerResizerStore, direction, resizerStore], true);
|
|
111
|
+
return resizerStore || innerResizerStore;
|
|
112
|
+
}
|
|
113
|
+
function handlerResizerMouseDown({
|
|
114
|
+
e,
|
|
115
|
+
configRef,
|
|
116
|
+
mousedownClientRef,
|
|
117
|
+
store,
|
|
118
|
+
deltaRef
|
|
119
|
+
}) {
|
|
120
|
+
mousedownClientRef.current = (0, _utils.pick)(e, ['clientX', 'clientY']);
|
|
121
|
+
const deltaX = store.state.deltaX;
|
|
122
|
+
const deltaY = store.state.deltaY;
|
|
123
|
+
const direction = configRef.current.direction || 'left';
|
|
124
|
+
const isHorizantal = direction === 'left' || direction === 'right';
|
|
125
|
+
const dir = ['left', 'top'].indexOf(direction) !== -1 ? -1 : 1;
|
|
126
|
+
store.setState({
|
|
127
|
+
resizing: true
|
|
128
|
+
});
|
|
129
|
+
const minMaxDelta = getMinOrMaxDelta(configRef.current, store.state);
|
|
130
|
+
configRef.current.resizingChange?.(store.state.resizing);
|
|
131
|
+
const throttleMouseMoveRes = (0, _utils.requestAnimationFrameThrottle)({
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
133
|
+
service: e => {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
if (isHorizantal) {
|
|
136
|
+
deltaRef.current.deltaX = e.clientX - mousedownClientRef.current.clientX;
|
|
137
|
+
} else {
|
|
138
|
+
deltaRef.current.deltaY = e.clientY - mousedownClientRef.current.clientY;
|
|
139
|
+
}
|
|
140
|
+
const newDelta = strictDelta(isHorizantal ? {
|
|
141
|
+
deltaX: deltaX + deltaRef.current.deltaX * dir
|
|
142
|
+
} : {
|
|
143
|
+
deltaY: deltaY + deltaRef.current.deltaY * dir
|
|
144
|
+
}, minMaxDelta);
|
|
145
|
+
store.setState(newDelta);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
const cancelThrottleFunc = throttleMouseMoveRes.cancel;
|
|
149
|
+
const offMouseMove = (0, _utils.listen)(document, 'mousemove', throttleMouseMoveRes.run);
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
151
|
+
const offMouseUp = (0, _utils.listen)(document, 'mouseup', e => {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
offMouseMove();
|
|
154
|
+
offMouseUp();
|
|
155
|
+
store.setState({
|
|
156
|
+
resizing: false
|
|
157
|
+
});
|
|
158
|
+
configRef.current.resizingChange?.(store.state.resizing);
|
|
159
|
+
});
|
|
160
|
+
return cancelThrottleFunc;
|
|
161
|
+
}
|
|
162
|
+
function useResizerStore(baseDelta) {
|
|
163
|
+
const updator = (0, _ahooks.useUpdate)();
|
|
164
|
+
const resizerStore = (0, _ahooks.useCreation)(() => {
|
|
165
|
+
return new ResizerStore(updator, baseDelta);
|
|
166
|
+
}, []);
|
|
167
|
+
return resizerStore;
|
|
168
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
export interface IResponsiveConfigItem<TData = any> {
|
|
3
|
+
key: string;
|
|
4
|
+
val: number;
|
|
5
|
+
minWidth?: number;
|
|
6
|
+
maxWidth?: number;
|
|
7
|
+
data: TData;
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
export interface IUseResponseParams<TData = any> {
|
|
11
|
+
mediaQuery?: IResponsiveConfigItem<TData>[];
|
|
12
|
+
onChange?: (item: IResponsiveConfigItem<TData>) => void;
|
|
13
|
+
enable?: boolean;
|
|
14
|
+
containerRef?: MutableRefObject<HTMLElement | null>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @examples
|
|
18
|
+
* ```ts
|
|
19
|
+
// window resize
|
|
20
|
+
const { matchedItem } = useResponsive({
|
|
21
|
+
mediaQuery: [
|
|
22
|
+
{ key: 'small', maxWidth: 760 },
|
|
23
|
+
{ key: 'middle', minWidth: 761, maxWidth: 1440 },
|
|
24
|
+
{ key: 'big', minWidth: 1441 }
|
|
25
|
+
],
|
|
26
|
+
onChange: (matchedItem) => {}
|
|
27
|
+
});
|
|
28
|
+
// dom resize
|
|
29
|
+
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
30
|
+
const { matchedItem } = useResponsive({
|
|
31
|
+
containerRef,
|
|
32
|
+
mediaQuery: [
|
|
33
|
+
{ key: 'small', maxWidth: 760 },
|
|
34
|
+
{ key: 'middle', minWidth: 761, maxWidth: 1440 },
|
|
35
|
+
{ key: 'big', minWidth: 1441 }
|
|
36
|
+
],
|
|
37
|
+
onChange: (matchedItem) => {}
|
|
38
|
+
});
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function useResponsive<TData = any>(params: IUseResponseParams<TData>): {
|
|
42
|
+
mediaQueryMatchedItem: IResponsiveConfigItem<TData> | null;
|
|
43
|
+
matchMedia: (this: unknown) => void;
|
|
44
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useResponsive = useResponsive;
|
|
7
|
+
var _utils = require("@chaomingd/utils");
|
|
8
|
+
var _ahooks = require("ahooks");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _useEffectWithTarget = require("../useEffectWithTarget");
|
|
11
|
+
/**
|
|
12
|
+
* @examples
|
|
13
|
+
* ```ts
|
|
14
|
+
// window resize
|
|
15
|
+
const { matchedItem } = useResponsive({
|
|
16
|
+
mediaQuery: [
|
|
17
|
+
{ key: 'small', maxWidth: 760 },
|
|
18
|
+
{ key: 'middle', minWidth: 761, maxWidth: 1440 },
|
|
19
|
+
{ key: 'big', minWidth: 1441 }
|
|
20
|
+
],
|
|
21
|
+
onChange: (matchedItem) => {}
|
|
22
|
+
});
|
|
23
|
+
// dom resize
|
|
24
|
+
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
25
|
+
const { matchedItem } = useResponsive({
|
|
26
|
+
containerRef,
|
|
27
|
+
mediaQuery: [
|
|
28
|
+
{ key: 'small', maxWidth: 760 },
|
|
29
|
+
{ key: 'middle', minWidth: 761, maxWidth: 1440 },
|
|
30
|
+
{ key: 'big', minWidth: 1441 }
|
|
31
|
+
],
|
|
32
|
+
onChange: (matchedItem) => {}
|
|
33
|
+
});
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
function useResponsive(params) {
|
|
38
|
+
const [mediaQueryMatchedItem, setMatchedItem] = (0, _react.useState)(null);
|
|
39
|
+
const paramsRef = (0, _ahooks.useLatest)(params);
|
|
40
|
+
const currDataRef = (0, _react.useRef)(null);
|
|
41
|
+
const matchMedia = (0, _ahooks.useMemoizedFn)(() => {
|
|
42
|
+
if (!paramsRef.current.enable || !paramsRef.current?.mediaQuery) return;
|
|
43
|
+
let width;
|
|
44
|
+
if (params.containerRef?.current) {
|
|
45
|
+
width = params.containerRef.current.getBoundingClientRect().width;
|
|
46
|
+
} else {
|
|
47
|
+
width = window.innerWidth;
|
|
48
|
+
}
|
|
49
|
+
const mediaQuery = paramsRef.current.mediaQuery;
|
|
50
|
+
let matchItem = null;
|
|
51
|
+
if (mediaQuery) {
|
|
52
|
+
for (let i = 0; i < mediaQuery.length; i++) {
|
|
53
|
+
const item = mediaQuery[i];
|
|
54
|
+
if (width >= (item.minWidth || 0) && width <= (item.maxWidth || Infinity)) {
|
|
55
|
+
matchItem = item;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!matchItem) {
|
|
60
|
+
matchItem = mediaQuery[0];
|
|
61
|
+
}
|
|
62
|
+
if (matchItem && !(0, _utils.isSameObject)(currDataRef.current, matchItem)) {
|
|
63
|
+
currDataRef.current = matchItem;
|
|
64
|
+
setMatchedItem(matchItem);
|
|
65
|
+
paramsRef.current.onChange?.(matchItem);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
(0, _useEffectWithTarget.useEffectWithTarget)(() => {
|
|
70
|
+
matchMedia();
|
|
71
|
+
let offResize;
|
|
72
|
+
if (params.containerRef?.current) {
|
|
73
|
+
offResize = (0, _utils.resizeObserver)({
|
|
74
|
+
el: params.containerRef.current,
|
|
75
|
+
onResize: matchMedia
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
offResize = (0, _utils.listen)(window, 'resize', matchMedia);
|
|
79
|
+
}
|
|
80
|
+
return () => {
|
|
81
|
+
offResize();
|
|
82
|
+
};
|
|
83
|
+
}, params.containerRef, [], true);
|
|
84
|
+
return {
|
|
85
|
+
mediaQueryMatchedItem,
|
|
86
|
+
matchMedia
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface IConfig<T = any> {
|
|
3
|
+
dataList?: T[];
|
|
4
|
+
listKey?: string;
|
|
5
|
+
getKey?: (item: T) => string;
|
|
6
|
+
}
|
|
7
|
+
export declare function useSelectionList<TData = any>({ dataList, listKey, getKey, }: IConfig<TData>): {
|
|
8
|
+
selectedKeys: string[];
|
|
9
|
+
selectedListKeys: string[];
|
|
10
|
+
selectedListItems: TData[];
|
|
11
|
+
changeSelectedListKeys: import("react").Dispatch<import("react").SetStateAction<string[]>>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSelectionList = useSelectionList;
|
|
7
|
+
var _utils = require("@chaomingd/utils");
|
|
8
|
+
var _ahooks = require("ahooks");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
const DEFAULT_LIST_KEY = 'key';
|
|
11
|
+
function useSelectionList({
|
|
12
|
+
dataList,
|
|
13
|
+
listKey,
|
|
14
|
+
getKey
|
|
15
|
+
}) {
|
|
16
|
+
const [selectedKeys, changeSelectedListKeys] = (0, _react.useState)([]);
|
|
17
|
+
const getKeyRef = (0, _ahooks.useLatest)(getKey);
|
|
18
|
+
const selectedListData = (0, _react.useMemo)(() => {
|
|
19
|
+
if (!dataList || !dataList.length) {
|
|
20
|
+
return {
|
|
21
|
+
selectedKeys,
|
|
22
|
+
selectedListKeys: [],
|
|
23
|
+
selectedListItems: [],
|
|
24
|
+
changeSelectedListKeys
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const getKeyFunc = getKeyRef.current ? getKeyRef.current : item => item && item[listKey || DEFAULT_LIST_KEY];
|
|
28
|
+
const listDatMap = (0, _utils.arrayToMap)(dataList, getKeyFunc);
|
|
29
|
+
const selectedListKeys = [];
|
|
30
|
+
const selectedListItems = [];
|
|
31
|
+
selectedKeys.forEach(key => {
|
|
32
|
+
if (listDatMap[key]) {
|
|
33
|
+
selectedListKeys.push(key);
|
|
34
|
+
selectedListItems.push(listDatMap[key]);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
selectedKeys,
|
|
39
|
+
selectedListKeys,
|
|
40
|
+
selectedListItems,
|
|
41
|
+
changeSelectedListKeys
|
|
42
|
+
};
|
|
43
|
+
}, [dataList, listKey, getKeyRef, selectedKeys]);
|
|
44
|
+
return selectedListData;
|
|
45
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chaomingd/hooks",
|
|
3
|
+
"version": "0.0.34",
|
|
4
|
+
"description": "hooks of laf",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "dist/lib/index.js",
|
|
8
|
+
"module": "dist/esm/index.js",
|
|
9
|
+
"typings": "dist/esm/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"compiled"
|
|
13
|
+
],
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@types/use-sync-external-store": "^0.0.6",
|
|
16
|
+
"use-sync-external-store": "^1.2.2",
|
|
17
|
+
"@chaomingd/utils": "0.0.17",
|
|
18
|
+
"@chaomingd/store": "2.0.7"
|
|
19
|
+
},
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"ahooks": ">=3.0.0",
|
|
22
|
+
"antd": "^5.18.2",
|
|
23
|
+
"react": ">=16.9.0",
|
|
24
|
+
"react-dom": ">=16.9.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"father": "^4.5.0"
|
|
28
|
+
},
|
|
29
|
+
"authors": [],
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public",
|
|
32
|
+
"registry": "https://registry.npmjs.org/"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "father build",
|
|
36
|
+
"build:deps": "father prebundle",
|
|
37
|
+
"dev": "father dev"
|
|
38
|
+
}
|
|
39
|
+
}
|