From 2fe26052a73a2c1e8a70ffab13689b5e38e885d2 Mon Sep 17 00:00:00 2001 From: Guoyu Su Date: Mon, 31 Aug 2026 23:47:51 +0800 Subject: [PATCH] feat(kafka): add message display ordering --- .../src/components/mq/MessageBrowser.vue | 17 +++++- .../mq/__tests__/MessageBrowser.spec.ts | 53 ++++++++++++++++++- apps/desktop/src/i18n/locales/en.ts | 9 ++-- apps/desktop/src/i18n/locales/es.ts | 9 ++-- apps/desktop/src/i18n/locales/it.ts | 9 ++-- apps/desktop/src/i18n/locales/ja.ts | 9 ++-- apps/desktop/src/i18n/locales/ko.ts | 9 ++-- apps/desktop/src/i18n/locales/pt-BR.ts | 9 ++-- apps/desktop/src/i18n/locales/zh-CN.ts | 9 ++-- apps/desktop/src/i18n/locales/zh-TW.ts | 9 ++-- .../lib/mq/__tests__/kafkaMessageSort.spec.ts | 32 +++++++++++ apps/desktop/src/lib/mq/kafkaMessageSort.ts | 23 ++++++++ 12 files changed, 171 insertions(+), 26 deletions(-) create mode 100644 apps/desktop/src/lib/mq/__tests__/kafkaMessageSort.spec.ts create mode 100644 apps/desktop/src/lib/mq/kafkaMessageSort.ts diff --git a/apps/desktop/src/components/mq/MessageBrowser.vue b/apps/desktop/src/components/mq/MessageBrowser.vue index a0a62a2cbe..447674b16e 100644 --- a/apps/desktop/src/components/mq/MessageBrowser.vue +++ b/apps/desktop/src/components/mq/MessageBrowser.vue @@ -7,6 +7,7 @@ import { mqPeekMessages } from "@/lib/backend/api"; import { formatError } from "@/lib/backend/errorUtils"; import { copyToClipboard } from "@/lib/common/clipboard"; import { buildKafkaMessageSearchText, kafkaMessageSearchTextMatches, normalizeKafkaMessageSearchQuery } from "@/lib/mq/kafkaMessageSearch"; +import { sortKafkaMessagesByPublishTime, type KafkaMessageDisplayOrder } from "@/lib/mq/kafkaMessageSort"; import { parseNonNegativeSafeInteger } from "@/lib/mq/mqPeekFilters"; import { useToast } from "@/composables/useToast"; import { Button } from "@/components/ui/button"; @@ -40,6 +41,7 @@ const advancedExpanded = ref(false); const messageSearchQuery = ref(""); type KafkaPeekStartPosition = NonNullable; const kafkaStartPosition = ref("latest"); +const kafkaMessageDisplayOrder = ref("newest"); let messageRequestVersion = 0; const isKafka = computed(() => props.mqSystemKind === "kafka"); @@ -57,6 +59,7 @@ const filteredMessages = computed(() => { if (!query) return messages.value; return searchableMessages.value.filter(({ searchText }) => kafkaMessageSearchTextMatches(searchText, query)).map(({ message }) => message); }); +const displayedMessages = computed(() => (isKafka.value ? sortKafkaMessagesByPublishTime(filteredMessages.value, kafkaMessageDisplayOrder.value) : filteredMessages.value)); function peekGroupName(): string { if (props.mqSystemKind === "rocketmq") return "__dbx_rocketmq_viewer__"; @@ -223,6 +226,18 @@ watch(kafkaStartPosition, () => { +