PDFLensRenderer.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <div class="flex flex-col flex-1">
  3. <div
  4. class="sticky z-10 flex items-center justify-between pl-4 border-b bg-primary border-dividerLight top-lowerSecondaryStickyFold"
  5. >
  6. <label class="font-semibold text-secondaryLight">
  7. {{ $t("response.body") }}
  8. </label>
  9. <div class="flex">
  10. <ButtonSecondary
  11. v-if="response.body"
  12. ref="downloadResponse"
  13. v-tippy="{ theme: 'tooltip' }"
  14. :title="$t('action.download_file')"
  15. :svg="downloadIcon"
  16. @click.native="downloadResponse"
  17. />
  18. </div>
  19. </div>
  20. <vue-pdf-embed
  21. :source="pdfsrc"
  22. class="flex flex-1 overflow-auto border-b hide-scrollbar border-dividerLight"
  23. type="application/pdf"
  24. />
  25. </div>
  26. </template>
  27. <script setup lang="ts">
  28. import { computed } from "@nuxtjs/composition-api"
  29. import VuePdfEmbed from "vue-pdf-embed/dist/vue2-pdf-embed"
  30. import useDownloadResponse from "~/helpers/lenses/composables/useDownloadResponse"
  31. import { HoppRESTResponse } from "~/helpers/types/HoppRESTResponse"
  32. const props = defineProps<{
  33. response: HoppRESTResponse & {
  34. type: "success" | "fail"
  35. }
  36. }>()
  37. const pdfsrc = computed(() =>
  38. URL.createObjectURL(
  39. new Blob([props.response.body], {
  40. type: "application/pdf",
  41. })
  42. )
  43. )
  44. const { downloadIcon, downloadResponse } = useDownloadResponse(
  45. "application/pdf",
  46. computed(() => props.response.body)
  47. )
  48. </script>