|
|
@@ -14,7 +14,7 @@
|
|
|
>
|
|
|
<div class="ma-12">
|
|
|
<v-btn
|
|
|
- v-if="!pending && fileUrl === null"
|
|
|
+ v-if="!pending && file().value === null"
|
|
|
@click="submit"
|
|
|
>
|
|
|
{{ $t('generate') }}
|
|
|
@@ -25,48 +25,85 @@
|
|
|
color="primary"
|
|
|
:loading="pending"
|
|
|
:disabled="pending"
|
|
|
- :href="fileUrl">
|
|
|
+ :href="file().value ? file().value.url : ''">
|
|
|
{{ $t('download') }}
|
|
|
</v-btn>
|
|
|
</div>
|
|
|
</v-form>
|
|
|
<!-- <<< for debugging purposes, TODO: remove before deploying -->
|
|
|
- <ul>
|
|
|
- <li v-for="event in events">{{ event }}</li>
|
|
|
- </ul>
|
|
|
+ <div v-if="file !== null">
|
|
|
+ {{ file().value }}
|
|
|
+ </div>
|
|
|
+<!-- <ul>-->
|
|
|
+<!-- <li v-for="event in events">{{ event }}</li>-->
|
|
|
+<!-- </ul>-->
|
|
|
<!-- >>> for debugging purposes -->
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts">
|
|
|
-import {defineComponent, Ref, ref, useContext} from "@nuxtjs/composition-api";
|
|
|
-import {HTTP_METHOD, QUERY_TYPE} from "~/types/enums";
|
|
|
+import {computed, ComputedRef, defineComponent, Ref, ref, useContext} from "@nuxtjs/composition-api";
|
|
|
+import {DENORMALIZER_TYPE, QUERY_TYPE} from "~/types/enums";
|
|
|
import DataPersister from "~/services/data/dataPersister";
|
|
|
import {DataPersisterArgs} from "~/types/interfaces";
|
|
|
+import { Context } from "@nuxt/types";
|
|
|
+import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository";
|
|
|
+import {Model, Query} from "@vuex-orm/core";
|
|
|
+import {repositoryHelper} from "~/services/store/repository";
|
|
|
+import {File} from "~/models/Core/File";
|
|
|
+import {queryHelper} from "~/services/store/query";
|
|
|
+import Serializer from "~/services/serializer/serializer";
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'OrganizationCmfLicence',
|
|
|
setup() {
|
|
|
- const { store } = useContext()
|
|
|
+ const context = useContext()
|
|
|
|
|
|
- let pending: Ref<boolean> = ref(false)
|
|
|
- let fileUrl: Ref<string | null> = ref(null)
|
|
|
|
|
|
- const async = () => { return store.state.sse.connected }
|
|
|
+ let fileId: Ref<number | null> = ref(null)
|
|
|
|
|
|
- let events: Ref<Array<Array<any>>> = ref(store.state.sse.events)
|
|
|
+ const file: ComputedRef<File | null> = computed(() => {
|
|
|
+ if (fileId.value === null)
|
|
|
+ return null
|
|
|
+ return queryHelper.getItem(query, fileId.value) as File
|
|
|
+ })
|
|
|
+
|
|
|
+ let pending: ComputedRef<boolean> = computed(() => {
|
|
|
+ return file.value !== null && file.value.status === 'PENDING'
|
|
|
+ })
|
|
|
+
|
|
|
+ const async = () => { return context.store.state.sse.connected }
|
|
|
+
|
|
|
+ const repository: VuexRepository<Model> = repositoryHelper.getRepository(File)
|
|
|
+ const query: Query = repository.query()
|
|
|
|
|
|
const submit = async () => {
|
|
|
- const response = await DataPersister.request(
|
|
|
- '/api/export/cmf-licence/organization',
|
|
|
- HTTP_METHOD.POST,
|
|
|
- { type: QUERY_TYPE.DEFAULT, data: { format: 'pdf', async: true }, withCredentials: true } as DataPersisterArgs
|
|
|
+ const dataPersister = new DataPersister()
|
|
|
+ dataPersister.initCtx(context as unknown as Context)
|
|
|
+
|
|
|
+ const response = await dataPersister.invoke(
|
|
|
+ {
|
|
|
+ url: '/api/export/cmf-licence/organization',
|
|
|
+ type: QUERY_TYPE.DEFAULT,
|
|
|
+ data: { format: 'pdf', async: true },
|
|
|
+ withCredentials: true
|
|
|
+ } as DataPersisterArgs
|
|
|
)
|
|
|
+
|
|
|
if (async()) {
|
|
|
- pending.value = true
|
|
|
+ // pending.value = true
|
|
|
+ console.log(response)
|
|
|
+ let entry = Serializer.denormalize(response.data, DENORMALIZER_TYPE.HYDRA)
|
|
|
+ let model = repositoryHelper.persist(File, entry.data) as any
|
|
|
+
|
|
|
+ console.log(model)
|
|
|
+ fileId.value = model.id
|
|
|
+ // file.value = () => { return queryHelper.getItem(query, model.id) as File }
|
|
|
+ // file.value = queryHelper.getItem(query, model.id) as File
|
|
|
+
|
|
|
} else {
|
|
|
- console.warn('File downloaded synchronously')
|
|
|
- fileUrl.value = JSON.parse(response).url
|
|
|
+ console.error('SSE unavailable - File downloaded synchronously')
|
|
|
+ // file.value = response
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -78,8 +115,7 @@ export default defineComponent({
|
|
|
return {
|
|
|
submit,
|
|
|
pending,
|
|
|
- fileUrl,
|
|
|
- events
|
|
|
+ file: () => file
|
|
|
}
|
|
|
}
|
|
|
})
|