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 @@