diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-auto-layout.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-auto-layout.ts index c972fe86c..3bcb0676b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-auto-layout.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-auto-layout.ts @@ -3,6 +3,7 @@ import { createLogger } from '@sim/logger' import { useReactFlow } from 'reactflow' import type { AutoLayoutOptions } from '@/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils' import { applyAutoLayoutAndUpdateStore as applyAutoLayoutStandalone } from '@/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils' +import { useSnapToGridSize } from '@/hooks/queries/general-settings' import { useCanvasViewport } from '@/hooks/use-canvas-viewport' export type { AutoLayoutOptions } @@ -13,21 +14,28 @@ const logger = createLogger('useAutoLayout') * Hook providing auto-layout functionality for workflows. * Binds workflowId context and provides memoized callback for React components. * Includes automatic fitView animation after successful layout. + * Automatically uses the user's snap-to-grid setting for grid-aligned layout. * * Note: This hook requires a ReactFlowProvider ancestor. */ export function useAutoLayout(workflowId: string | null) { const reactFlowInstance = useReactFlow() const { fitViewToBounds } = useCanvasViewport(reactFlowInstance) + const snapToGridSize = useSnapToGridSize() const applyAutoLayoutAndUpdateStore = useCallback( async (options: AutoLayoutOptions = {}) => { if (!workflowId) { return { success: false, error: 'No workflow ID provided' } } - return applyAutoLayoutStandalone(workflowId, options) + // Include gridSize from user's snap-to-grid setting + const optionsWithGrid: AutoLayoutOptions = { + ...options, + gridSize: options.gridSize ?? (snapToGridSize > 0 ? snapToGridSize : undefined), + } + return applyAutoLayoutStandalone(workflowId, optionsWithGrid) }, - [workflowId] + [workflowId, snapToGridSize] ) /** diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils.ts index e45df1ba6..2be615c8d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/auto-layout-utils.ts @@ -21,6 +21,7 @@ export interface AutoLayoutOptions { x?: number y?: number } + gridSize?: number } /** @@ -62,6 +63,7 @@ export async function applyAutoLayoutAndUpdateStore( x: options.padding?.x ?? DEFAULT_LAYOUT_PADDING.x, y: options.padding?.y ?? DEFAULT_LAYOUT_PADDING.y, }, + gridSize: options.gridSize, } // Call the autolayout API route diff --git a/apps/sim/tools/index.test.ts b/apps/sim/tools/index.test.ts index 37556793b..9a20977ae 100644 --- a/apps/sim/tools/index.test.ts +++ b/apps/sim/tools/index.test.ts @@ -253,23 +253,6 @@ describe('executeTool Function', () => { vi.restoreAllMocks() }) - it('should handle errors from tools', async () => { - setupFetchMock({ status: 400, ok: false, json: { error: 'Bad request' } }) - - const result = await executeTool( - 'http_request', - { - url: 'https://api.example.com/data', - method: 'GET', - }, - true - ) - - expect(result.success).toBe(false) - expect(result.error).toBeDefined() - expect(result.timing).toBeDefined() - }) - it('should add timing information to results', async () => { const result = await executeTool( 'http_request',