|
68 | 68 | }>(); |
69 | 69 | const form = useParentForm(); |
70 | 70 | const transformedImg = ref<string>(); |
| 71 | + const persistedEditableImg = ref<string>(); |
71 | 72 | const playablePreviewUrl = ref<string>(); |
72 | 73 | const uppyFile = ref<UppyFile<{}, {}>>(); |
73 | 74 | const isEditable = computed(() => { |
|
131 | 132 | }); |
132 | 133 | await onImageTransform(cropper); |
133 | 134 | cropper.destroy(); |
134 | | - } else if(props.persistThumbnailUrl) { |
135 | | - const response = await fetch(preview); |
| 135 | + } |
| 136 | + if(props.persistThumbnailUrl) { |
| 137 | + if(!transformedImg.value) { |
| 138 | + const response = await fetch(preview); |
| 139 | + const blob = await response.blob(); |
| 140 | + transformedImg.value = URL.createObjectURL(blob); |
| 141 | + } |
| 142 | + const response = await fetch(await createThumbnail(uppyFile.value, { width: 1200, height: 1000 })); |
136 | 143 | const blob = await response.blob(); |
137 | | - transformedImg.value = URL.createObjectURL(blob); |
| 144 | + persistedEditableImg.value = URL.createObjectURL(blob); |
138 | 145 | } |
139 | 146 | } else if(file.type?.startsWith('video/') || file.type?.startsWith('audio/')) { |
140 | 147 | playablePreviewUrl.value = URL.createObjectURL(file.data); |
|
154 | 161 | ...props.value, |
155 | 162 | ...response.body, |
156 | 163 | thumbnail: transformedImg?.value ?? uppyFile.value.preview, |
| 164 | + editable_thumbnail: persistedEditableImg.value, |
157 | 165 | mime_type: file.type, |
158 | 166 | size: file.size, |
159 | 167 | }); |
160 | 168 | emit('success', { |
161 | 169 | ...props.value, |
162 | 170 | ...response.body, |
163 | 171 | thumbnail: transformedImg?.value ?? uppyFile.value.preview, |
| 172 | + editable_thumbnail: persistedEditableImg.value, |
164 | 173 | mime_type: file.type, |
165 | 174 | size: file.size, |
166 | 175 | }); |
|
267 | 276 | } |
268 | 277 |
|
269 | 278 | editModalImageUrl.value = data.thumbnail; |
270 | | -
|
271 | | - await new Promise<void>(resolve => { |
272 | | - const image = new Image(); |
273 | | - image.src = data.thumbnail; |
274 | | - image.onload = () => { |
275 | | - editModalCropperData.value = getCropDataFromFilters({ |
276 | | - filters: props.value.filters, |
277 | | - imageWidth: image.naturalWidth, |
278 | | - imageHeight: image.naturalHeight, |
279 | | - }); |
280 | | - resolve(); |
281 | | - } |
282 | | - image.onerror = () => { |
283 | | - editModalImageUrl.value = props.value.thumbnail; |
284 | | - resolve(); |
285 | | - } |
286 | | - }); |
| 279 | + } else if(props.value?.editable_thumbnail) { |
| 280 | + editModalImageUrl.value = props.value.editable_thumbnail; |
287 | 281 | } else if(uppyFile.value) { |
288 | 282 | editModalImageUrl.value = await createThumbnail(uppyFile.value, { width: 1200, height: 1000 }); |
289 | 283 | } |
| 284 | + await new Promise<void>(resolve => { |
| 285 | + const image = new Image(); |
| 286 | + image.src = editModalImageUrl.value; |
| 287 | + image.onload = () => { |
| 288 | + editModalCropperData.value = getCropDataFromFilters({ |
| 289 | + filters: props.value.filters, |
| 290 | + imageWidth: image.naturalWidth, |
| 291 | + imageHeight: image.naturalHeight, |
| 292 | + }); |
| 293 | + resolve(); |
| 294 | + } |
| 295 | + image.onerror = () => { |
| 296 | + editModalImageUrl.value = props.value.thumbnail; |
| 297 | + resolve(); |
| 298 | + } |
| 299 | + }); |
290 | 300 | } |
291 | 301 |
|
292 | 302 | editModalOpen.value = true; |
|
352 | 362 | if(uppyFile.value) { |
353 | 363 | uppy.removeFile(uppyFile.value.id); |
354 | 364 | uppyFile.value = null; |
| 365 | + if(transformedImg.value) { |
| 366 | + URL.revokeObjectURL(transformedImg.value); |
| 367 | + } |
| 368 | + if(persistedEditableImg.value) { |
| 369 | + URL.revokeObjectURL(playablePreviewUrl.value); |
| 370 | + } |
| 371 | + if(playablePreviewUrl.value) { |
| 372 | + URL.revokeObjectURL(playablePreviewUrl.value); |
| 373 | + } |
355 | 374 | transformedImg.value = null; |
| 375 | + persistedEditableImg.value = null; |
356 | 376 | playablePreviewUrl.value = null; |
357 | 377 | editModalImageUrl.value = null; |
358 | 378 | } |
|
0 commit comments