27 lines
800 B
TypeScript
27 lines
800 B
TypeScript
"use client";
|
|
|
|
import { createContext, useContext } from "react";
|
|
import type { CanvasState } from "@/types/canvas";
|
|
|
|
export type CanvasRemoteOperationResult = {
|
|
projectId: string;
|
|
canvasData: CanvasState;
|
|
updatedAt: string;
|
|
};
|
|
export type CanvasRemoteOperation = (() => Promise<void>) | (() => Promise<CanvasRemoteOperationResult | undefined>);
|
|
|
|
export const CanvasRemoteOperationContext = createContext<
|
|
{
|
|
run: (operation: CanvasRemoteOperation) => Promise<void>;
|
|
applySnapshot: (result: CanvasRemoteOperationResult) => boolean;
|
|
} | null
|
|
>(null);
|
|
|
|
export function useCanvasRemoteOperation() {
|
|
return useContext(CanvasRemoteOperationContext)?.run || null;
|
|
}
|
|
|
|
export function useCanvasRemoteSnapshot() {
|
|
return useContext(CanvasRemoteOperationContext)?.applySnapshot || null;
|
|
}
|