| 1 | import type { DesktopPreviewPointerEvent } from "@t3tools/contracts"; |
| 2 | import { create } from "zustand"; |
| 3 | |
| 4 | interface BrowserPointerStoreState { |
| 5 | readonly byTabId: Record<string, DesktopPreviewPointerEvent>; |
| 6 | readonly apply: (event: DesktopPreviewPointerEvent) => void; |
| 7 | readonly clear: (tabId: string) => void; |
| 8 | } |
| 9 | |
| 10 | export const useBrowserPointerStore = create<BrowserPointerStoreState>()((set) => ({ |
| 11 | byTabId: {}, |
| 12 | apply: (event) => |
| 13 | set((state) => ({ |
| 14 | byTabId: { |
| 15 | ...state.byTabId, |
| 16 | [event.tabId]: event, |
| 17 | }, |
| 18 | })), |
| 19 | clear: (tabId) => |
| 20 | set((state) => { |
| 21 | if (!(tabId in state.byTabId)) return state; |
| 22 | const { [tabId]: _removed, ...byTabId } = state.byTabId; |
| 23 | return { byTabId }; |
| 24 | }), |
| 25 | })); |