organization.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 && fileUrl === 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="fileUrl">
  27. {{ $t('download') }}
  28. </v-btn>
  29. </div>
  30. </v-form>
  31. <!-- <<< for debugging purposes, TODO: remove before deploying -->
  32. <ul>
  33. <li v-for="event in events">{{ event }}</li>
  34. </ul>
  35. <!-- >>> for debugging purposes -->
  36. </div>
  37. </template>
  38. <script lang="ts">
  39. import {defineComponent, Ref, ref, useContext} from "@nuxtjs/composition-api";
  40. import {HTTP_METHOD, QUERY_TYPE} from "~/types/enums";
  41. import DataPersister from "~/services/data/dataPersister";
  42. import {DataPersisterArgs} from "~/types/interfaces";
  43. export default defineComponent({
  44. name: 'OrganizationCmfLicence',
  45. setup() {
  46. const { store } = useContext()
  47. let pending: Ref<boolean> = ref(false)
  48. let fileUrl: Ref<string | null> = ref(null)
  49. const async = () => { return store.state.sse.connected }
  50. let events: Ref<Array<Array<any>>> = ref(store.state.sse.events)
  51. const submit = async () => {
  52. const response = await DataPersister.request(
  53. '/api/export/cmf-licence/organization',
  54. HTTP_METHOD.POST,
  55. { type: QUERY_TYPE.DEFAULT, data: { format: 'pdf', async: true }, withCredentials: true } as DataPersisterArgs
  56. )
  57. if (async()) {
  58. pending.value = true
  59. } else {
  60. console.warn('File downloaded synchronously')
  61. fileUrl.value = JSON.parse(response).url
  62. }
  63. }
  64. // const onMessage = (eventData) => {
  65. // fileUrl.value = eventData.url
  66. // pending.value = false
  67. // }
  68. return {
  69. submit,
  70. pending,
  71. fileUrl,
  72. events
  73. }
  74. }
  75. })
  76. function useSse(): { sseConnected: any; } {
  77. throw new Error("Function not implemented.");
  78. }
  79. </script>