1
0
mirror of https://gitlab.com/bramw/baserow.git synced 2024-11-21 23:37:55 +00:00
bramw_baserow/web-frontend/modules/core/components/ImageInput.vue
2024-07-05 15:41:24 +00:00

114 lines
2.6 KiB
Vue

<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>