UNPKG

aico-image-editor

Version:

Combine multiple image into and create single combined image

156 lines (133 loc) 5.43 kB
//import Alpine from 'alpinejs'; const loadProductPicturesSubTabHTML = () => import(/* webpackMode: "eager" */'./productPicturesSubTab.html'); import initStyles from '../../../../initStyles'; import initHTML from '../../../../initHTML'; initHTML('product-pictures-sub-tab', loadProductPicturesSubTabHTML) import { hotReloadAlpineComponent } from '../../../../hotReloader'; import Cropper from 'cropperjs'; import { mainPictures, subPictures } from '../../../../getImages'; const productPicturesSubTabData = { init() { initStyles(this.$el.shadowRoot); this.$dispatch('set-pictures-length', {pictures: this.mainPictures.length + this.subPictures.length}) if(module.hot) { module.hot.accept('./productPicturesSubTab.html', function() { console.log('change detected') hotReloadAlpineComponent(this.$el.getRootNode().host ,loadProductPicturesSubTabHTML) }.bind(this)); } }, isSubPicturesVisible: false, pictureSearch: '', selectedMainPicture: null, selectedSubPicture: null, mainPictures: mainPictures, subPictures: subPictures, selectMainPicture(id,url) { this.selectedMainPicture = id; this.$store.canvas.addPictureToCanvas(url, 'mainPicture'); }, selectSubPicture(id,url) { this.selectedSubPicture = id; this.$store.canvas.addPictureToCanvas(url, 'subPicture'); }, filterPicture() { this.mainPictures.forEach((mainPicture) => { const labelMatch = mainPicture.label.includes(this.pictureSearch); mainPicture.hidden = !labelMatch; }); this.subPictures.forEach((subPicture) => { const labelMatch = subPicture.label.includes(this.pictureSearch); subPicture.hidden = !labelMatch; }); }, addMainPicture(mainPicture) { //this.mainPictures.push(mainPicture); if(mainPicture.url) { this.mainPictures.unshift({ id: mainPicture.id, url: mainPicture.url, //url: mainPicture.cropperData?.originalFileDataUrl, // use this when testing locally name: mainPicture.name, label: mainPicture.name, type: 'mainPicture', isRemovable: true, cropperData: mainPicture.cropperData, originalUrl: mainPicture.originalUrl }) this.isUploadBlockVisible = false; } }, updateMainPicture(mainPicture) { const mainPictureToUpdate = this.mainPictures.find(mp => mp.id === mainPicture.id); mainPictureToUpdate.url = mainPicture.url; mainPictureToUpdate.cropperData = mainPicture.cropperData; }, addSubPicture(subPicture) { this.subPictures.push(subPicture); }, resetMainPictures() { // console.log('reset shapes called') // here reverse loop is used to prevent skipping of item which occurs after modifying array for(let i = this.mainPictures.length - 1; i >=-0; i--) { if (this.mainPictures[i].isRemovable) { this.mainPictures.splice(i, 1); } } }, pictureTrigger: { ['@mainPictures-added-from-api.window'](event) { event.detail.mainPictures.forEach(mainPicture => { this.addMainPicture(mainPicture); this.$store.cropperStore.populateAspectRatio(mainPicture) }) }, ['@mainPictures-updated-from-api.window'](event) { event.detail.mainPictures.forEach(mainPicture => { this.updateMainPicture(mainPicture); this.$store.cropperStore.populateAspectRatio(mainPicture) }) }, ['@mainPictures-cleard.window'](event) { this.removeTempPictures(); }, ['@canvas-reset.window'](event) { this.resetMainPictures(); }, ['@canvas-is-ready.window'](event) { this.mainPictures.forEach((mainPicture) => { if(!mainPicture.isRemovable) { this.selectMainPicture(mainPicture.id, mainPicture.url) } }) } }, isUploadBlockVisible: false, hideUploadBlock() { this.isUploadBlockVisible = false; }, showUploadBlock() { this.isUploadBlockVisible = true; }, tempPictures: [], removeTempPictures() { this.tempPictures = []; }, async swapWithAIImage(mainPicture) { const blob = await fetch(this.$store.canvas.aiImageSrc).then(response => response.blob()) const dt = new DataTransfer(); dt.items.add(new File([blob], mainPicture.name, { type: "image/png", lastModified: Date.now()})) const editUploadObj = { files: dt.files, action: `${this.$store.canvas.apiConfig.apiUrl}/api/v1/product-configurators/images/${mainPicture.id}`, type: 'image', cropperData: mainPicture.cropperData } const data = await this.$store.uploadStore.updateImageInServer(editUploadObj); if(data?.data) { this.$dispatch('mainPictures-updated-from-api', {mainPictures: [data?.data]}); } } } export default () => (productPicturesSubTabData); export {productPicturesSubTabData};