import { Coordinates } from '@dnd-kit/utilities' import { Edge } from '@typebot.io/schemas' import { createContext, Dispatch, ReactNode, SetStateAction, useContext, useState, } from 'react' import { graphPositionDefaultValue } from '../constants' import { ConnectingIds } from '../types' type Position = Coordinates & { scale: number } type PreviewingBlock = { id: string groupId: string } const graphContext = createContext<{ graphPosition: Position setGraphPosition: Dispatch> connectingIds: ConnectingIds | null setConnectingIds: Dispatch> previewingBlock?: PreviewingBlock setPreviewingBlock: Dispatch> previewingEdge?: Edge setPreviewingEdge: Dispatch> openedBlockId?: string setOpenedBlockId: Dispatch> openedItemId?: string setOpenedItemId: Dispatch> isReadOnly: boolean isAnalytics: boolean focusedGroupId?: string setFocusedGroupId: Dispatch> // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore }>({ graphPosition: graphPositionDefaultValue({ x: 0, y: 0 }), connectingIds: null, }) export const GraphProvider = ({ children, isReadOnly = false, isAnalytics = false, }: { children: ReactNode isReadOnly?: boolean isAnalytics?: boolean }) => { const [graphPosition, setGraphPosition] = useState( graphPositionDefaultValue({ x: 0, y: 0 }) ) const [connectingIds, setConnectingIds] = useState(null) const [previewingEdge, setPreviewingEdge] = useState() const [previewingBlock, setPreviewingBlock] = useState() const [openedBlockId, setOpenedBlockId] = useState() const [openedItemId, setOpenedItemId] = useState() const [focusedGroupId, setFocusedGroupId] = useState() return ( {children} ) } export const useGraph = () => useContext(graphContext)