Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions src/components/ContactDetails/ContactDetailsAvatar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
:url="photoUrl"
class="contact-header-avatar__photo" />

<NcModal v-model:show="showCropper" size="small" @close="cancel">
<NcModal v-if="showCropper" size="small" @close="cancel">
<div class="avatar__container">
<h2>{{ t('contacts', 'Crop contact photo') }}</h2>
<VueCropper
Expand Down Expand Up @@ -252,7 +252,7 @@ export default {
}
}

this.openCropper(data, type)
await this.openCropper(data, type)
return true
},

Expand All @@ -262,10 +262,11 @@ export default {
* @param {Buffer} data the image
* @param {string} type of the image
*/
openCropper(data, type) {
async openCropper(data, type) {
const ccc = `data:${type};base64,${data.toString('base64')}`
this.$refs.cropper.replace(ccc)
this.showCropper = true
await this.$nextTick()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion(non-blocking): Replace showCropper with cropperSrc. Avoids $nextTick and simplifies code overall.

diff --git a/src/components/ContactDetails/ContactDetailsAvatar.vue b/src/components/ContactDetails/ContactDetailsAvatar.vue
index 68ac0e89f..cddfa8424 100644
--- a/src/components/ContactDetails/ContactDetailsAvatar.vue
+++ b/src/components/ContactDetails/ContactDetailsAvatar.vue
@@ -30,10 +30,11 @@
                        :url="photoUrl"
                        class="contact-header-avatar__photo" />
 
-               <NcModal v-if="showCropper" size="small" @close="cancel">
+               <NcModal v-if="cropperSrc" size="small" @close="cancel">
                        <div class="avatar__container">
                                <h2>{{ t('contacts', 'Crop contact photo') }}</h2>
                                <VueCropper
+                                       :src="cropperSrc"
                                        ref="cropper"
                                        class="avatar__cropper"
                                        v-bind="cropperOptions" />
@@ -179,7 +180,7 @@ export default {
                        loading: false,
                        photoUrl: undefined,
                        root: generateRemoteUrl(`dav/files/${getCurrentUser().uid}`),
-                       showCropper: false,
+                       cropperSrc: undefined,
                        cropperOptions: {
                                aspectRatio: 1 / 1,
                                viewMode: 3,
@@ -252,7 +253,7 @@ export default {
                                }
                        }
 
-                       await this.openCropper(data, type)
+                       this.openCropper(data, type)
                        return true
                },
 
@@ -262,11 +263,8 @@ export default {
                 * @param {Buffer} data the image
                 * @param {string} type of the image
                 */
-               async openCropper(data, type) {
-                       const ccc = `data:${type};base64,${data.toString('base64')}`
-                       this.showCropper = true
-                       await this.$nextTick()
-                       this.$refs.cropper.replace(ccc)
+               openCropper(data, type) {
+                       this.cropperSrc = `data:${type};base64,${data.toString('base64')}`
                },
 
                /**
@@ -417,7 +415,7 @@ export default {
                 * Save the cropped image
                 */
                saveAvatar() {
-                       this.showCropper = false
+                       this.cropperSrc = undefined
                        this.loading = true
 
                        this.$refs.cropper.getCroppedCanvas({
@@ -455,7 +453,7 @@ export default {
                 * Cancel cropping
                 */
                cancel() {
-                       this.showCropper = false
+                       this.cropperSrc = undefined
                        this.loading = false
                },

this.$refs.cropper.replace(ccc)
},

/**
Expand All @@ -281,16 +282,13 @@ export default {

const reader = new FileReader()

reader.onload = (e) => {
reader.onload = async (e) => {
try {
if (typeof e.target.result === 'object') {
const data = Buffer.from(e.target.result, 'binary')

if (this.processPicture(data)) {
return
}

throw new Error('Wrong image mimetype')
// processPicture shows its own error on an invalid mimetype
await this.processPicture(data)
}
} catch (error) {
logger.error(error)
Expand Down Expand Up @@ -503,7 +501,7 @@ export default {

const data = Buffer.from(response.data, 'binary')

this.processPicture(data)
await this.processPicture(data)
} catch (error) {
showError(t('contacts', 'Error while processing the picture.'))
logger.error(error)
Expand Down
Loading