Skip to content
Snippets Groups Projects
ImagePicker.vue 1.95 KiB
Newer Older
  • Learn to ignore specific revisions
  • <template>
      <ImagePreview
        :url="image?.image ?? null"
    
        class="tw-inline-flex tw-h-64 tw-max-w-full tw-min-w-[320px] tw-bg-gray-700 tw-rounded tw-flex-1"
    
        v-bind="attrs"
      >
        <div
    
          class="tw-absolute tw-inset-0 tw-flex tw-items-end tw-text-white tw-bg-gradient-to-b tw-from-0% tw-to-100% tw-from-transparent tw-to-black/80"
    
          <div v-if="!disabled" class="tw-flex tw-items-stretch tw-m-3 tw-gap-3">
    
            <button
              type="button"
    
              class="btn btn-sm tw-text-white tw-backdrop-blur tw-bg-black/30 tw-ring-0 hocus:tw-bg-aura-primary/25"
    
              @click="showPicker = true"
            >
    
              <icon-carbon-image-search class="tw-w-6 tw-h-6" />
    
              {{ t('imagePicker.chooseAnImage') }}
            </button>
            <button
              v-if="modelValue"
              type="button"
              class="btn btn-sm tw-text-white tw-ring-0 hocus:tw-bg-aura-primary/25"
              @click="localImageId = null"
            >
              {{ t('imagePicker.reset') }}
            </button>
          </div>
    
        </div>
      </ImagePreview>
    
      <ImagePickerDialog v-model="localImageId" :is-open="showPicker" @show="showPicker = $event" />
    
    </template>
    
    <script lang="ts" setup>
    import { computed, ref, useAttrs } from 'vue'
    import { useI18n } from '@/i18n'
    
    import { useImage } from '@/stores/images'
    import ImagePickerDialog from './ImagePickerDialog.vue'
    import ImagePreview from './ImagePreview.vue'
    
    const props = defineProps<{
      modelValue: number | null
    
      disabled?: boolean
    
    }>()
    const emit = defineEmits<{
      (e: 'update:modelValue', imageId: number | null): void
    }>()
    const attrs = useAttrs()
    const { t } = useI18n()
    const showPicker = ref(false)
    
    const localImageId = useCopy<number | null>(() => props.modelValue, {
      save: (value) => emit('update:modelValue', value),
    })
    
    const image = useImage(computed(() => props.modelValue))
    </script>
    
    <script lang="ts">
    export default {
      inheritAttrs: false,
      compatConfig: {
        MODE: 3,
      },
    }
    </script>