Skip to content

Commit 824ecce

Browse files
fix: update
1 parent df15f86 commit 824ecce

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

assets/preview.less

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,12 @@
5858
height: 40px;
5959
color: #fff;
6060
background: rgba(0, 0, 0, 0.3);
61+
border: 0;
62+
padding: 0;
6163
border-radius: 9999px;
6264
transform: translateY(-50%);
6365
cursor: pointer;
66+
font: inherit;
6467

6568
&-disabled {
6669
cursor: default;
@@ -104,6 +107,10 @@
104107
&-action {
105108
color: #fff;
106109
cursor: pointer;
110+
border: 0;
111+
padding: 0;
112+
background: transparent;
113+
font: inherit;
107114

108115
&-disabled {
109116
cursor: default;

src/Image.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,20 @@ const ImageInternal: CompoundedComponent<ImageProps> = props => {
211211

212212
if (event.key === 'Enter' || event.key === ' ') {
213213
event.preventDefault();
214-
onPreview(event as any);
214+
215+
const rect = (event.target as HTMLDivElement).getBoundingClientRect();
216+
const left = rect.x + rect.width / 2;
217+
const top = rect.y + rect.height / 2;
218+
219+
if (groupContext) {
220+
groupContext.onPreview(imageId, src, left, top);
221+
} else {
222+
setMousePosition({
223+
x: left,
224+
y: top,
225+
});
226+
triggerPreviewOpen(true);
227+
}
215228
}
216229
};
217230

@@ -226,8 +239,13 @@ const ImageInternal: CompoundedComponent<ImageProps> = props => {
226239
onClick={canPreview ? onPreview : onClick}
227240
role={canPreview ? 'button' : otherProps.role}
228241
tabIndex={canPreview && otherProps.tabIndex == null ? 0 : otherProps.tabIndex}
229-
aria-label={canPreview ? (alt || 'Preview image') : otherProps['aria-label']}
230-
onKeyDown={onPreviewKeyDown}
242+
aria-label={
243+
canPreview ? (otherProps['aria-label'] ?? alt ?? 'Preview image') : otherProps['aria-label']
244+
}
245+
onKeyDown={event => {
246+
onPreviewKeyDown(event);
247+
(otherProps as any).onKeyDown?.(event);
248+
}}
231249
style={{
232250
width,
233251
height,

tests/preview.test.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,20 @@ describe('Preview', () => {
11621162
expect(document.querySelector('.rc-image-preview')).toBeTruthy();
11631163
});
11641164

1165+
it('Pressing Space on image wrapper should open preview', () => {
1166+
const { container } = render(<Image src="src" alt="keyboard open space" />);
1167+
1168+
const wrapper = container.querySelector('.rc-image') as HTMLElement;
1169+
wrapper.focus();
1170+
fireEvent.keyDown(wrapper, { key: ' ' });
1171+
1172+
act(() => {
1173+
jest.runAllTimers();
1174+
});
1175+
1176+
expect(document.querySelector('.rc-image-preview')).toBeTruthy();
1177+
});
1178+
11651179
it('Preview dialog should have role dialog and receive focus', () => {
11661180
render(<Image src="src" alt="dialog a11y" preview={{ open: true }} />);
11671181

0 commit comments

Comments
 (0)