diff --git a/src/pages/editor-page/canvas/canvas.tsx b/src/pages/editor-page/canvas/canvas.tsx index a6e4e7ff..fba6fc91 100644 --- a/src/pages/editor-page/canvas/canvas.tsx +++ b/src/pages/editor-page/canvas/canvas.tsx @@ -92,6 +92,8 @@ import type { Area } from '@/lib/domain/area'; import { updateTablesParentAreas, getTablesInArea } from './area-utils'; import { CanvasFilter } from './canvas-filter/canvas-filter'; import { useHotkeys } from 'react-hotkeys-hook'; +import { ShowAllButton } from './show-all-button'; +import { useIsLostInCanvas } from './hooks/use-is-lost-in-canvas'; const HIGHLIGHTED_EDGE_Z_INDEX = 1; const DEFAULT_EDGE_Z_INDEX = 0; @@ -164,6 +166,7 @@ export const Canvas: React.FC = ({ initialTables }) => { >([]); const { toast } = useToast(); const { t } = useTranslation(); + const { isLostInCanvas } = useIsLostInCanvas(); const { tables, areas, @@ -1275,6 +1278,25 @@ export const Canvas: React.FC = ({ initialTables }) => { ) : null} + {isLostInCanvas ? ( + + + + ) : null} = () => { + const { fitView } = useCanvas(); + const [visible, setVisible] = useState(false); + + useEffect(() => { + const timer = setTimeout(() => { + setVisible(true); + }, 0); + + return () => clearTimeout(timer); + }, []); + + const showAll = useCallback(() => { + fitView({ + duration: 500, + padding: 0.1, + maxZoom: 0.8, + }); + }, [fitView]); + + return ( +
+
+ +
+ +
+
+ +
+ + Your content is out of view + + +
+
+ ); +}; diff --git a/src/pages/editor-page/canvas/toolbar/toolbar.tsx b/src/pages/editor-page/canvas/toolbar/toolbar.tsx index 872e0b26..c778cdb0 100644 --- a/src/pages/editor-page/canvas/toolbar/toolbar.tsx +++ b/src/pages/editor-page/canvas/toolbar/toolbar.tsx @@ -14,7 +14,6 @@ import { useTranslation } from 'react-i18next'; import { Button } from '@/components/button/button'; import { keyboardShortcutsForOS } from '@/context/keyboard-shortcuts-context/keyboard-shortcuts'; import { KeyboardShortcutAction } from '@/context/keyboard-shortcuts-context/keyboard-shortcuts'; -import { useIsLostInCanvas } from '../hooks/use-is-lost-in-canvas'; import { useCanvas } from '@/hooks/use-canvas'; import { useChartDB } from '@/hooks/use-chartdb'; import { cn } from '@/lib/utils'; @@ -30,7 +29,6 @@ export const Toolbar: React.FC = () => { const { redo, undo, hasRedo, hasUndo } = useHistory(); const { getZoom, zoomIn, zoomOut, fitView } = useReactFlow(); const [zoom, setZoom] = useState(convertToPercentage(getZoom())); - const { isLostInCanvas } = useIsLostInCanvas(); const { setShowFilter } = useCanvas(); const { hiddenTableIds } = useChartDB(); @@ -106,14 +104,7 @@ export const Toolbar: React.FC = () => { - +