11<script >
22import { defineComponent } from ' vue' ;
33import { isProxy , toRaw } from ' vue' ;
4+ const packageJson = require (" ./../package.json" )
45
56export default /* #__PURE__*/ defineComponent ({
67 name: ' CSVBoxButton' , // vue component name
@@ -9,14 +10,6 @@ export default /*#__PURE__*/defineComponent({
910 type: String ,
1011 required: true
1112 },
12- debugMode: {
13- type: Boolean ,
14- required: false
15- },
16- useStagingServer: {
17- type: Boolean ,
18- required: false
19- },
2013 onImport: {
2114 type: Function ,
2215 default : function () {}
@@ -50,52 +43,82 @@ export default /*#__PURE__*/defineComponent({
5043 default : function () {
5144 return { user_id: ' default123' };
5245 }
46+ },
47+ dataLocation: {
48+ type: String ,
49+ required: false
50+ },
51+ customDomain: {
52+ type: String ,
53+ required: false
54+ },
55+ language: {
56+ type: String ,
57+ required: false
58+ },
59+ lazy: {
60+ type: Boolean ,
61+ required: false ,
62+ default: false
5363 }
5464 },
55- computed: {
56- iframeSrc () {
57- let BASE_URL = ` https://${ this .useStagingServer ? ' staging' : ' app' } .csvbox.io/embed/${ this .licenseKey } ` ;
58- return ` ${ BASE_URL } ?library-version=2&source=embedCode&sourceLang=vue` ;
59- }
60- },
61- data (){
62- return {
63- isModalShown: false ,
64- disableImportButton: true ,
65- uuid: Math .random ().toString (36 ).substring (2 , 15 ) + Math .random ().toString (36 ).substring (2 , 15 )
66- }
67- },
65+ computed: {
66+ iframeSrc () {
67+ let domain = this .customDomain ? this .customDomain : " app.csvbox.io" ;
68+ if (this .dataLocation ) { domain = ` ${ this .dataLocation } -${ domain} ` ; }
69+ let iframeUrl = ` https://${ domain} /embed/${ this .licenseKey } ` ;
70+ iframeUrl += ` ?library-version=${ packageJson .version } ` ;
71+ iframeUrl += " &framework=vue3" ;
72+ if (this .dataLocation ) {
73+ iframeUrl += " &preventRedirect" ;
74+ }
75+ if (this .language ) {
76+ iframeUrl += " &language=" + this .language ;
77+ }
78+ return iframeUrl;
79+ }
80+ },
81+ data (){
82+ return {
83+ isModalShown: false ,
84+ disableImportButton: true ,
85+ uuid: Math .random ().toString (36 ).substring (2 , 15 ) + Math .random ().toString (36 ).substring (2 , 15 ),
86+ iframe: null ,
87+ isIframeLoaded: false ,
88+ openModalOnIframeLoad: false ,
89+ }
90+ },
6891 methods: {
69- openModal () {
70- if (! this .isModalShown ) {
71- this .isModalShown = true ;
72- this .$refs .holder .style .display = ' block' ;
73- this .$refs .iframe .contentWindow .postMessage (' openModal' , ' *' );
74- }
75- },
92+ openModal () {
93+ if (this .lazy ) {
94+ if (! this .iframe ) {
95+ this .openModalOnIframeLoad = true ;
96+ this .initImporter ();
97+ return ;
98+ }
99+ }
100+ if (! this .isModalShown ) {
101+ if (this .isIframeLoaded ) {
102+ this .isModalShown = true ;
103+ this .$refs .holder .style .display = ' block' ;
104+ this .iframe .contentWindow .postMessage (' openModal' , ' *' );
105+ } else {
106+ this .openModalOnIframeLoad = true ;
107+ }
108+ }
109+ },
76110 onMessageEvent (event ) {
77- if (event .data === " mainModalHidden" ) {
78- this .$refs .holder .style .display = ' none' ;
79- this .isModalShown = false ;
80- this .onClose ();
81- }
82- if (event .data === " uploadSuccessful" ) {
83- this .onImport (true );
84- }
85- if (event .data === " uploadFailed" ) {
86- this .onImport (false );
87- }
88- if (typeof event .data == " object" ) {
89- if (event ? .data ? .data ? .unique_token == this .uuid ) {
111+
112+ if (typeof event .data == " object" ) {
113+ if (event ? .data ? .data ? .unique_token == this .uuid ) {
90114 if (event .data .type && event .data .type == " data-on-submit" ) {
91115 let metadata = event .data .data ;
92116 metadata[" column_mappings" ] = event .data .column_mapping ;
93- // this.callback(true, metadata);
94117 delete metadata[" unique_token" ];
95118 this .onSubmit ? .(metadata);
96119 }
97120 else if (event .data .type && event .data .type == " data-push-status" ) {
98- if (event .data .data .import_status == " success" ) {
121+ if (event .data .data .import_status == " success" ) {
99122 if (event && event .data && event .data .row_data ) {
100123 let primary_row_data = event .data .row_data ;
101124 let headers = event .data .headers ;
@@ -141,49 +164,84 @@ export default /*#__PURE__*/defineComponent({
141164 let metadata = event .data .data ;
142165 delete metadata[" unique_token" ];
143166 this .onImport (true , metadata);
144- }
167+ }
145168
146- } else {
147- console .log (" onImport" , false , event .data .data );
148- this .onImport (false , event .data .data );
169+ } else {
170+ console .log (" onImport" , false , event .data .data );
171+ this .onImport (false , event .data .data );
172+ }
173+ } else if (event .data .type && event .data .type == " csvbox-modal-hidden" ) {
174+ this .$refs .holder .style .display = ' none' ;
175+ this .isModalShown = false ;
176+ this .onClose ();
177+ } else if (event .data .type && event .data .type == " csvbox-upload-successful" ) {
178+ this .onImport (true );
179+ } else if (event .data .type && event .data .type == " csvbox-upload-failed" ) {
180+ this .onImport (false );
149181 }
150- }
151- }
152- }
153- },
154- randomString () {
155- let result = ' ' ;
156- let characters = ' abcdefghijklmnopqrstuvwxyz0123456789' ;
157- let charactersLength = characters .length ;
158- for (let i = 0 ; i < 20 ; i++ ) {
159- result += characters .charAt (Math .floor (Math .random () * charactersLength));
160- }
161- return result;
162- }
163- },
164- mounted () {
182+ }
183+ }
184+ },
185+ randomString () {
186+ let result = ' ' ;
187+ let characters = ' abcdefghijklmnopqrstuvwxyz0123456789' ;
188+ let charactersLength = characters .length ;
189+ for (let i = 0 ; i < 20 ; i++ ) {
190+ result += characters .charAt (Math .floor (Math .random () * charactersLength));
191+ }
192+ return result;
193+ },
194+ initImporter () {
165195
166- window .addEventListener (" message" , this .onMessageEvent , false );
196+ let iframe = document .createElement (" iframe" );
197+ this .iframe = iframe;
198+ iframe .setAttribute (" src" , this .iframeSrc );
199+ iframe .frameBorder = 0 ;
200+ iframe .classList .add (' csvbox-iframe' );
167201
168- let iframe = this .$refs . iframe ;
202+ window . addEventListener ( " message " , this .onMessageEvent , false ) ;
169203
170- let self = this ;
204+ let self = this ;
171205
172- iframe .onload = function () {
206+ iframe .onload = function () {
207+ self .isIframeLoaded = true ;
208+ iframe .contentWindow .postMessage ({
209+ " customer" : self .user ? (isProxy (self .user ) ? toRaw (self .user ) : self .user ) : null ,
210+ " columns" : self .dynamicColumns ? (isProxy (self .dynamicColumns ) ? toRaw (self .dynamicColumns ) : self .dynamicColumns ) : null ,
211+ " options" : self .options ? (isProxy (self .options ) ? toRaw (self .options ) : self .options ) : null ,
212+ " unique_token" : self .uuid
213+ }, " *" );
214+ self .disableImportButton = false ;
215+ self .onReady ();
216+ if (self .openModalOnIframeLoad ) {
217+ self .openModal ();
218+ }
219+ }
173220
174- iframe .contentWindow .postMessage ({
175- " customer" : self .user ? (isProxy (self .user ) ? toRaw (self .user ) : self .user ) : null ,
176- " columns" : self .dynamicColumns ? (isProxy (self .dynamicColumns ) ? toRaw (self .dynamicColumns ) : self .dynamicColumns ) : null ,
177- " options" : self .options ? (isProxy (self .options ) ? toRaw (self .options ) : self .options ) : null ,
178- " unique_token" : self .uuid
179- }, " *" );
221+ this .$refs .holder .appendChild (iframe);
180222
181- self .disableImportButton = false ;
223+ }
224+ },
225+ mounted () {
182226
183- self .onReady ();
227+ // window.addEventListener("message", this.onMessageEvent, false);
228+ // let iframe = this.$refs.iframe;
229+ // let self = this;
230+ // iframe.onload = function () {
231+ // iframe.contentWindow.postMessage({
232+
233+ // }, "*");
234+ // self.disableImportButton = false;
235+ // self.onReady();
236+ // }
184237
185- }
186- },
238+ if (this .lazy ) {
239+ this .disableImportButton = false ;
240+ } else {
241+ this .initImporter ();
242+ }
243+
244+ },
187245 beforeDestroy () {
188246 window .removeEventListener (" message" , this .onMessageEvent );
189247 }
@@ -196,7 +254,7 @@ export default /*#__PURE__*/defineComponent({
196254 < slot>< / slot>
197255 < / button>
198256 < div ref= " holder" class = " holder-style" >
199- < iframe ref= " iframe" class = " iframe" : src= " iframeSrc" frameBorder= " 0" >< / iframe>
257+ <!-- < iframe ref= " iframe" class = " iframe" : src= " iframeSrc" frameBorder= " 0" >< / iframe> -- >
200258 < / div>
201259 < / div>
202260< / template>
@@ -211,11 +269,13 @@ export default /*#__PURE__*/defineComponent({
211269 left: 0 ;
212270 right: 0 ;
213271 }
214- .iframe {
215- height: 100 % ;
216- width: 100 % ;
217- position: absolute;
218- top: 0 ;
219- left: 0 ;
220- }
272+ < / style>
273+ < style>
274+ .csvbox - iframe {
275+ height: 100 % ;
276+ width: 100 % ;
277+ position: absolute;
278+ top: 0 ;
279+ left: 0 ;
280+ }
221281< / style>
0 commit comments