3
3
<button :disabled =" disableImportButton" @click =" openModal" >
4
4
<slot ></slot >
5
5
</button >
6
- <div ref =" holder" class =" holder-style" >
7
- <iframe ref =" iframe" class =" iframe" :src =" iframeSrc" frameBorder =" 0" ></iframe >
8
- </div >
6
+ <div ref =" holder" class =" holder-style" ></div >
9
7
</div >
10
8
</template >
11
9
<script >
66
64
type: String ,
67
65
required: false ,
68
66
default: null
67
+ },
68
+ language: {
69
+ type: String ,
70
+ required: false
71
+ },
72
+ lazy: {
73
+ type: Boolean ,
74
+ required: false ,
75
+ default: false
69
76
}
70
77
},
71
78
computed: {
81
88
if (this .dataLocation ) {
82
89
iframeUrl += " &preventRedirect" ;
83
90
}
91
+ if (this .language ) {
92
+ iframeUrl += " &language=" + this .language ;
93
+ }
84
94
return iframeUrl;
85
95
}
86
96
},
89
99
isModalShown: false ,
90
100
disableImportButton: true ,
91
101
uuid: this ._uid + ' _' + Math .random ().toString (36 ).substring (2 , 15 ) + Math .random ().toString (36 ).substring (2 , 15 ),
92
- logger: new Logger (this .debug )
102
+ logger: new Logger (this .debug ),
103
+ iframe: null ,
104
+ isIframeLoaded: false ,
105
+ openModalOnIframeLoad: false ,
93
106
}
94
107
},
95
108
methods: {
96
109
openModal () {
110
+
111
+ if (this .lazy ) {
112
+ if (! this .iframe ) {
113
+ this .openModalOnIframeLoad = true ;
114
+ this .initImporter ();
115
+ return ;
116
+ }
117
+ }
118
+
97
119
this .logger .info (" openModal();" );
120
+
98
121
if (! this .isModalShown ) {
99
- this .logger .verbose (" Opening importer modal" );
100
- this .isModalShown = true ;
101
- this .$refs .holder .style .display = ' block' ;
102
- this .$refs .iframe .contentWindow .postMessage (' openModal' , ' *' );
122
+ if (this .isIframeLoaded ) {
123
+ this .logger .verbose (" Opening importer modal" );
124
+ this .isModalShown = true ;
125
+ this .$refs .holder .style .display = ' block' ;
126
+ console .log (this .iframe )
127
+ this .iframe .contentWindow .postMessage (' openModal' , ' *' );
128
+ } else {
129
+ this .openModalOnIframeLoad = true ;
130
+ }
103
131
}else {
104
132
this .logger .verbose (" Modal already showing or shown" );
105
133
}
134
+
106
135
},
107
136
onMessageEvent (event ) {
108
137
if (event .data === " mainModalHidden" ) {
194
223
}
195
224
}
196
225
}
197
- }
198
- },
199
- mounted () {
200
-
201
- this .logger .info (" Framework:" , " Vue" );
202
- this .logger .info (" Library version:" , version);
203
- if (this .customDomain ){
204
- this .logger .info (" Using domain:" , this .customDomain );
205
- }
206
- if (this .dataLocation ) {
207
- this .logger .info (" Data location:" , this .dataLocation );
208
- }
209
-
210
- this .logger .info (" Importer url:" , this .iframeSrc );
211
-
212
- window .addEventListener (" message" , this .onMessageEvent , false );
213
-
214
- let iframe = this .$refs .iframe ;
215
-
216
- let self = this ;
226
+ },
227
+ initImporter () {
228
+ this .logger .info (" Framework:" , " Vue" );
229
+ this .logger .info (" Library version:" , version);
230
+ if (this .customDomain ){
231
+ this .logger .info (" Using domain:" , this .customDomain );
232
+ }
233
+ if (this .dataLocation ) {
234
+ this .logger .info (" Data location:" , this .dataLocation );
235
+ }
236
+ this .logger .info (" Importer url:" , this .iframeSrc );
217
237
218
- iframe .onload = function () {
238
+ let iframe = document .createElement (" iframe" );
239
+ this .iframe = iframe;
240
+ iframe .setAttribute (" src" , this .iframeSrc );
241
+ iframe .frameBorder = 0 ;
242
+ iframe .classList .add (' csvbox-iframe' );
219
243
220
- self . logger . info ( " Importer ready " );
244
+ window . addEventListener ( " message " , this . onMessageEvent , false );
221
245
222
- iframe .contentWindow .postMessage ({
223
- " customer" : self .user ? self .user : null ,
224
- " columns" : self .dynamicColumns ? self .dynamicColumns : null ,
225
- " options" : self .options ? self .options : null ,
226
- " unique_token" : self .uuid
227
- }, " *" );
246
+ let self = this ;
228
247
229
- self .disableImportButton = false ;
248
+ iframe .onload = function () {
249
+ self .isIframeLoaded = true ;
250
+ self .logger .info (" Importer ready" );
251
+ iframe .contentWindow .postMessage ({
252
+ " customer" : self .user ? self .user : null ,
253
+ " columns" : self .dynamicColumns ? self .dynamicColumns : null ,
254
+ " options" : self .options ? self .options : null ,
255
+ " unique_token" : self .uuid
256
+ }, " *" );
257
+ self .disableImportButton = false ;
258
+ self .onReady ();
259
+ if (self .openModalOnIframeLoad ) {
260
+ self .openModal ();
261
+ }
262
+ }
230
263
231
- self . onReady ( );
264
+ this . $refs . holder . appendChild (iframe );
232
265
233
266
}
234
267
},
268
+ mounted () {
269
+ if (this .lazy ) {
270
+ this .disableImportButton = false ;
271
+ } else {
272
+ this .initImporter ();
273
+ }
274
+
275
+ },
235
276
beforeDestroy () {
236
277
this .logger .verbose (" Removing message event listener" );
237
278
window .removeEventListener (" message" , this .onMessageEvent );
248
289
left: 0 ;
249
290
right: 0 ;
250
291
}
251
- .iframe {
252
- height: 100 % ;
253
- width: 100 % ;
254
- position: absolute;
255
- top: 0 ;
256
- left: 0 ;
257
- }
292
+ < / style>
293
+ < style>
294
+ .csvbox - iframe {
295
+ height: 100 % ;
296
+ width: 100 % ;
297
+ position: absolute;
298
+ top: 0 ;
299
+ left: 0 ;
300
+ }
258
301
< / style>
0 commit comments