import DragSelect from 'dragselect'; import React, { createContext, useContext, useEffect, useState } from 'react'; type ProviderProps = { children: React.ReactNode; settings?: ConstructorParameters[0]; }; const Context = createContext(undefined); function DragSelectProvider({ children, settings = {} }: ProviderProps) { const [ds, setDS] = useState(); useEffect(() => { setDS((prevState) => { if (prevState) return prevState; return new DragSelect({}); }); return () => { if (ds) { console.log('stop'); ds.stop(); setDS(undefined); } }; }, [ds]); useEffect(() => { ds?.setSettings(settings); }, [ds, settings]); return {children}; } function useDragSelect() { return useContext(Context); } export { DragSelectProvider, useDragSelect };