<template> <div class="image-input image-input--with-image"> <div v-if="imageUrl" class="image-input__image-placeholder"> <img class="image-input__image-placeholder-img" :src="imageUrl" /> </div> <div class="image-input__image-upload"> <template v-if="!hasImage"> <p class="image-input__image-upload-description"> {{ labelDescription || $t('imageInput.labelDescription') }} </p> <Button icon="iconoir-upload-square" type="upload" @click="openFileUploadModal" > {{ labelButton || $t('imageInput.labelButton') }} </Button> </template> </div> <div class="image-input__image-delete"> <ButtonIcon v-if="hasImage" icon="iconoir-bin" @click="$emit('input', null)" /> </div> <UserFilesModal ref="userFilesModal" :multiple-files="multipleFiles" :file-types-acceptable="allowedImageTypes" @uploaded="fileUploaded" /> </div> </template> <script> import UserFilesModal from '@baserow/modules/core/components/files/UserFilesModal' import { UploadFileUserFileUploadType } from '@baserow/modules/core/userFileUploadTypes' import { IMAGE_FILE_TYPES } from '@baserow/modules/core/enums' export default { name: 'ImageInput', components: { UserFilesModal, }, props: { value: { type: Object, required: false, default: null, }, allowedImageTypes: { type: Array, required: false, default: () => { return IMAGE_FILE_TYPES }, }, multipleFiles: { type: Boolean, required: false, default: false, }, labelDescription: { type: String, required: false, default: '', }, labelButton: { type: String, required: false, default: '', }, defaultImage: { type: String, required: false, default: null, }, }, data() { return {} }, computed: { imageUrl() { if (this.value === null) { if (this.defaultImage) { return this.defaultImage } else { return null } } return this.value.url }, removable() { return this.value !== null }, hasImage() { return this.value !== null }, }, methods: { openFileUploadModal() { this.$refs.userFilesModal.show(UploadFileUserFileUploadType.getType()) }, fileUploaded([file]) { this.$refs.userFilesModal.hide() if (file?.name) { this.$emit('input', file) } }, }, } </script>