import React, { useEffect, useRef, useImperativeHandle } from 'react'; // TODO: Do we want to store our custom hooks in a central place? const useJQueryUIResizable = ( containerRef: React.RefObject, options: JQueryUI.ResizableOptions = { handles: 'all', minWidth: 100, minHeight: 100 } ) => { useEffect(() => { if (containerRef.current) { $(containerRef.current).resizable(options); } return () => { if (containerRef.current) { $(containerRef.current).resizable('destroy'); } }; }); }; type ResizableProps = JQueryUI.ResizableOptions & { className?: string; }; export const ResizableContainer = React.forwardRef>(({ className, children, ...resizableOptions }, ref) => { const containerRef = useRef(null); useImperativeHandle(ref, () => containerRef.current); useJQueryUIResizable(containerRef, resizableOptions); return (
{children}
); });