diff --git a/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php b/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php index d62c6c45c..d58857f60 100644 --- a/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php +++ b/src/Bundle/ChillMainBundle/Controller/ExportGenerationController.php @@ -53,10 +53,6 @@ final readonly class ExportGenerationController throw new AccessDeniedHttpException('Only users can download an export'); } - if (StoredObject::STATUS_PENDING === $exportGeneration->getStoredObject()->getStatus()) { - return new JsonResponse(['status' => 'pending']); - } - return new JsonResponse( $this->serializer->serialize( $exportGeneration, diff --git a/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts index d2d4db535..7e350b102 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/api/export.ts @@ -1,6 +1,5 @@ -import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types"; import { makeFetch } from "ChillMainAssets/lib/api/apiMethods"; -import {ExportGeneration} from "ChillMainAssets/types"; +import { ExportGeneration } from "ChillMainAssets/types"; export const fetchExportGenerationStatus = async ( exportGenerationId: string, @@ -15,5 +14,5 @@ export const generateFromSavedExport = async ( ): Promise => makeFetch( "POST", - `/api/1.0/main/export/export-generation/${savedExportUuid}` + `/api/1.0/main/export/export-generation/create-from-saved-export/${savedExportUuid}`, ); diff --git a/src/Bundle/ChillMainBundle/Resources/public/lib/api/return_path.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/api/return_path.ts new file mode 100644 index 000000000..e444aa2e5 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/api/return_path.ts @@ -0,0 +1,3 @@ +export function buildReturnPath(location: Location): string { + return location.pathname + location.search; +} diff --git a/src/Bundle/ChillMainBundle/Resources/public/types.ts b/src/Bundle/ChillMainBundle/Resources/public/types.ts index 0c8b0ce6e..0129b58cf 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/types.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/types.ts @@ -1,5 +1,5 @@ import { GenericDoc } from "ChillDocStoreAssets/types/generic_doc"; -import {StoredObject, StoredObjectStatus} from "ChillDocStoreAssets/types"; +import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types"; export interface DateTime { datetime: string; diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue index 3c5b48d3e..033eb6cac 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue @@ -10,7 +10,7 @@ import { computed, onMounted, ref } from "vue"; import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types"; import { fetchExportGenerationStatus } from "ChillMainAssets/lib/api/export"; import DocumentActionButtonsGroup from "ChillDocStoreAssets/vuejs/DocumentActionButtonsGroup.vue"; -import {ExportGeneration} from "ChillMainAssets/types"; +import { ExportGeneration } from "ChillMainAssets/types"; interface AppProps { exportGenerationId: string; @@ -20,16 +20,18 @@ interface AppProps { const props = defineProps(); -const exportGeneration = ref(null); +const exportGeneration = ref(null); -const status = computed(() => exportGeneration.value?.status ?? 'pending'); +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( @@ -69,7 +71,7 @@ const onObjectNewStatusCallback = async function (): Promise { props.exportGenerationId, ); - if (isPending) { + if (isPending.value) { checkForReady(); return Promise.resolve(); } diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/App.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/App.vue new file mode 100644 index 000000000..6f021ac80 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/App.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/Component/GenerateButton.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/Component/GenerateButton.vue new file mode 100644 index 000000000..e0a56094b --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/Component/GenerateButton.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/index.ts b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/index.ts new file mode 100644 index 000000000..518746dea --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/SavedExportButtons/index.ts @@ -0,0 +1,13 @@ +import { createApp } from "vue"; + +import App from "./App.vue"; + +const buttons = document.querySelectorAll( + "[data-generate-export-button]", +); + +buttons.forEach((button) => { + const savedExportUuid = button.dataset.savedExportUuid as string; + + createApp(App, { savedExportUuid, savedExportAlias: "" }).mount(button); +}); diff --git a/src/Bundle/ChillMainBundle/Resources/views/SavedExport/index.html.twig b/src/Bundle/ChillMainBundle/Resources/views/SavedExport/index.html.twig index 7e0517e31..d354cd2ae 100644 --- a/src/Bundle/ChillMainBundle/Resources/views/SavedExport/index.html.twig +++ b/src/Bundle/ChillMainBundle/Resources/views/SavedExport/index.html.twig @@ -1,5 +1,13 @@ {% extends "@ChillMain/layout.html.twig" %} +{% block css %} + {{ encore_entry_link_tags('mod_saved_export_button') }} +{% endblock %} + +{% block js %} + {{ encore_entry_script_tags('mod_saved_export_button') }} +{% endblock %} + {% block title %}{{ 'saved_export.My saved exports'|trans }}{% endblock %} {% block content %} @@ -31,6 +39,9 @@
    +
  • +
    +
  • diff --git a/src/Bundle/ChillMainBundle/chill.webpack.config.js b/src/Bundle/ChillMainBundle/chill.webpack.config.js index a132ac008..8b8f7d0b3 100644 --- a/src/Bundle/ChillMainBundle/chill.webpack.config.js +++ b/src/Bundle/ChillMainBundle/chill.webpack.config.js @@ -110,6 +110,10 @@ module.exports = function (encore, entries) { "mod_workflow_attachment", __dirname + "/Resources/public/vuejs/WorkflowAttachment/index", ); + encore.addEntry( + "mod_saved_export_button", + __dirname + "/Resources/public/vuejs/SavedExportButtons/index.ts", + ); // Vue entrypoints encore.addEntry( diff --git a/src/Bundle/ChillMainBundle/translations/messages.fr.yml b/src/Bundle/ChillMainBundle/translations/messages.fr.yml index c7f969d57..a37f9ed23 100644 --- a/src/Bundle/ChillMainBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillMainBundle/translations/messages.fr.yml @@ -718,6 +718,7 @@ notification: export: generation: Export generation is pending: La génération de l'export est en cours + Export generation is pending_short: En cours Come back later: Retour à l'index Too many retries: Le nombre de vérification de la disponibilité de l'export a échoué. Essayez de recharger la page. Error while generating export: Erreur interne lors de la génération de l'export @@ -791,7 +792,7 @@ saved_export: Created on %date%: Créé le %date% update_title_and_description: Modifier le titre et la description update_filters_aggregators_and_execute: Modifier les filtres et regroupements et télécharger - execute: Télécharger + execute: Générer Update existing: Mettre à jour le rapport enregistré existant absence: