UNPKG

@owdproject/core

Version:

Nuxt Desktop module for browser desktop experiences (windows, shell, apps)

48 lines (40 loc) 1.51 kB
import type { IWindowController } from '@owdproject/core' import { useDesktopWindowStore } from '../stores/storeDesktopWindow' import { useDesktopWorkspaceStore } from '../stores/storeDesktopWorkspace' import { useWorkspaceEdgeDrop } from './useWorkspaceEdgeDrop' import { useWindowSnapDrop } from './useWindowSnapDrop' /** * Wire workspace edge drop and window snap to theme `Window.vue` drag events. */ export function useWindowDragHandlers( getWindow: () => IWindowController | undefined, ) { const desktopWindowStore = useDesktopWindowStore() const desktopWorkspaceStore = useDesktopWorkspaceStore() const { beginWindowDrag, endWindowDrag } = useWorkspaceEdgeDrop() const { beginWindowSnapDrag, endWindowSnapDrag } = useWindowSnapDrop() function onDragStart() { const win = getWindow() if (!win?.state?.id || desktopWorkspaceStore.overview) return beginWindowDrag(win.state.id) beginWindowSnapDrag( win.state.id, desktopWindowStore.workArea, win.isMaximizable, ) } function onDragEnd(data: { left: number; top: number }) { const win = getWindow() if (!win || desktopWorkspaceStore.overview) return const snapped = endWindowSnapDrag(win) if (snapped) return const moved = endWindowDrag(win) if (!moved) { win.actions.setPosition({ x: data.left, y: data.top }) if (win.state.layout && win.state.layout !== 'normal') { win.actions.clearLayout() } } } return { onDragStart, onDragEnd } }