mirror of
https://github.com/penxio/penx.git
synced 2026-01-13 23:48:18 -05:00
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import { sendMessage } from '@/lib/message'
|
|
import { browser } from '#imports'
|
|
import { closeSidepanel, openSidepanel } from './sidepanel'
|
|
import { state } from './state'
|
|
|
|
export async function setupSidePanel() {
|
|
console.log('Setting up side panel...')
|
|
|
|
state.isOpen = false
|
|
|
|
// Handle extension icon click to open side panel
|
|
browser.action.onClicked.addListener(async (tab) => {
|
|
const isOpen = state.isOpen
|
|
|
|
if (isOpen) {
|
|
return closeSidepanel()
|
|
}
|
|
|
|
console.log('Extension icon clicked, opening side panel for tab:', tab.id)
|
|
openSidepanel(tab.id!)
|
|
})
|
|
|
|
// Handle keyboard shortcut to toggle side panel
|
|
browser.commands.onCommand.addListener(async (command) => {
|
|
if (command === 'toggle-sidepanel') {
|
|
console.log('Toggle sidepanel shortcut triggered')
|
|
// await toggleSidepanel()
|
|
|
|
if (state.isOpen) {
|
|
await closeSidepanel()
|
|
} else {
|
|
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
|
openSidepanel(tabs[0].id!)
|
|
})
|
|
}
|
|
}
|
|
|
|
if (command === 'toggle-panel') {
|
|
sendMessage('togglePanel', {})
|
|
}
|
|
})
|
|
}
|
|
|
|
browser.runtime.onConnect.addListener((port) => {
|
|
// only handle sidepanel-port
|
|
if (port.name !== 'sidepanel-port') return
|
|
|
|
let lastHeartbeat = Date.now()
|
|
|
|
port.onMessage.addListener((msg) => {
|
|
if (msg.type === 'sidepanel-ready') {
|
|
console.log('[Background] Side Panel is ready')
|
|
}
|
|
|
|
if (msg.type === 'sidepanel-heartbeat') {
|
|
lastHeartbeat = msg.timestamp || Date.now()
|
|
console.log(
|
|
'[Background] Heartbeat received:',
|
|
new Date(lastHeartbeat).toISOString(),
|
|
)
|
|
state.isOpen = true
|
|
}
|
|
})
|
|
|
|
port.onDisconnect.addListener(() => {
|
|
console.log(
|
|
'[Background] Side Panel closed, last heartbeat:',
|
|
new Date(lastHeartbeat).toISOString(),
|
|
)
|
|
state.isOpen = false
|
|
})
|
|
})
|