mirror of
https://github.com/chartdb/chartdb.git
synced 2025-11-18 21:49:00 +00:00
toolbar canvas
This commit is contained in:
@@ -8,6 +8,7 @@ export interface RedoUndoStackContext {
|
|||||||
addRedoAction: (action: RedoUndoAction) => void;
|
addRedoAction: (action: RedoUndoAction) => void;
|
||||||
addUndoAction: (action: RedoUndoAction) => void;
|
addUndoAction: (action: RedoUndoAction) => void;
|
||||||
resetRedoStack: () => void;
|
resetRedoStack: () => void;
|
||||||
|
resetUndoStack: () => void;
|
||||||
hasRedo: boolean;
|
hasRedo: boolean;
|
||||||
hasUndo: boolean;
|
hasUndo: boolean;
|
||||||
}
|
}
|
||||||
@@ -18,6 +19,7 @@ export const redoUndoStackContext = createContext<RedoUndoStackContext>({
|
|||||||
addRedoAction: emptyFn,
|
addRedoAction: emptyFn,
|
||||||
addUndoAction: emptyFn,
|
addUndoAction: emptyFn,
|
||||||
resetRedoStack: emptyFn,
|
resetRedoStack: emptyFn,
|
||||||
|
resetUndoStack: emptyFn,
|
||||||
hasRedo: false,
|
hasRedo: false,
|
||||||
hasUndo: false,
|
hasUndo: false,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ export const RedoUndoStackProvider: React.FC<React.PropsWithChildren> = ({
|
|||||||
setRedoStack([]);
|
setRedoStack([]);
|
||||||
}, [setRedoStack]);
|
}, [setRedoStack]);
|
||||||
|
|
||||||
|
const resetUndoStack: RedoUndoStackContext['resetUndoStack'] =
|
||||||
|
useCallback(() => {
|
||||||
|
setUndoStack([]);
|
||||||
|
}, [setUndoStack]);
|
||||||
|
|
||||||
const hasRedo = redoStack.length > 0;
|
const hasRedo = redoStack.length > 0;
|
||||||
const hasUndo = undoStack.length > 0;
|
const hasUndo = undoStack.length > 0;
|
||||||
|
|
||||||
@@ -41,6 +46,7 @@ export const RedoUndoStackProvider: React.FC<React.PropsWithChildren> = ({
|
|||||||
addRedoAction,
|
addRedoAction,
|
||||||
addUndoAction,
|
addUndoAction,
|
||||||
resetRedoStack,
|
resetRedoStack,
|
||||||
|
resetUndoStack,
|
||||||
hasRedo,
|
hasRedo,
|
||||||
hasUndo,
|
hasUndo,
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -61,6 +61,12 @@ export const CreateDiagramDialog: React.FC<CreateDiagramDialogProps> = ({
|
|||||||
fetchDiagrams();
|
fetchDiagrams();
|
||||||
}, [listDiagrams, setDiagramNumber, dialog.open]);
|
}, [listDiagrams, setDiagramNumber, dialog.open]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setStep(CreateDiagramDialogStep.SELECT_DATABASE);
|
||||||
|
setDatabaseType(DatabaseType.GENERIC);
|
||||||
|
setScriptResult('');
|
||||||
|
}, [dialog.open]);
|
||||||
|
|
||||||
const hasExistingDiagram = (diagramId ?? '').trim().length !== 0;
|
const hasExistingDiagram = (diagramId ?? '').trim().length !== 0;
|
||||||
|
|
||||||
const createNewDiagram = useCallback(async () => {
|
const createNewDiagram = useCallback(async () => {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { TableNode, TableNodeType } from './table-node';
|
|||||||
import { TableEdge, TableEdgeType } from './table-edge';
|
import { TableEdge, TableEdgeType } from './table-edge';
|
||||||
import { useChartDB } from '@/hooks/use-chartdb';
|
import { useChartDB } from '@/hooks/use-chartdb';
|
||||||
import { LEFT_HANDLE_ID_PREFIX, TARGET_ID_PREFIX } from './table-node-field';
|
import { LEFT_HANDLE_ID_PREFIX, TARGET_ID_PREFIX } from './table-node-field';
|
||||||
|
import { Toolbar } from './toolbar/toolbar';
|
||||||
|
|
||||||
type AddEdgeParams = Parameters<typeof addEdge<TableEdgeType>>[0];
|
type AddEdgeParams = Parameters<typeof addEdge<TableEdgeType>>[0];
|
||||||
|
|
||||||
@@ -191,7 +192,16 @@ export const Canvas: React.FC<CanvasProps> = () => {
|
|||||||
type: 'table-edge',
|
type: 'table-edge',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Controls />
|
<Controls
|
||||||
|
position="bottom-center"
|
||||||
|
orientation="horizontal"
|
||||||
|
showZoom={false}
|
||||||
|
showFitView={false}
|
||||||
|
showInteractive={false}
|
||||||
|
className="!shadow-none"
|
||||||
|
>
|
||||||
|
<Toolbar />
|
||||||
|
</Controls>
|
||||||
<MiniMap
|
<MiniMap
|
||||||
style={{
|
style={{
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { TopNavbar } from './top-navbar/top-navbar';
|
import { TopNavbar } from './top-navbar/top-navbar';
|
||||||
import { Toolbar } from './toolbar/toolbar';
|
|
||||||
import {
|
import {
|
||||||
ResizableHandle,
|
ResizableHandle,
|
||||||
ResizablePanel,
|
ResizablePanel,
|
||||||
@@ -12,9 +11,11 @@ import { useNavigate, useParams } from 'react-router-dom';
|
|||||||
import { useConfig } from '@/hooks/use-config';
|
import { useConfig } from '@/hooks/use-config';
|
||||||
import { useChartDB } from '@/hooks/use-chartdb';
|
import { useChartDB } from '@/hooks/use-chartdb';
|
||||||
import { useDialog } from '@/hooks/use-dialog';
|
import { useDialog } from '@/hooks/use-dialog';
|
||||||
|
import { useRedoUndoStack } from '@/hooks/use-redo-undo-stack';
|
||||||
|
|
||||||
export const EditorPage: React.FC = () => {
|
export const EditorPage: React.FC = () => {
|
||||||
const { loadDiagram } = useChartDB();
|
const { loadDiagram } = useChartDB();
|
||||||
|
const { resetRedoStack, resetUndoStack } = useRedoUndoStack();
|
||||||
const { openCreateDiagramDialog } = useDialog();
|
const { openCreateDiagramDialog } = useDialog();
|
||||||
const { diagramId } = useParams<{ diagramId: string }>();
|
const { diagramId } = useParams<{ diagramId: string }>();
|
||||||
const { config } = useConfig();
|
const { config } = useConfig();
|
||||||
@@ -27,6 +28,8 @@ export const EditorPage: React.FC = () => {
|
|||||||
|
|
||||||
const loadDefaultDiagram = async () => {
|
const loadDefaultDiagram = async () => {
|
||||||
if (diagramId) {
|
if (diagramId) {
|
||||||
|
resetRedoStack();
|
||||||
|
resetUndoStack();
|
||||||
const diagram = await loadDiagram(diagramId);
|
const diagram = await loadDiagram(diagramId);
|
||||||
if (!diagram) {
|
if (!diagram) {
|
||||||
navigate('/');
|
navigate('/');
|
||||||
@@ -38,12 +41,19 @@ export const EditorPage: React.FC = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
loadDefaultDiagram();
|
loadDefaultDiagram();
|
||||||
}, [diagramId, openCreateDiagramDialog, config, navigate, loadDiagram]);
|
}, [
|
||||||
|
diagramId,
|
||||||
|
openCreateDiagramDialog,
|
||||||
|
config,
|
||||||
|
navigate,
|
||||||
|
loadDiagram,
|
||||||
|
resetRedoStack,
|
||||||
|
resetUndoStack,
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="bg-background h-screen w-screen flex flex-col">
|
<section className="bg-background h-screen w-screen flex flex-col">
|
||||||
<TopNavbar />
|
<TopNavbar />
|
||||||
<Toolbar />
|
|
||||||
<ResizablePanelGroup direction="horizontal">
|
<ResizablePanelGroup direction="horizontal">
|
||||||
<ResizablePanel defaultSize={25} minSize={25} maxSize={99}>
|
<ResizablePanel defaultSize={25} minSize={25} maxSize={99}>
|
||||||
<SidePanel />
|
<SidePanel />
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export const TopNavbar: React.FC<TopNavbarProps> = () => {
|
|||||||
}, [currentDiagram]);
|
}, [currentDiagram]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<nav className="flex flex-row items-center justify-between px-4 h-12">
|
<nav className="flex flex-row items-center justify-between px-4 h-12 border-b">
|
||||||
<div className="flex flex-1 justify-start gap-x-3">
|
<div className="flex flex-1 justify-start gap-x-3">
|
||||||
<div className="flex font-primary items-center">
|
<div className="flex font-primary items-center">
|
||||||
<img
|
<img
|
||||||
|
|||||||
Reference in New Issue
Block a user