mirror of
https://github.com/chartdb/chartdb.git
synced 2025-10-23 07:11:56 +00:00
fix: open default diagram after deleting current diagram (#350)
This commit is contained in:
@@ -11,8 +11,6 @@ import type { DBRelationship } from '@/lib/domain/db-relationship';
|
||||
import { useStorage } from '@/hooks/use-storage';
|
||||
import { useRedoUndoStack } from '@/hooks/use-redo-undo-stack';
|
||||
import type { Diagram } from '@/lib/domain/diagram';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useConfig } from '@/hooks/use-config';
|
||||
import type { DatabaseEdition } from '@/lib/domain/database-edition';
|
||||
import type { DBSchema } from '@/lib/domain/db-schema';
|
||||
import {
|
||||
@@ -34,13 +32,11 @@ export const ChartDBProvider: React.FC<
|
||||
> = ({ children, diagram, readonly }) => {
|
||||
let db = useStorage();
|
||||
const events = useEventEmitter<ChartDBEvent>();
|
||||
const navigate = useNavigate();
|
||||
const { setSchemasFilter, schemasFilter } = useLocalConfig();
|
||||
const { addUndoAction, resetRedoStack, resetUndoStack } =
|
||||
useRedoUndoStack();
|
||||
const [diagramId, setDiagramId] = useState('');
|
||||
const [diagramName, setDiagramName] = useState('');
|
||||
const { updateConfig } = useConfig();
|
||||
const [diagramCreatedAt, setDiagramCreatedAt] = useState<Date>(new Date());
|
||||
const [diagramUpdatedAt, setDiagramUpdatedAt] = useState<Date>(new Date());
|
||||
const [databaseType, setDatabaseType] = useState<DatabaseType>(
|
||||
@@ -173,34 +169,13 @@ export const ChartDBProvider: React.FC<
|
||||
resetRedoStack();
|
||||
resetUndoStack();
|
||||
|
||||
const [config] = await Promise.all([
|
||||
db.getConfig(),
|
||||
await Promise.all([
|
||||
db.deleteDiagramTables(diagramId),
|
||||
db.deleteDiagramRelationships(diagramId),
|
||||
db.deleteDiagram(diagramId),
|
||||
db.deleteDiagramDependencies(diagramId),
|
||||
]);
|
||||
|
||||
if (config?.defaultDiagramId === diagramId) {
|
||||
const diagrams = await db.listDiagrams();
|
||||
|
||||
if (diagrams.length > 0) {
|
||||
const defaultDiagramId = diagrams[0].id;
|
||||
await updateConfig({ defaultDiagramId });
|
||||
navigate(`/diagrams/${defaultDiagramId}`);
|
||||
} else {
|
||||
await updateConfig({ defaultDiagramId: '' });
|
||||
navigate('/');
|
||||
}
|
||||
}
|
||||
}, [
|
||||
db,
|
||||
diagramId,
|
||||
navigate,
|
||||
resetRedoStack,
|
||||
resetUndoStack,
|
||||
updateConfig,
|
||||
]);
|
||||
}, [db, diagramId, resetRedoStack, resetUndoStack]);
|
||||
|
||||
const updateDiagramUpdatedAt: ChartDBContext['updateDiagramUpdatedAt'] =
|
||||
useCallback(async () => {
|
||||
|
@@ -35,6 +35,7 @@ import { DialogProvider } from '@/context/dialog-context/dialog-provider';
|
||||
import { KeyboardShortcutsProvider } from '@/context/keyboard-shortcuts-context/keyboard-shortcuts-provider';
|
||||
import { Spinner } from '@/components/spinner/spinner';
|
||||
import { Helmet } from 'react-helmet-async';
|
||||
import { useStorage } from '@/hooks/use-storage';
|
||||
|
||||
const OPEN_STAR_US_AFTER_SECONDS = 30;
|
||||
const SHOW_STAR_US_AGAIN_AFTER_DAYS = 1;
|
||||
@@ -73,6 +74,7 @@ const EditorPageComponent: React.FC = () => {
|
||||
} = useLocalConfig();
|
||||
const { toast } = useToast();
|
||||
const { t } = useTranslation();
|
||||
const { listDiagrams } = useStorage();
|
||||
|
||||
useEffect(() => {
|
||||
if (!config) {
|
||||
@@ -106,7 +108,15 @@ const EditorPageComponent: React.FC = () => {
|
||||
navigate(`/diagrams/${config.defaultDiagramId}`);
|
||||
}
|
||||
} else {
|
||||
openCreateDiagramDialog();
|
||||
const diagrams = await listDiagrams();
|
||||
|
||||
if (diagrams.length > 0) {
|
||||
const defaultDiagramId = diagrams[0].id;
|
||||
await updateConfig({ defaultDiagramId });
|
||||
navigate(`/diagrams/${defaultDiagramId}`);
|
||||
} else {
|
||||
openCreateDiagramDialog();
|
||||
}
|
||||
}
|
||||
};
|
||||
loadDefaultDiagram();
|
||||
@@ -115,6 +125,7 @@ const EditorPageComponent: React.FC = () => {
|
||||
openCreateDiagramDialog,
|
||||
config,
|
||||
navigate,
|
||||
listDiagrams,
|
||||
loadDiagram,
|
||||
resetRedoStack,
|
||||
resetUndoStack,
|
||||
|
@@ -34,6 +34,7 @@ import { useLocalConfig } from '@/hooks/use-local-config';
|
||||
import { DiagramName } from './diagram-name';
|
||||
import { LastSaved } from './last-saved';
|
||||
import { languages } from '@/i18n/i18n';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
export interface TopNavbarProps {}
|
||||
|
||||
@@ -64,6 +65,12 @@ export const TopNavbar: React.FC<TopNavbarProps> = () => {
|
||||
const { isMd: isDesktop } = useBreakpoint('md');
|
||||
const { config, updateConfig } = useConfig();
|
||||
const { exportImage } = useExportImage();
|
||||
const navigate = useNavigate();
|
||||
|
||||
const handleDeleteDiagramAction = useCallback(() => {
|
||||
deleteDiagram();
|
||||
navigate('/');
|
||||
}, [deleteDiagram, navigate]);
|
||||
|
||||
const createNewDiagram = () => {
|
||||
openCreateDiagramDialog();
|
||||
@@ -423,7 +430,7 @@ export const TopNavbar: React.FC<TopNavbarProps> = () => {
|
||||
closeLabel: t(
|
||||
'delete_diagram_alert.cancel'
|
||||
),
|
||||
onAction: deleteDiagram,
|
||||
onAction: handleDeleteDiagramAction,
|
||||
})
|
||||
}
|
||||
>
|
||||
|
Reference in New Issue
Block a user