Skip to content

Commit c819e34

Browse files
fix(ImageViewer): keep the icon always occupied (#1494)
* fix(ImageViewer): keep the icon always occupied * test: update unit case * chore: update common --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent d31e7e0 commit c819e34

File tree

3 files changed

+23
-34
lines changed

3 files changed

+23
-34
lines changed

src/image-viewer/__test__/index.test.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { describe, it, vi } from 'vitest';
55
import ImageViewer from '../image-viewer';
66
import { Swiper } from '../../swiper';
77
import { trigger, triggerZoom } from './touch';
8+
import { CloseIcon } from 'tdesign-icons-vue-next';
89

910
const images = ref([
1011
'https://imgcache.qq.com/open_proj/proj_qcloud_v2/rocket_images/1606728019829_yw760ok1jmpbep14i.png',
@@ -17,7 +18,7 @@ describe('ImageViewer', () => {
1718
it(':closeBtn', async () => {
1819
const wrapper = mount(<ImageViewer v-model:images={images.value} visible={true} closeBtn={false} />);
1920

20-
expect(wrapper.find('.t-image-viewer__nav-close').exists()).toBe(false);
21+
expect(wrapper.findComponent(CloseIcon).exists()).toBeFalsy();
2122
});
2223

2324
it(':images', async () => {
@@ -86,7 +87,7 @@ describe('ImageViewer', () => {
8687

8788
it(': delete', async () => {
8889
const wrapper = mount(<ImageViewer v-model:images={images.value} visible={true} delete-btn={true} />);
89-
90+
9091
await wrapper.find('.t-image-viewer__nav-delete').trigger('click');
9192
expect(wrapper.emitted()).toHaveProperty('delete');
9293
});

src/image-viewer/image-viewer.tsx

+19-31
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
import {
2-
computed,
3-
defineComponent,
4-
reactive,
5-
getCurrentInstance,
6-
h,
7-
Transition,
8-
ref,
9-
Ref,
10-
watch,
11-
nextTick,
12-
onUnmounted,
13-
} from 'vue';
1+
import { computed, defineComponent, reactive, h, Transition, ref, watch, nextTick, onUnmounted } from 'vue';
142
import { CloseIcon, DeleteIcon } from 'tdesign-icons-vue-next';
153

164
import config from '../config';
175
import props from './props';
186
import { useDefault, isBrowser, useGesture, DragState, PinchState } from '../shared';
197
import { useTNodeJSX } from '../hooks/tnode';
8+
import { usePrefixClass } from '../hooks/useClass';
209

2110
// inner components
2211
import { Swiper as TSwiper, SwiperItem as TSwiperItem } from '../swiper';
@@ -25,12 +14,11 @@ import { TdImageViewerProps } from './type';
2514
import { ImageInfo } from './image-viewer-interface';
2615

2716
const { prefix } = config;
28-
const name = `${prefix}-image-viewer`;
2917

3018
const TAP_TIME = 300;
3119

3220
export default defineComponent({
33-
name,
21+
name: `${prefix}-image-viewer`,
3422
components: {
3523
Transition,
3624
TSwiper,
@@ -40,6 +28,8 @@ export default defineComponent({
4028
props,
4129
emits: ['close', 'index-change', 'update:visible', 'update:modelValue', 'update:index', 'delete'],
4230
setup(props, { emit }) {
31+
const imageViewerClass = usePrefixClass('image-viewer');
32+
4333
const state = reactive({
4434
dblTapZooming: false, // double tap zooming
4535
zooming: false, // pinch zooming
@@ -393,11 +383,11 @@ export default defineComponent({
393383
<transition name="fade">
394384
{visible.value && (
395385
<div ref={rootRef} class={`${prefix}-image-viewer`}>
396-
<div class={`${name}__mask`} onClick={(e) => handleClose(e, 'overlay')} />
386+
<div class={`${imageViewerClass.value}__mask`} onClick={(e) => handleClose(e, 'overlay')} />
397387
<TSwiper
398388
ref={swiperRootRef}
399389
autoplay={false}
400-
class={`${name}__content`}
390+
class={`${imageViewerClass.value}__content`}
401391
height="100vh"
402392
defaultCurrent={currentIndex.value}
403393
disabled={disabled.value}
@@ -407,14 +397,14 @@ export default defineComponent({
407397
<TSwiperItem
408398
ref={(item: any) => (swiperItemRefs.value[index] = item)}
409399
key={index}
410-
class={`${name}__swiper-item`}
400+
class={`${imageViewerClass.value}__swiper-item`}
411401
style={`touch-action: none; align-items:${info.image.align};`}
412402
>
413403
{info.preload ? (
414404
<img
415405
src={info.image.url}
416406
style={`
417-
transform: ${index === state.touchIndex ? imageTransform.value : 'matrix(1, 0, 0, 1, 0, 0)'};
407+
transform: ${index === state.touchIndex ? imageTransform.value : 'matrix(1, 0, 0, 1, 0, 0)'};
418408
${imageTransitionDuration.value};`}
419409
onLoad={(event: Event) => onImgLoad(event, index)}
420410
onTransitionstart={(event: TransitionEvent) => {
@@ -434,22 +424,20 @@ export default defineComponent({
434424
</TSwiperItem>
435425
))}
436426
</TSwiper>
437-
<div class={`${name}__nav`}>
438-
{closeNode.value && (
439-
<div class={`${name}__nav-close`} onClick={(e) => handleClose(e, 'close-btn')}>
440-
{closeNode.value}
441-
</div>
442-
)}
427+
<div class={`${imageViewerClass.value}__nav`}>
428+
<div class={`${imageViewerClass.value}__nav-close`} onClick={(e) => handleClose(e, 'close-btn')}>
429+
{closeNode.value}
430+
</div>
431+
443432
{props.showIndex && (
444-
<div class={`${name}__nav-index`}>
433+
<div class={`${imageViewerClass.value}__nav-index`}>
445434
{`${Math.min((currentIndex.value ?? 0) + 1, props.images?.length)}/${props.images?.length}`}
446435
</div>
447436
)}
448-
{deleteNode.value && (
449-
<div class={`${name}__nav-delete`} onClick={handleDelete}>
450-
{deleteNode.value}
451-
</div>
452-
)}
437+
438+
<div class={`${imageViewerClass.value}__nav-delete`} onClick={handleDelete}>
439+
{deleteNode.value}
440+
</div>
453441
</div>
454442
</div>
455443
)}

0 commit comments

Comments
 (0)