organization.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 === null"
  17. @click="submit"
  18. >
  19. {{ $t('generate') }}
  20. </v-btn>
  21. <UiDownloader v-else :file="file" v-slot="scope">
  22. <v-btn
  23. color="primary"
  24. :loading="pending || scope.downloading"
  25. :disabled="pending"
  26. @click="scope.download"
  27. >
  28. {{ $t('download') }}
  29. </v-btn>
  30. </UiDownloader>
  31. </div>
  32. </v-form>
  33. </div>
  34. </template>
  35. <script lang="ts">
  36. import {computed, ComputedRef, defineComponent, Ref, ref, useContext} from "@nuxtjs/composition-api";
  37. import {QUERY_TYPE} from "~/types/enums";
  38. import DataPersister from "~/services/data/dataPersister";
  39. import {DataPersisterArgs, DataProviderArgs} from "~/types/interfaces";
  40. import { Context } from "@nuxt/types";
  41. import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository";
  42. import {Model, Query} from "@vuex-orm/core";
  43. import {repositoryHelper} from "~/services/store/repository";
  44. import {File} from "~/models/Core/File";
  45. import {queryHelper} from "~/services/store/query";
  46. import DataProvider from "~/services/data/dataProvider";
  47. export default defineComponent({
  48. name: 'OrganizationCmfLicence',
  49. setup() {
  50. const context = useContext()
  51. let fileId: Ref<number | null> = ref(null)
  52. let file: ComputedRef<File | null> = computed(() => {
  53. return fileId.value !== null ? queryHelper.getItem(query, fileId.value) as File : null
  54. })
  55. let pending: ComputedRef<boolean> = computed(() => {
  56. return file.value !== null && file.value.status === 'PENDING'
  57. })
  58. const async = () => { return context.store.state.sse.connected }
  59. const repository: VuexRepository<Model> = repositoryHelper.getRepository(File)
  60. const query: Query = repository.query()
  61. const submit = async () => {
  62. const response = await context.$dataPersister.invoke(
  63. {
  64. url: '/api/export/cmf-licence/organization',
  65. type: QUERY_TYPE.DEFAULT,
  66. data: { format: 'pdf', async: async() },
  67. withCredentials: true
  68. } as DataPersisterArgs
  69. )
  70. if (!async()) {
  71. console.error('SSE unavailable - File downloaded synchronously')
  72. }
  73. fileId.value = response.data.id
  74. repositoryHelper.persist(File, response.data)
  75. }
  76. return {
  77. submit,
  78. pending,
  79. file
  80. }
  81. },
  82. beforeDestroy() {
  83. repositoryHelper.cleanRepository(File)
  84. }
  85. })
  86. function useSse(): { sseConnected: any; } {
  87. throw new Error("Function not implemented.");
  88. }
  89. </script>