mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-23 14:33:36 +08:00
feat(desktop): add previewBridge wrapper over tauri preview commands
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
633ab63f36
commit
25ea37bb3d
31
desktop/src/lib/previewBridge.test.ts
Normal file
31
desktop/src/lib/previewBridge.test.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||||
|
import type { WebviewBounds } from '../components/browser/computeWebviewBounds'
|
||||||
|
|
||||||
|
const invoke = vi.fn()
|
||||||
|
vi.mock('@tauri-apps/api/core', () => ({ invoke: (...a: unknown[]) => invoke(...a) }))
|
||||||
|
vi.mock('./desktopRuntime', () => ({ isTauriRuntime: () => true }))
|
||||||
|
|
||||||
|
afterEach(() => { invoke.mockReset() })
|
||||||
|
|
||||||
|
describe('previewBridge', () => {
|
||||||
|
it('openPreview forwards url + bounds to preview_open', async () => {
|
||||||
|
const { previewBridge } = await import('./previewBridge')
|
||||||
|
const bounds: WebviewBounds = { x: 1, y: 2, width: 3, height: 4 }
|
||||||
|
await previewBridge.open('http://localhost/a', bounds)
|
||||||
|
expect(invoke).toHaveBeenCalledWith('preview_open', { url: 'http://localhost/a', bounds })
|
||||||
|
})
|
||||||
|
|
||||||
|
it('setBounds forwards to preview_set_bounds', async () => {
|
||||||
|
const { previewBridge } = await import('./previewBridge')
|
||||||
|
await previewBridge.setBounds({ x: 0, y: 0, width: 10, height: 10 })
|
||||||
|
expect(invoke).toHaveBeenCalledWith('preview_set_bounds', { bounds: { x: 0, y: 0, width: 10, height: 10 } })
|
||||||
|
})
|
||||||
|
|
||||||
|
it('is a no-op outside the Tauri runtime', async () => {
|
||||||
|
vi.resetModules()
|
||||||
|
vi.doMock('./desktopRuntime', () => ({ isTauriRuntime: () => false }))
|
||||||
|
const { previewBridge } = await import('./previewBridge')
|
||||||
|
await previewBridge.open('http://localhost/a', { x: 0, y: 0, width: 1, height: 1 })
|
||||||
|
expect(invoke).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
})
|
||||||
16
desktop/src/lib/previewBridge.ts
Normal file
16
desktop/src/lib/previewBridge.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { invoke } from '@tauri-apps/api/core'
|
||||||
|
import { isTauriRuntime } from './desktopRuntime'
|
||||||
|
import type { WebviewBounds } from '../components/browser/computeWebviewBounds'
|
||||||
|
|
||||||
|
async function call(cmd: string, args?: Record<string, unknown>): Promise<void> {
|
||||||
|
if (!isTauriRuntime()) return
|
||||||
|
await invoke(cmd, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const previewBridge = {
|
||||||
|
open: (url: string, bounds: WebviewBounds) => call('preview_open', { url, bounds }),
|
||||||
|
navigate: (url: string) => call('preview_navigate', { url }),
|
||||||
|
setBounds: (bounds: WebviewBounds) => call('preview_set_bounds', { bounds }),
|
||||||
|
setVisible: (visible: boolean) => call('preview_set_visible', { visible }),
|
||||||
|
close: () => call('preview_close'),
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user