From f5af5a1550ebddf2bc4896dc1c17c3290dc98253 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Wed, 13 Aug 2025 15:43:50 +0800 Subject: [PATCH] Add subject-based comment list modal (#7681) --- .../modules/contents/comments/CommentList.vue | 75 ++----- .../comments/components/CommentListItem.vue | 4 +- .../components/SubjectQueryCommentList.vue | 192 ++++++++++++++++++ .../SubjectQueryCommentListModal.vue | 33 +++ .../composables/use-comments-fetch.ts | 50 +++++ .../modules/contents/comments/module.ts | 6 + .../components/entity-fields/TitleField.vue | 47 ++++- .../components/entity-fields/TitleField.vue | 47 ++++- .../presets/posts/components/PostListItem.vue | 49 ++++- ui/src/locales/_missing_translations_es.yaml | 16 +- ui/src/locales/en.yaml | 20 +- ui/src/locales/zh-CN.yaml | 3 + ui/src/locales/zh-TW.yaml | 3 + 13 files changed, 461 insertions(+), 84 deletions(-) create mode 100644 ui/console-src/modules/contents/comments/components/SubjectQueryCommentList.vue create mode 100644 ui/console-src/modules/contents/comments/components/SubjectQueryCommentListModal.vue create mode 100644 ui/console-src/modules/contents/comments/composables/use-comments-fetch.ts diff --git a/ui/console-src/modules/contents/comments/CommentList.vue b/ui/console-src/modules/contents/comments/CommentList.vue index dffc1c70e..f964ee86a 100644 --- a/ui/console-src/modules/contents/comments/CommentList.vue +++ b/ui/console-src/modules/contents/comments/CommentList.vue @@ -1,7 +1,7 @@ + diff --git a/ui/console-src/modules/contents/comments/components/SubjectQueryCommentListModal.vue b/ui/console-src/modules/contents/comments/components/SubjectQueryCommentListModal.vue new file mode 100644 index 000000000..ce31726ef --- /dev/null +++ b/ui/console-src/modules/contents/comments/components/SubjectQueryCommentListModal.vue @@ -0,0 +1,33 @@ + + diff --git a/ui/console-src/modules/contents/comments/composables/use-comments-fetch.ts b/ui/console-src/modules/contents/comments/composables/use-comments-fetch.ts new file mode 100644 index 000000000..37de4aeb6 --- /dev/null +++ b/ui/console-src/modules/contents/comments/composables/use-comments-fetch.ts @@ -0,0 +1,50 @@ +import { consoleApiClient, type ListedCommentList } from "@halo-dev/api-client"; +import { useQuery } from "@tanstack/vue-query"; +import type { Ref } from "vue"; + +export default function useCommentsFetch( + queryKey: string, + page: Ref, + size: Ref, + approved: Ref, + sort: Ref, + user: Ref, + keyword: Ref, + subjectRefKey?: Ref +) { + return useQuery({ + queryKey: [queryKey, page, size, approved, sort, user, keyword], + queryFn: async () => { + const fieldSelectorMap: Record = { + "spec.approved": approved.value, + "spec.subjectRef": subjectRefKey?.value, + }; + + const fieldSelector = Object.entries(fieldSelectorMap) + .map(([key, value]) => { + if (value !== undefined) { + return `${key}=${value}`; + } + }) + .filter(Boolean) as string[]; + + const { data } = await consoleApiClient.content.comment.listComments({ + fieldSelector, + page: page.value, + size: size.value, + sort: [sort.value].filter(Boolean) as string[], + keyword: keyword.value, + ownerName: user.value, + ownerKind: user.value ? "User" : undefined, + }); + + return data; + }, + refetchInterval(data) { + const hasDeletingData = data?.items.some( + (comment) => !!comment.comment.metadata.deletionTimestamp + ); + return hasDeletingData ? 1000 : false; + }, + }); +} diff --git a/ui/console-src/modules/contents/comments/module.ts b/ui/console-src/modules/contents/comments/module.ts index 040d66bdd..27b046217 100644 --- a/ui/console-src/modules/contents/comments/module.ts +++ b/ui/console-src/modules/contents/comments/module.ts @@ -3,8 +3,14 @@ import { IconMessage } from "@halo-dev/components"; import { definePlugin } from "@halo-dev/console-shared"; import { markRaw } from "vue"; import CommentList from "./CommentList.vue"; +import SubjectQueryCommentList from "./components/SubjectQueryCommentList.vue"; +import SubjectQueryCommentListModal from "./components/SubjectQueryCommentListModal.vue"; export default definePlugin({ + components: { + SubjectQueryCommentList, + SubjectQueryCommentListModal, + }, routes: [ { path: "/comments", diff --git a/ui/console-src/modules/contents/pages/components/entity-fields/TitleField.vue b/ui/console-src/modules/contents/pages/components/entity-fields/TitleField.vue index 534f0107a..bc006e348 100644 --- a/ui/console-src/modules/contents/pages/components/entity-fields/TitleField.vue +++ b/ui/console-src/modules/contents/pages/components/entity-fields/TitleField.vue @@ -1,5 +1,6 @@ diff --git a/ui/console-src/modules/contents/posts/components/entity-fields/TitleField.vue b/ui/console-src/modules/contents/posts/components/entity-fields/TitleField.vue index 90d3a1ac4..1599db6cc 100644 --- a/ui/console-src/modules/contents/posts/components/entity-fields/TitleField.vue +++ b/ui/console-src/modules/contents/posts/components/entity-fields/TitleField.vue @@ -1,5 +1,6 @@ diff --git a/ui/console-src/modules/dashboard/widgets/presets/posts/components/PostListItem.vue b/ui/console-src/modules/dashboard/widgets/presets/posts/components/PostListItem.vue index 94d2bd3f2..9d8bb25ff 100644 --- a/ui/console-src/modules/dashboard/widgets/presets/posts/components/PostListItem.vue +++ b/ui/console-src/modules/dashboard/widgets/presets/posts/components/PostListItem.vue @@ -1,6 +1,7 @@