- Tauri v2 + Vue 3 + TypeScript + Element Plus
- Connection management (CRUD + enable/disable/test)
- Preset system with {{variable}} placeholders
- Dashboard with live message scrolling + topic tree
- Payload inspector (JSON/Hex/Base64/Plain)
- Protocol-level logging (file + UI dual channel)
- Global variable manager with localStorage persistence
- MQTT v5 property support (user properties, content type, etc.)
- SubAck result tracking with subscribe_tracked API
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import { ref, computed } from 'vue'
|
|
import type { MqttMessage } from '../types/mqtt'
|
|
|
|
const MAX_MESSAGES = 500
|
|
|
|
const messages = ref<MqttMessage[]>([])
|
|
|
|
export function useMessages() {
|
|
function push(msg: MqttMessage) {
|
|
messages.value.push(msg)
|
|
if (messages.value.length > MAX_MESSAGES) {
|
|
messages.value.splice(0, messages.value.length - MAX_MESSAGES)
|
|
}
|
|
}
|
|
|
|
function clear() {
|
|
messages.value = []
|
|
}
|
|
|
|
function filterByTopic(topicFilter: string): MqttMessage[] {
|
|
if (!topicFilter.trim()) return messages.value
|
|
const filter = topicFilter.trim().toLowerCase()
|
|
return messages.value.filter((m) => m.topic.toLowerCase().includes(filter))
|
|
}
|
|
|
|
function filterByConnection(connectionId: string): MqttMessage[] {
|
|
if (!connectionId) return messages.value
|
|
return messages.value.filter((m) => m.connectionId === connectionId)
|
|
}
|
|
|
|
const messageCount = computed(() => messages.value.length)
|
|
|
|
return {
|
|
messages,
|
|
push,
|
|
clear,
|
|
filterByTopic,
|
|
filterByConnection,
|
|
messageCount,
|
|
}
|
|
} |