Skip to content

Commit 5ee084a

Browse files
committed
fix: not reload img after change images
1 parent 4806e94 commit 5ee084a

File tree

2 files changed

+52
-14
lines changed

2 files changed

+52
-14
lines changed

src/ViewerCore.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export default (props: ViewerProps) => {
204204
index: activeIndex,
205205
}));
206206
}
207-
}, [activeIndex, visible]);
207+
}, [activeIndex, visible, images]);
208208

209209
function loadImg(currentActiveIndex, isReset = false) {
210210
dispatch(createAction(ACTION_TYPES.update, {

src/__tests__/viewer.test.tsx

+51-13
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ function $$(className) {
1414

1515
interface ViewerTesterProps {
1616
hasContainer?: boolean;
17+
onChangeImages?: () => ViewerProps['images'];
1718
}
1819

1920
class ViewerTester extends React.Component<ViewerTesterProps & ViewerProps, any> {
@@ -29,6 +30,15 @@ class ViewerTester extends React.Component<ViewerTesterProps & ViewerProps, any>
2930
this.state = {
3031
visible: false,
3132
activeIndex: 0,
33+
images: props.images || [{
34+
src: img,
35+
alt: 'lake',
36+
downloadUrl: '',
37+
}, {
38+
src: img2,
39+
alt: 'mountain',
40+
downloadUrl: '',
41+
}],
3242
};
3343
}
3444

@@ -44,27 +54,26 @@ class ViewerTester extends React.Component<ViewerTesterProps & ViewerProps, any>
4454
});
4555
}
4656

47-
render() {
48-
let images = [{
49-
src: img,
50-
alt: 'lake',
51-
downloadUrl: '',
52-
}, {
53-
src: img2,
54-
alt: 'mountain',
55-
downloadUrl: '',
56-
}];
57+
handleChangeImages = () => {
58+
if (this.props.onChangeImages) {
59+
this.setState({
60+
images: this.props.onChangeImages(),
61+
});
62+
}
63+
}
5764

58-
const { hasContainer, ...viewerProps } = this.props;
65+
render() {
66+
const { hasContainer, images, onChangeImages, ...viewerProps } = this.props;
5967

6068
return (
6169
<div>
6270
<button id="viewer-tester-open-btn" onClick={this.handleOpen}>open viewer</button>
6371
<button id="viewer-tester-change-btn" onClick={this.handleChangeActiveIndex}>change active index</button>
72+
<button id="viewer-tester-change-images-btn" onClick={this.handleChangeImages}>change images</button>
6473
<div id="container" ref={ref => { this.container = ref; }} style={{ width: '150px', height: '150px' }}></div>
6574
<Viewer
6675
visible={this.state.visible}
67-
images={images}
76+
images={this.state.images}
6877
activeIndex={this.state.activeIndex}
6978
container={hasContainer ? this.container : false}
7079
onClose={() => { this.setState({ visible: false }); }}
@@ -79,6 +88,14 @@ const EventEmitter = require('wolfy87-eventemitter');
7988

8089
const FAILED_IMG = 'fail_img';
8190

91+
let getImageSize = () => {
92+
return 100;
93+
};
94+
95+
function setGetImageSize(newFunc) {
96+
getImageSize = newFunc;
97+
}
98+
8299
class MockImage {
83100
source = '';
84101
width = 0;
@@ -90,7 +107,7 @@ class MockImage {
90107

91108
set src(value: string) {
92109
this.source = value;
93-
this.width = this.height = 100;
110+
this.width = this.height = getImageSize();
94111
if (this.source === FAILED_IMG) {
95112
this.ee.emitEvent('error');
96113
} else {
@@ -770,4 +787,25 @@ describe('Viewer', () => {
770787
$$('li[data-key=zoomOut]')[0].click();
771788
expect(getTransformValue(imgNode.style.transform).scaleX).toBe('0.88');
772789
});
790+
791+
it('reset img when change images', () => {
792+
viewerHelper.new({
793+
images: [{
794+
src: img,
795+
alt: 'lake',
796+
}],
797+
onChangeImages: () => {
798+
return [{
799+
src: img2,
800+
alt: 'mountain',
801+
}];
802+
},
803+
});
804+
805+
viewerHelper.open();
806+
expect($$('.react-viewer-img-details')[0].innerHTML).toBe('(100 x 100)');
807+
setGetImageSize(() => 200);
808+
wrapper.find('#viewer-tester-change-images-btn').simulate('click');
809+
expect($$('.react-viewer-img-details')[0].innerHTML).toBe('(200 x 200)');
810+
});
773811
});

0 commit comments

Comments
 (0)