From 47f575de92d88a23aae8dac7eab687a6b4381ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 18 Sep 2024 23:54:06 +0200 Subject: [PATCH] Enhance version restoration and download features Introduce a version restoration button and logic to track restored versions throughout the UI. Update download buttons to display action strings conditionally and implement toast notifications for version restoration. --- ...toredObjectRestoreVersionApiController.php | 2 +- .../StoredObjectVersionApiController.php | 2 +- .../document_action_buttons_group/index.ts | 3 +- .../Resources/public/types.ts | 1 + .../vuejs/DocumentActionButtonsGroup.vue | 2 +- .../StoredObjectButton/DownloadButton.vue | 11 +- .../StoredObjectButton/HistoryButton.vue | 6 +- .../HistoryButton/HistoryButtonList.vue | 48 ++++++++- .../HistoryButton/HistoryButtonListItem.vue | 100 ++++++++++++++++-- .../HistoryButton/HistoryButtonModal.vue | 13 ++- .../HistoryButton/RestoreVersionButton.vue | 32 ++++++ .../StoredObjectButton/HistoryButton/api.ts | 8 +- .../StoredObjectVersionNormalizer.php | 6 ++ 13 files changed, 204 insertions(+), 30 deletions(-) create mode 100644 src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton/RestoreVersionButton.vue diff --git a/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectRestoreVersionApiController.php b/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectRestoreVersionApiController.php index 7e9c12943..e3b4702f5 100644 --- a/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectRestoreVersionApiController.php +++ b/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectRestoreVersionApiController.php @@ -40,7 +40,7 @@ final readonly class StoredObjectRestoreVersionApiController $this->entityManager->flush(); return new JsonResponse( - $this->serializer->serialize($newVersion, 'json', [AbstractNormalizer::GROUPS => ['read', StoredObjectVersionNormalizer::WITH_POINT_IN_TIMES_CONTEXT]]), + $this->serializer->serialize($newVersion, 'json', [AbstractNormalizer::GROUPS => ['read', StoredObjectVersionNormalizer::WITH_POINT_IN_TIMES_CONTEXT, StoredObjectVersionNormalizer::WITH_RESTORED_CONTEXT]]), json: true ); } diff --git a/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectVersionApiController.php b/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectVersionApiController.php index 0ffbfc719..819eb9f84 100644 --- a/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectVersionApiController.php +++ b/src/Bundle/ChillDocStoreBundle/Controller/StoredObjectVersionApiController.php @@ -61,7 +61,7 @@ final readonly class StoredObjectVersionApiController $this->serializer->serialize( new Collection($items, $paginator), 'json', - [AbstractNormalizer::GROUPS => ['read', StoredObjectVersionNormalizer::WITH_POINT_IN_TIMES_CONTEXT]] + [AbstractNormalizer::GROUPS => ['read', StoredObjectVersionNormalizer::WITH_POINT_IN_TIMES_CONTEXT, StoredObjectVersionNormalizer::WITH_RESTORED_CONTEXT]] ), json: true ); diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts b/src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts index 77eb8c2c9..f9cf13a97 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts @@ -3,6 +3,7 @@ import DocumentActionButtonsGroup from "../../vuejs/DocumentActionButtonsGroup.v import {createApp} from "vue"; import {StoredObject, StoredObjectStatusChange} from "../../types"; import {is_object_ready} from "../../vuejs/StoredObjectButton/helpers"; +import ToastPlugin from "vue-toast-notification"; const i18n = _createI18n({}); @@ -48,6 +49,6 @@ window.addEventListener('DOMContentLoaded', function (e) { } }); - app.use(i18n).mount(el); + app.use(i18n).use(ToastPlugin).mount(el); }) }); diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/types.ts b/src/Bundle/ChillDocStoreBundle/Resources/public/types.ts index a6ce41512..f93e9c5b7 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/types.ts +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/types.ts @@ -64,6 +64,7 @@ export interface StoredObjectStatusChange { export interface StoredObjectVersionWithPointInTime extends StoredObjectVersionPersisted { "point-in-times": StoredObjectPointInTime[]; + "from-restored": StoredObjectVersionPersisted|null; } export interface StoredObjectPointInTime { diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentActionButtonsGroup.vue b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentActionButtonsGroup.vue index 614dc7a78..9c7dac095 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentActionButtonsGroup.vue +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentActionButtonsGroup.vue @@ -14,7 +14,7 @@
  • - +
  • diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/DownloadButton.vue b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/DownloadButton.vue index 92f82dc9d..d1efabcee 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/DownloadButton.vue +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/DownloadButton.vue @@ -1,11 +1,11 @@ @@ -20,6 +20,7 @@ interface DownloadButtonConfig { atVersion: StoredObjectVersion, classes: { [k: string]: boolean }, filename?: string, + displayActionStringInButton: boolean, } interface DownloadButtonState { @@ -28,7 +29,7 @@ interface DownloadButtonState { href_url: string, } -const props = defineProps(); +const props = withDefaults(defineProps(), {displayActionStringInButton: true}); const state: DownloadButtonState = reactive({is_ready: false, is_running: false, href_url: "#"}); const open_button = ref(null); diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton.vue b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton.vue index 108256909..547416879 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton.vue +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton.vue @@ -36,11 +36,15 @@ const download_version_and_open_modal = async function (): Promise { } } +const onRestoreVersion = ({newVersion}: {newVersion: StoredObjectVersionWithPointInTime}) => { + state.versions.unshift(newVersion); +} +