From ddd59680e9d7f34715329f9f3feb1b65aff62c19 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Tue, 13 Aug 2024 11:42:55 +0800 Subject: [PATCH] refactor: improve part of the page operation logic using the patch api (#6463) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /area ui /kind improvement /milestone 2.19.x #### What this PR does / why we need it: 使用 patch 接口重构页面的删除、可见性修改等逻辑。 #### Which issue(s) this PR fixes: None #### Special notes for your reviewer: 测试页面删除、可见性修改功能是否符合预期。 #### Does this PR introduce a user-facing change? ```release-note 使用 patch 接口重构页面的删除、可见性修改等逻辑。 ``` --- .../contents/pages/DeletedSinglePageList.vue | 30 ++++---- .../modules/contents/pages/SinglePageList.vue | 14 ++-- .../pages/components/SinglePageListItem.vue | 70 ++++++++++--------- 3 files changed, 61 insertions(+), 53 deletions(-) diff --git a/ui/console-src/modules/contents/pages/DeletedSinglePageList.vue b/ui/console-src/modules/contents/pages/DeletedSinglePageList.vue index 25fa625e0..90a9a052e 100644 --- a/ui/console-src/modules/contents/pages/DeletedSinglePageList.vue +++ b/ui/console-src/modules/contents/pages/DeletedSinglePageList.vue @@ -23,7 +23,6 @@ import { VStatusDot, } from "@halo-dev/components"; import { useQuery } from "@tanstack/vue-query"; -import { cloneDeep } from "lodash-es"; import { ref, watch } from "vue"; import { useI18n } from "vue-i18n"; @@ -132,12 +131,17 @@ const handleRecovery = async (singlePage: SinglePage) => { confirmText: t("core.common.buttons.confirm"), cancelText: t("core.common.buttons.cancel"), onConfirm: async () => { - const singlePageToUpdate = cloneDeep(singlePage); - singlePageToUpdate.spec.deleted = false; - await coreApiClient.content.singlePage.updateSinglePage({ - name: singlePageToUpdate.metadata.name, - singlePage: singlePageToUpdate, + await coreApiClient.content.singlePage.patchSinglePage({ + name: singlePage.metadata.name, + jsonPatchInner: [ + { + op: "add", + path: "/spec/deleted", + value: false, + }, + ], }); + await refetch(); Toast.success(t("core.common.toast.recovery_success")); @@ -164,15 +168,15 @@ const handleRecoveryInBatch = async () => { return Promise.resolve(); } - return coreApiClient.content.singlePage.updateSinglePage({ + return coreApiClient.content.singlePage.patchSinglePage({ name: singlePage.metadata.name, - singlePage: { - ...singlePage, - spec: { - ...singlePage.spec, - deleted: false, + jsonPatchInner: [ + { + op: "add", + path: "/spec/deleted", + value: false, }, - }, + ], }); }) ); diff --git a/ui/console-src/modules/contents/pages/SinglePageList.vue b/ui/console-src/modules/contents/pages/SinglePageList.vue index 508b4099c..77b25c0ae 100644 --- a/ui/console-src/modules/contents/pages/SinglePageList.vue +++ b/ui/console-src/modules/contents/pages/SinglePageList.vue @@ -237,15 +237,15 @@ const handleDeleteInBatch = async () => { return Promise.resolve(); } - return coreApiClient.content.singlePage.updateSinglePage({ + return coreApiClient.content.singlePage.patchSinglePage({ name: page.metadata.name, - singlePage: { - ...page, - spec: { - ...page.spec, - deleted: true, + jsonPatchInner: [ + { + op: "add", + path: "/spec/deleted", + value: true, }, - }, + ], }); }) ); diff --git a/ui/console-src/modules/contents/pages/components/SinglePageListItem.vue b/ui/console-src/modules/contents/pages/components/SinglePageListItem.vue index a4de2d71d..c6e5bf450 100644 --- a/ui/console-src/modules/contents/pages/components/SinglePageListItem.vue +++ b/ui/console-src/modules/contents/pages/components/SinglePageListItem.vue @@ -19,7 +19,6 @@ import { VStatusDot, } from "@halo-dev/components"; import { useMutation, useQueryClient } from "@tanstack/vue-query"; -import { cloneDeep } from "lodash-es"; import type { Ref } from "vue"; import { computed, inject, ref } from "vue"; import { useI18n } from "vue-i18n"; @@ -71,24 +70,21 @@ const isPublishing = computed(() => { const { mutate: changeVisibleMutation } = useMutation({ mutationFn: async (singlePage: SinglePage) => { - const { data } = await coreApiClient.content.singlePage.getSinglePage({ + return await coreApiClient.content.singlePage.patchSinglePage({ name: singlePage.metadata.name, + jsonPatchInner: [ + { + op: "add", + path: "/spec/visible", + value: singlePage.spec.visible === "PRIVATE" ? "PUBLIC" : "PRIVATE", + }, + ], }); - data.spec.visible = data.spec.visible === "PRIVATE" ? "PUBLIC" : "PRIVATE"; - await coreApiClient.content.singlePage.updateSinglePage( - { - name: singlePage.metadata.name, - singlePage: data, - }, - { - mute: true, - } - ); - await queryClient.invalidateQueries({ queryKey: ["singlePages"] }); }, retry: 3, onSuccess: () => { Toast.success(t("core.common.toast.operation_success")); + queryClient.invalidateQueries({ queryKey: ["singlePages"] }); }, onError: () => { Toast.error(t("core.common.toast.operation_failed")); @@ -103,12 +99,17 @@ const handleDelete = async () => { confirmText: t("core.common.buttons.confirm"), cancelText: t("core.common.buttons.cancel"), onConfirm: async () => { - const singlePageToUpdate = cloneDeep(props.singlePage.page); - singlePageToUpdate.spec.deleted = true; - await coreApiClient.content.singlePage.updateSinglePage({ + await coreApiClient.content.singlePage.patchSinglePage({ name: props.singlePage.page.metadata.name, - singlePage: singlePageToUpdate, + jsonPatchInner: [ + { + op: "add", + path: "/spec/deleted", + value: true, + }, + ], }); + await queryClient.invalidateQueries({ queryKey: ["singlePages"] }); Toast.success(t("core.common.toast.delete_success")); @@ -195,22 +196,25 @@ const handleDelete = async () => { - - - + + + + + +