diff --git a/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php b/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php index 9a5006216..d62c6c45c 100644 --- a/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php +++ b/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php @@ -59,7 +59,7 @@ final readonly class ExportGenerationController return new JsonResponse( $this->serializer->serialize( - ['status' => $exportGeneration->getStoredObject()->getStatus(), 'stored_object' => $exportGeneration->getStoredObject()], + $exportGeneration, 'json', [AbstractNormalizer::GROUPS => ['read']], ), diff --git a/src/Bundle/ChillMainBundle/Entity/ExportGeneration.php b/src/Bundle/ChillMainBundle/Entity/ExportGeneration.php index cd9ed5782..de9be0e1c 100644 --- a/src/Bundle/ChillMainBundle/Entity/ExportGeneration.php +++ b/src/Bundle/ChillMainBundle/Entity/ExportGeneration.php @@ -99,6 +99,13 @@ class ExportGeneration implements TrackCreationInterface return $this->savedExport; } + #[Serializer\Groups(['read'])] + #[Serializer\SerializedName('status')] + public function getStatus(): string + { + return $this->getStoredObject()->getStatus(); + } + public function setSavedExport(SavedExport $savedExport): self { $this->savedExport = $savedExport; diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/api.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts similarity index 50% rename from src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/api.ts rename to src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts index 368d8849b..d2d4db535 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/api.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts @@ -1,14 +1,19 @@ import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types"; import { makeFetch } from "ChillMainAssets/lib/api/apiMethods"; +import {ExportGeneration} from "ChillMainAssets/types"; export const fetchExportGenerationStatus = async ( exportGenerationId: string, -): Promise< - | { status: "pending" } - | { status: StoredObjectStatus; stored_object: StoredObject } -> => { - return makeFetch( +): Promise => + makeFetch( "GET", `/api/1.0/main/export-generation/${exportGenerationId}/object`, ); -}; + +export const generateFromSavedExport = async ( + savedExportUuid: string, +): Promise => + makeFetch( + "POST", + `/api/1.0/main/export/export-generation/${savedExportUuid}` + ); diff --git a/src/Bundle/ChillMainBundle/Resources/public/types.ts b/src/Bundle/ChillMainBundle/Resources/public/types.ts index b7b62980b..0c8b0ce6e 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/types.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/types.ts @@ -1,4 +1,5 @@ import { GenericDoc } from "ChillDocStoreAssets/types/generic_doc"; +import {StoredObject, StoredObjectStatus} from "ChillDocStoreAssets/types"; export interface DateTime { datetime: string; @@ -203,3 +204,13 @@ export interface WorkflowAttachment { updatedBy: User | null; genericDoc: null | GenericDoc; } + +export interface ExportGeneration { + id: string; + type: "export_generation"; + exportAlias: string; + createdBy: User | null; + createdAt: DateTime | null; + status: StoredObjectStatus; + storedObject: StoredObject; +} diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue index dd492da27..3c5b48d3e 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue @@ -8,8 +8,9 @@ import { } from "translator"; import { computed, onMounted, ref } from "vue"; import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types"; -import { fetchExportGenerationStatus } from "ChillMainAssets/vuejs/DownloadExport/api"; +import { fetchExportGenerationStatus } from "ChillMainAssets/lib/api/export"; import DocumentActionButtonsGroup from "ChillDocStoreAssets/vuejs/DocumentActionButtonsGroup.vue"; +import {ExportGeneration} from "ChillMainAssets/types"; interface AppProps { exportGenerationId: string; @@ -19,8 +20,16 @@ interface AppProps { const props = defineProps(); -const status = ref("pending"); -const storedObject = ref(null); +const exportGeneration = ref(null); + +const status = computed(() => exportGeneration.value?.status ?? 'pending'); +const storedObject = computed(() => { + if (exportGeneration.value === null) { + return null; + } + + return exportGeneration.value?.storedObject; +}) ; const isPending = computed(() => status.value === "pending"); const isFetching = computed( @@ -56,18 +65,15 @@ const checkForReady = function (): void { }; const onObjectNewStatusCallback = async function (): Promise { - let status_response = await fetchExportGenerationStatus( + exportGeneration.value = await fetchExportGenerationStatus( props.exportGenerationId, ); - if (status_response.status === "pending") { + if (isPending) { checkForReady(); return Promise.resolve(); } - status.value = status_response.status; - storedObject.value = status_response.stored_object; - return Promise.resolve(); };