organization.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <div class="d-flex flex-column align-center">
  3. <h2 class="ma-4">{{ $t('cmf_structure_licence')}}</h2>
  4. <a
  5. href="https://www.cmf-musique.org/services/tarifs-preferentiels/"
  6. target="_blank"
  7. >
  8. {{ $t('cmf_licence_details_url')}}
  9. </a>
  10. <v-form
  11. ref="form"
  12. lazy-validation
  13. >
  14. <div class="ma-12">
  15. <v-btn
  16. v-if="!pending && file().value === null"
  17. @click="submit"
  18. >
  19. {{ $t('generate') }}
  20. </v-btn>
  21. <v-btn
  22. v-else
  23. color="primary"
  24. :loading="pending"
  25. :disabled="pending"
  26. :href="file().value ? file().value.url : ''">
  27. {{ $t('download') }}
  28. </v-btn>
  29. </div>
  30. </v-form>
  31. <!-- <<< for debugging purposes, TODO: remove before deploying -->
  32. <div v-if="file !== null">
  33. {{ file().value }}
  34. </div>
  35. <!-- <ul>-->
  36. <!-- <li v-for="event in events">{{ event }}</li>-->
  37. <!-- </ul>-->
  38. <!-- >>> for debugging purposes -->
  39. </div>
  40. </template>
  41. <script lang="ts">
  42. import {computed, ComputedRef, defineComponent, Ref, ref, useContext} from "@nuxtjs/composition-api";
  43. import {DENORMALIZER_TYPE, QUERY_TYPE} from "~/types/enums";
  44. import DataPersister from "~/services/data/dataPersister";
  45. import {DataPersisterArgs} from "~/types/interfaces";
  46. import { Context } from "@nuxt/types";
  47. import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository";
  48. import {Model, Query} from "@vuex-orm/core";
  49. import {repositoryHelper} from "~/services/store/repository";
  50. import {File} from "~/models/Core/File";
  51. import {queryHelper} from "~/services/store/query";
  52. import Serializer from "~/services/serializer/serializer";
  53. export default defineComponent({
  54. name: 'OrganizationCmfLicence',
  55. setup() {
  56. const context = useContext()
  57. let fileId: Ref<number | null> = ref(null)
  58. const file: ComputedRef<File | null> = computed(() => {
  59. if (fileId.value === null)
  60. return null
  61. return queryHelper.getItem(query, fileId.value) as File
  62. })
  63. let pending: ComputedRef<boolean> = computed(() => {
  64. return file.value !== null && file.value.status === 'PENDING'
  65. })
  66. const async = () => { return context.store.state.sse.connected }
  67. const repository: VuexRepository<Model> = repositoryHelper.getRepository(File)
  68. const query: Query = repository.query()
  69. const submit = async () => {
  70. const dataPersister = new DataPersister()
  71. dataPersister.initCtx(context as unknown as Context)
  72. const response = await dataPersister.invoke(
  73. {
  74. url: '/api/export/cmf-licence/organization',
  75. type: QUERY_TYPE.DEFAULT,
  76. data: { format: 'pdf', async: true },
  77. withCredentials: true
  78. } as DataPersisterArgs
  79. )
  80. if (async()) {
  81. // pending.value = true
  82. console.log(response)
  83. let entry = Serializer.denormalize(response.data, DENORMALIZER_TYPE.HYDRA)
  84. let model = repositoryHelper.persist(File, entry.data) as any
  85. console.log(model)
  86. fileId.value = model.id
  87. // file.value = () => { return queryHelper.getItem(query, model.id) as File }
  88. // file.value = queryHelper.getItem(query, model.id) as File
  89. } else {
  90. console.error('SSE unavailable - File downloaded synchronously')
  91. // file.value = response
  92. }
  93. }
  94. // const onMessage = (eventData) => {
  95. // fileUrl.value = eventData.url
  96. // pending.value = false
  97. // }
  98. return {
  99. submit,
  100. pending,
  101. file: () => file
  102. }
  103. }
  104. })
  105. function useSse(): { sseConnected: any; } {
  106. throw new Error("Function not implemented.");
  107. }
  108. </script>