Skip to content

Commit 9385659

Browse files
EmilyyyLiu刘欢gemini-code-assist[bot]
authored
refactor: Upgrade utils and replace useMergedState (#451)
* refactor: Upgrade utils and replace useMergedState * Update src/PreviewGroup.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * feat: use useEvent --------- Co-authored-by: 刘欢 <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 872e729 commit 9385659

File tree

3 files changed

+27
-23
lines changed

3 files changed

+27
-23
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"dependencies": {
4343
"@rc-component/portal": "^2.0.0",
4444
"@rc-component/motion": "^1.0.0",
45-
"@rc-component/util": "^1.0.0",
45+
"@rc-component/util": "^1.3.0",
4646
"classnames": "^2.2.6"
4747
},
4848
"devDependencies": {

src/Image.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import useMergedState from '@rc-component/util/lib/hooks/useMergedState';
1+
import useControlledState from '@rc-component/util/lib/hooks/useControlledState';
22
import classnames from 'classnames';
33
import * as React from 'react';
44
import { useContext, useMemo, useState } from 'react';
@@ -125,18 +125,18 @@ const ImageInternal: CompoundedComponent<ImageProps> = props => {
125125
...restProps
126126
}: PreviewConfig = preview && typeof preview === 'object' ? preview : {};
127127

128-
const coverPlacement = typeof cover === 'object' && (cover as CoverConfig).placement ?
129-
(cover as CoverConfig).placement || 'center' :
130-
'center';
128+
const coverPlacement =
129+
typeof cover === 'object' && (cover as CoverConfig).placement
130+
? (cover as CoverConfig).placement || 'center'
131+
: 'center';
131132

132-
const coverNode = typeof cover === 'object' && (cover as CoverConfig).coverNode ?
133-
(cover as CoverConfig).coverNode :
134-
cover as React.ReactNode;
133+
const coverNode =
134+
typeof cover === 'object' && (cover as CoverConfig).coverNode
135+
? (cover as CoverConfig).coverNode
136+
: (cover as React.ReactNode);
135137

136138
// ============================ Open ============================
137-
const [isShowPreview, setShowPreview] = useMergedState(!!previewOpen, {
138-
value: previewOpen,
139-
});
139+
const [isShowPreview, setShowPreview] = useControlledState(!!previewOpen, previewOpen);
140140

141141
const [mousePosition, setMousePosition] = useState<null | { x: number; y: number }>(null);
142142

@@ -249,7 +249,11 @@ const ImageInternal: CompoundedComponent<ImageProps> = props => {
249249
{/* Preview Click Mask */}
250250
{cover !== false && canPreview && (
251251
<div
252-
className={classnames(`${prefixCls}-cover`, classNames.cover, `${prefixCls}-cover-${coverPlacement}`)}
252+
className={classnames(
253+
`${prefixCls}-cover`,
254+
classNames.cover,
255+
`${prefixCls}-cover-${coverPlacement}`,
256+
)}
253257
style={{
254258
display: style?.display === 'none' ? 'none' : undefined,
255259
...styles.cover,

src/PreviewGroup.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import useMergedState from '@rc-component/util/lib/hooks/useMergedState';
1+
import useControlledState from '@rc-component/util/lib/hooks/useControlledState';
2+
import useEvent from '@rc-component/util/lib/hooks/useEvent';
23
import * as React from 'react';
34
import { useState } from 'react';
45
import type { ImgInfo } from './Image';
@@ -60,20 +61,19 @@ const Group: React.FC<PreviewGroupProps> = ({
6061

6162
// ========================= Preview ==========================
6263
// >>> Index
63-
const [current, setCurrent] = useMergedState(0, {
64-
value: currentIndex,
65-
});
64+
const [current, setCurrent] = useControlledState(0, currentIndex);
6665

6766
const [keepOpenIndex, setKeepOpenIndex] = useState(false);
6867

6968
// >>> Image
7069
const { src, ...imgCommonProps } = mergedItems[current]?.data || {};
7170
// >>> Visible
72-
const [isShowPreview, setShowPreview] = useMergedState(!!previewOpen, {
73-
value: previewOpen,
74-
onChange: val => {
75-
onOpenChange?.(val, { current });
76-
},
71+
const [isShowPreview, setShowPreview] = useControlledState(!!previewOpen, previewOpen);
72+
const triggerShowPreview = useEvent((next: boolean) => {
73+
setShowPreview(next);
74+
if (next !== isShowPreview) {
75+
onOpenChange?.(next, { current });
76+
}
7777
});
7878

7979
// >>> Position
@@ -87,7 +87,7 @@ const Group: React.FC<PreviewGroupProps> = ({
8787

8888
setCurrent(index < 0 ? 0 : index);
8989

90-
setShowPreview(true);
90+
triggerShowPreview(true);
9191
setMousePosition({ x: mouseX, y: mouseY });
9292

9393
setKeepOpenIndex(true);
@@ -114,7 +114,7 @@ const Group: React.FC<PreviewGroupProps> = ({
114114
};
115115

116116
const onPreviewClose = () => {
117-
setShowPreview(false);
117+
triggerShowPreview(false);
118118
setMousePosition(null);
119119
};
120120

0 commit comments

Comments
 (0)