feat: add session search modal (#128)

This commit is contained in:
cl1107
2026-04-22 14:00:34 +08:00
committed by GitHub
parent ffd825afe2
commit f27db3036a
18 changed files with 1355 additions and 126 deletions
@@ -1,10 +1,12 @@
import { onMounted, onUnmounted } from 'vue'
import { useRouter } from 'vue-router'
import { useChatStore } from '@/stores/hermes/chat'
import { useSessionSearch } from './useSessionSearch'
export function useKeyboard() {
const router = useRouter()
const chatStore = useChatStore()
const { sessionSearchOpen, openSessionSearch, closeSessionSearch } = useSessionSearch()
function handleKeydown(e: KeyboardEvent) {
const mod = e.ctrlKey || e.metaKey
@@ -12,14 +14,28 @@ export function useKeyboard() {
if (mod && e.key === 'n') {
e.preventDefault()
chatStore.newChat()
return
}
if (mod && e.key === 'j') {
e.preventDefault()
router.push({ name: 'hermes.jobs' })
return
}
if (mod && e.key.toLowerCase() === 'k') {
if (router.currentRoute.value.name === 'login') return
e.preventDefault()
openSessionSearch()
return
}
if (e.key === 'Escape') {
if (sessionSearchOpen.value) {
e.preventDefault()
closeSessionSearch()
return
}
// Close any open modals — naive-ui handles this internally
const modal = document.querySelector('.n-modal-mask')
if (modal) {
@@ -0,0 +1,19 @@
import { ref } from 'vue'
const sessionSearchOpen = ref(false)
export function useSessionSearch() {
function openSessionSearch() {
sessionSearchOpen.value = true
}
function closeSessionSearch() {
sessionSearchOpen.value = false
}
return {
sessionSearchOpen,
openSessionSearch,
closeSessionSearch,
}
}