From e7e12fc10cb98799dcea4afa45e28898054e2c16 Mon Sep 17 00:00:00 2001 From: dextmorgn Date: Fri, 14 Nov 2025 17:38:15 +0100 Subject: [PATCH] fix(app): revert changes on graph layout --- flowsint-app/src/components/graphs/index.tsx | 2 +- .../src/components/graphs/toolbar.tsx | 99 ++++++++----------- .../src/stores/graph-controls-store.ts | 14 +-- 3 files changed, 47 insertions(+), 68 deletions(-) diff --git a/flowsint-app/src/components/graphs/index.tsx b/flowsint-app/src/components/graphs/index.tsx index 82ce788..4c3ba0f 100644 --- a/flowsint-app/src/components/graphs/index.tsx +++ b/flowsint-app/src/components/graphs/index.tsx @@ -133,7 +133,7 @@ const GraphPanel = ({ graphData, isLoading }: GraphPanelProps) => { } > <> - {view === 'graph' && } + {['force', 'hierarchy'].includes(view) && } {view === 'table' && } {view === 'map' && } {view === 'relationships' && } diff --git a/flowsint-app/src/components/graphs/toolbar.tsx b/flowsint-app/src/components/graphs/toolbar.tsx index 82ed78a..d545c43 100644 --- a/flowsint-app/src/components/graphs/toolbar.tsx +++ b/flowsint-app/src/components/graphs/toolbar.tsx @@ -48,7 +48,7 @@ export const ToolbarButton = memo(function ToolbarButton({ variant="outline" size="icon" className={cn( - 'h-8 w-8 relative shadow-none bg-card', + 'h-8 w-8 relative shadow-none', toggled && 'bg-primary/30 border-primary text-primary hover:bg-primary/40 hover:text-primary' )} @@ -69,8 +69,6 @@ export const ToolbarButton = memo(function ToolbarButton({ export const Toolbar = memo(function Toolbar({ isLoading }: { isLoading: boolean }) { const view = useGraphControls((s) => s.view) const setView = useGraphControls((s) => s.setView) - const layoutMode = useGraphControls((s) => s.layoutMode) - const setLayoutMode = useGraphControls((s) => s.setLayoutMode) const zoomToFit = useGraphControls((s) => s.zoomToFit) const zoomIn = useGraphControls((s) => s.zoomIn) const zoomOut = useGraphControls((s) => s.zoomOut) @@ -89,36 +87,30 @@ export const Toolbar = memo(function Toolbar({ isLoading }: { isLoading: boolean } catch (error) { toast.error('Failed to refresh graph data') } - }, [refetchGraph]) + }, [refetchGraph, onLayout]) - // View handlers - const handleGraphView = useCallback(() => { - setView('graph') - }, [setView]) + const handleForceLayout = useCallback(() => { + setView('force') + setTimeout(() => zoomToFit(), 500) + }, [setView, zoomToFit]) - const handleTableView = useCallback(() => { + const handleTableLayout = useCallback(() => { setView('table') }, [setView]) - const handleMapView = useCallback(() => { + const handleMapLayout = useCallback(() => { setView('map') }, [setView]) - const handleRelationshipsView = useCallback(() => { + const handleRelationshipsLayout = useCallback(() => { setView('relationships') }, [setView]) - // Layout handlers (only active when in graph view) - const handleForceLayout = useCallback(() => { - setLayoutMode('force') - setTimeout(() => zoomToFit(), 500) - }, [setLayoutMode, zoomToFit]) - - const handleDagreLayout = useCallback(() => { - setLayoutMode('dagre') + const handleDagreLayoutTB = useCallback(() => { + setView('hierarchy') onLayout && onLayout('dagre-tb') setTimeout(() => zoomToFit(), 200) - }, [onLayout, setLayoutMode, zoomToFit]) + }, [onLayout, setView, zoomToFit]) const handleOpenAddRelationDialog = useCallback(() => { setOpenAddRelationDialog(true) @@ -141,8 +133,8 @@ export const Toolbar = memo(function Toolbar({ isLoading }: { isLoading: boolean ) return ( - <> -
+
+
} @@ -162,26 +154,26 @@ export const Toolbar = memo(function Toolbar({ isLoading }: { isLoading: boolean icon={} tooltip="Zoom In" onClick={zoomIn} - disabled={view !== 'graph' || isLassoActive} + disabled={!['force', 'hierarchy'].includes(view) || isLassoActive} /> } tooltip="Zoom Out" onClick={zoomOut} - disabled={view !== 'graph' || isLassoActive} + disabled={!['force', 'hierarchy'].includes(view) || isLassoActive} /> } tooltip="Fit to View" onClick={zoomToFit} - disabled={view !== 'graph' || isLassoActive} + disabled={!['force', 'hierarchy'].includes(view) || isLassoActive} /> } tooltip={'Lasso select'} onClick={handleLassoSelect} toggled={isLassoActive} - disabled={view !== 'graph'} + disabled={!['force', 'hierarchy'].includes(view)} />
-
+
- {/* Layout buttons - only visible when in graph view */} - {view === 'graph' && ( - <> - } - tooltip="Dagre Layout" - toggled={layoutMode === 'dagre'} - onClick={handleDagreLayout} - /> - } - tooltip="Force Layout" - toggled={layoutMode === 'force'} - onClick={handleForceLayout} - /> - - )} - - {/* View buttons */} + } + tooltip={`Hierarchy`} + toggled={['hierarchy'].includes(view)} + onClick={handleDagreLayoutTB} + /> } - tooltip="Graph view" - toggled={view === 'graph'} - onClick={handleGraphView} + tooltip={'Graph view'} + toggled={['force'].includes(view)} + onClick={handleForceLayout} /> } - tooltip="Table view" - toggled={view === 'table'} - onClick={handleTableView} + tooltip={'Table view'} + toggled={['table'].includes(view)} + onClick={handleTableLayout} /> } - tooltip="Relationships view" - toggled={view === 'relationships'} - onClick={handleRelationshipsView} + tooltip={'Relationships view'} + toggled={['relationships'].includes(view)} + onClick={handleRelationshipsLayout} /> } - tooltip="Map view" - toggled={view === 'map'} - onClick={handleMapView} + tooltip={'Map view'} + toggled={['map'].includes(view)} + onClick={handleMapLayout} />
- +
) -}) +}) \ No newline at end of file diff --git a/flowsint-app/src/stores/graph-controls-store.ts b/flowsint-app/src/stores/graph-controls-store.ts index ab7f5b9..e6d956d 100644 --- a/flowsint-app/src/stores/graph-controls-store.ts +++ b/flowsint-app/src/stores/graph-controls-store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { persist } from 'zustand/middleware' -type ViewType = 'graph' | 'table' | 'map' | 'relationships' +type ViewType = 'hierarchy' | 'force' | 'table' | 'map' | 'relationships' type LayoutMode = 'none' | 'force' | 'dagre' type GraphControlsStore = { @@ -22,15 +22,15 @@ type GraphControlsStore = { export const useGraphControls = create()( persist( (set) => ({ - view: 'graph', + view: 'force', layoutMode: 'none', isLassoActive: false, - zoomToFit: () => {}, - zoomIn: () => {}, - zoomOut: () => {}, - onLayout: () => {}, + zoomToFit: () => { }, + zoomIn: () => { }, + zoomOut: () => { }, + onLayout: () => { }, setActions: (actions) => set(actions), - refetchGraph: () => {}, + refetchGraph: () => { }, setView: (view) => set({ view }), setLayoutMode: (mode) => set({ layoutMode: mode }), setIsLassoActive: (active) => set({ isLassoActive: active })