aboutsummaryrefslogtreecommitdiff
path: root/src/stores/useContextMenuStore.ts
blob: a0fd2cf4fadac8680efce74a144a1d3135c544c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { create } from 'zustand'

export type ContextMenuIcon = 'copy' | 'cut' | 'paste' | 'undo' | 'redo' | 'selectAll' | 'close' | 'folder' | 'file' | 'link' | 'rename' | 'trash'

export interface ContextMenuItem {
  id: string
  label: string
  shortcut?: string
  icon?: ContextMenuIcon
  action: () => void
  disabled?: boolean
  separator?: boolean
}

interface ContextMenuState {
  isOpen: boolean
  x: number
  y: number
  items: ContextMenuItem[]
  open: (x: number, y: number, items: ContextMenuItem[]) => void
  close: () => void
}

export const useContextMenuStore = create<ContextMenuState>((set) => ({
  isOpen: false,
  x: 0,
  y: 0,
  items: [],
  open: (x, y, items) => set({ isOpen: true, x, y, items }),
  close: () => set({ isOpen: false }),
}))