@@ -14,6 +14,7 @@ function $$(className) {
14
14
15
15
interface ViewerTesterProps {
16
16
hasContainer ?: boolean ;
17
+ onChangeImages ?: ( ) => ViewerProps [ 'images' ] ;
17
18
}
18
19
19
20
class ViewerTester extends React . Component < ViewerTesterProps & ViewerProps , any > {
@@ -29,6 +30,15 @@ class ViewerTester extends React.Component<ViewerTesterProps & ViewerProps, any>
29
30
this . state = {
30
31
visible : false ,
31
32
activeIndex : 0 ,
33
+ images : props . images || [ {
34
+ src : img ,
35
+ alt : 'lake' ,
36
+ downloadUrl : '' ,
37
+ } , {
38
+ src : img2 ,
39
+ alt : 'mountain' ,
40
+ downloadUrl : '' ,
41
+ } ] ,
32
42
} ;
33
43
}
34
44
@@ -44,27 +54,26 @@ class ViewerTester extends React.Component<ViewerTesterProps & ViewerProps, any>
44
54
} ) ;
45
55
}
46
56
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
+ }
57
64
58
- const { hasContainer, ...viewerProps } = this . props ;
65
+ render ( ) {
66
+ const { hasContainer, images, onChangeImages, ...viewerProps } = this . props ;
59
67
60
68
return (
61
69
< div >
62
70
< button id = "viewer-tester-open-btn" onClick = { this . handleOpen } > open viewer</ button >
63
71
< 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 >
64
73
< div id = "container" ref = { ref => { this . container = ref ; } } style = { { width : '150px' , height : '150px' } } > </ div >
65
74
< Viewer
66
75
visible = { this . state . visible }
67
- images = { images }
76
+ images = { this . state . images }
68
77
activeIndex = { this . state . activeIndex }
69
78
container = { hasContainer ? this . container : false }
70
79
onClose = { ( ) => { this . setState ( { visible : false } ) ; } }
@@ -79,6 +88,14 @@ const EventEmitter = require('wolfy87-eventemitter');
79
88
80
89
const FAILED_IMG = 'fail_img' ;
81
90
91
+ let getImageSize = ( ) => {
92
+ return 100 ;
93
+ } ;
94
+
95
+ function setGetImageSize ( newFunc ) {
96
+ getImageSize = newFunc ;
97
+ }
98
+
82
99
class MockImage {
83
100
source = '' ;
84
101
width = 0 ;
@@ -90,7 +107,7 @@ class MockImage {
90
107
91
108
set src ( value : string ) {
92
109
this . source = value ;
93
- this . width = this . height = 100 ;
110
+ this . width = this . height = getImageSize ( ) ;
94
111
if ( this . source === FAILED_IMG ) {
95
112
this . ee . emitEvent ( 'error' ) ;
96
113
} else {
@@ -770,4 +787,25 @@ describe('Viewer', () => {
770
787
$$ ( 'li[data-key=zoomOut]' ) [ 0 ] . click ( ) ;
771
788
expect ( getTransformValue ( imgNode . style . transform ) . scaleX ) . toBe ( '0.88' ) ;
772
789
} ) ;
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
+ } ) ;
773
811
} ) ;
0 commit comments