|
9 | 9 | </div> |
10 | 10 | </template> |
11 | 11 | <script> |
| 12 | +
|
| 13 | + import { version } from "../../package.json" |
| 14 | + import { Logger } from "./../utils/Logger"; |
| 15 | +
|
12 | 16 | export default{ |
13 | 17 | name: 'csvbox-button', |
14 | 18 | props: { |
15 | 19 | licenseKey: { |
16 | 20 | type: String, |
17 | 21 | required: true |
18 | 22 | }, |
19 | | - debugMode: { |
20 | | - type: Boolean, |
21 | | - required: false |
22 | | - }, |
23 | | - useStagingServer: { |
24 | | - type: Boolean, |
25 | | - required: false |
26 | | - }, |
27 | 23 | onImport: { |
28 | 24 | type: Function, |
29 | 25 | default: function() {} |
|
57 | 53 | default: function () { |
58 | 54 | return { user_id: 'default123' }; |
59 | 55 | } |
| 56 | + }, |
| 57 | + dataLocation: { |
| 58 | + type: String, |
| 59 | + required: false |
| 60 | + }, |
| 61 | + customDomain: { |
| 62 | + type: String, |
| 63 | + required: false |
| 64 | + }, |
| 65 | + debug: { |
| 66 | + type: String, |
| 67 | + required: false, |
| 68 | + default: null |
60 | 69 | } |
61 | 70 | }, |
62 | 71 | computed:{ |
63 | 72 | iframeSrc() { |
64 | | - let BASE_URL = `https://${this.useStagingServer ? 'staging' : 'app' }.csvbox.io/embed/${this.licenseKey}`; |
65 | | - return `${BASE_URL}?library-version=2&source=embedCode&sourceLang=vue`; |
| 73 | + let domain = this.customDomain ? this.customDomain : "app.csvbox.io"; |
| 74 | + if(this.dataLocation) { |
| 75 | + domain = `${this.dataLocation}-${domain}`; |
| 76 | + } |
| 77 | +
|
| 78 | + let iframeUrl = `https://${domain}/embed/${this.licenseKey}`; |
| 79 | + iframeUrl += `?library-version=${version}`; |
| 80 | + iframeUrl += "&framework=vue"; |
| 81 | + if(this.dataLocation) { |
| 82 | + iframeUrl += "&preventRedirect"; |
| 83 | + } |
| 84 | + return iframeUrl; |
66 | 85 | } |
67 | 86 | }, |
68 | 87 | data(){ |
69 | 88 | return { |
70 | 89 | isModalShown: false, |
71 | 90 | disableImportButton: true, |
72 | | - uuid: this._uid + '_' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) |
| 91 | + uuid: this._uid + '_' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15), |
| 92 | + logger: new Logger(this.debug) |
73 | 93 | } |
74 | 94 | }, |
75 | 95 | methods: { |
76 | 96 | openModal() { |
| 97 | + this.logger.info("openModal();"); |
77 | 98 | if(!this.isModalShown) { |
| 99 | + this.logger.verbose("Opening importer modal"); |
78 | 100 | this.isModalShown = true; |
79 | 101 | this.$refs.holder.style.display = 'block'; |
80 | 102 | this.$refs.iframe.contentWindow.postMessage('openModal', '*'); |
| 103 | + }else{ |
| 104 | + this.logger.verbose("Modal already showing or shown"); |
81 | 105 | } |
82 | 106 | }, |
83 | 107 | onMessageEvent(event) { |
|
94 | 118 | } |
95 | 119 | if(typeof event.data == "object") { |
96 | 120 | if(event?.data?.data?.unique_token == this.uuid) { |
| 121 | +
|
| 122 | + this.logger.verbose("Event:", `'${event.data.type}'`, event.data.data); |
| 123 | +
|
97 | 124 | if(event.data.type && event.data.type == "data-on-submit") { |
98 | 125 | let metadata = event.data.data; |
99 | 126 | metadata["column_mappings"] = event.data.column_mapping; |
100 | | - // this.callback(true, metadata); |
101 | 127 | delete metadata["unique_token"]; |
102 | 128 | this.onSubmit?.(metadata); |
103 | 129 | } |
|
157 | 183 | } else { |
158 | 184 | this.onImport(false, event.data.data); |
159 | 185 | } |
| 186 | + }else if(event.data.type && event.data.type == "csvbox-modal-hidden") { |
| 187 | + this.$refs.holder.style.display = 'none'; |
| 188 | + this.isModalShown = false; |
| 189 | + this.onClose(); |
| 190 | + } else if(event.data.type && event.data.type == "csvbox-upload-successful") { |
| 191 | + this.onImport(true); |
| 192 | + } else if(event.data.type && event.data.type == "csvbox-upload-failed") { |
| 193 | + this.onImport(false); |
160 | 194 | } |
161 | 195 | } |
162 | 196 | } |
163 | | - }, |
164 | | - randomString() { |
165 | | - let result = ''; |
166 | | - let characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; |
167 | | - let charactersLength = characters.length; |
168 | | - for (let i = 0; i < 20; i++) { |
169 | | - result += characters.charAt(Math.floor(Math.random() * charactersLength)); |
170 | | - } |
171 | | - return result; |
172 | 197 | } |
173 | 198 | }, |
174 | 199 | mounted() { |
175 | 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 | +
|
176 | 212 | window.addEventListener("message", this.onMessageEvent, false); |
177 | 213 |
|
178 | 214 | let iframe = this.$refs.iframe; |
|
181 | 217 |
|
182 | 218 | iframe.onload = function () { |
183 | 219 |
|
| 220 | + self.logger.info("Importer ready"); |
| 221 | +
|
184 | 222 | iframe.contentWindow.postMessage({ |
185 | 223 | "customer" : self.user ? self.user : null, |
186 | 224 | "columns" : self.dynamicColumns ? self.dynamicColumns : null, |
|
195 | 233 | } |
196 | 234 | }, |
197 | 235 | beforeDestroy() { |
| 236 | + this.logger.verbose("Removing message event listener"); |
198 | 237 | window.removeEventListener("message", this.onMessageEvent); |
199 | 238 | } |
200 | 239 | } |
|
0 commit comments