diff --git a/frontend/src/hooks/tools/rotate/useRotateOperation.ts b/frontend/src/hooks/tools/rotate/useRotateOperation.ts index 832b3a414..f43ea9507 100644 --- a/frontend/src/hooks/tools/rotate/useRotateOperation.ts +++ b/frontend/src/hooks/tools/rotate/useRotateOperation.ts @@ -1,13 +1,14 @@ import { useTranslation } from 'react-i18next'; import { useToolOperation, ToolType } from '../shared/useToolOperation'; import { createStandardErrorHandler } from '../../../utils/toolErrorHandler'; -import { RotateParameters, defaultParameters } from './useRotateParameters'; +import { RotateParameters, defaultParameters, normalizeAngle } from './useRotateParameters'; // Static configuration that can be used by both the hook and automation executor export const buildRotateFormData = (parameters: RotateParameters, file: File): FormData => { const formData = new FormData(); formData.append("fileInput", file); - formData.append("angle", parameters.angle.toString()); + // Normalize angle for backend (0, 90, 180, 270) + formData.append("angle", normalizeAngle(parameters.angle).toString()); return formData; }; diff --git a/frontend/src/hooks/tools/rotate/useRotateParameters.ts b/frontend/src/hooks/tools/rotate/useRotateParameters.ts index 2d8cb039c..a2c7ccaa9 100644 --- a/frontend/src/hooks/tools/rotate/useRotateParameters.ts +++ b/frontend/src/hooks/tools/rotate/useRotateParameters.ts @@ -2,6 +2,12 @@ import { BaseParameters } from '../../../types/parameters'; import { useBaseParameters, BaseParametersHook } from '../shared/useBaseParameters'; import { useMemo, useCallback } from 'react'; +// Normalize angle to valid backend values (0, 90, 180, 270) +export const normalizeAngle = (angle: number): number => { + const normalized = angle % 360; + return normalized < 0 ? normalized + 360 : normalized; +}; + export interface RotateParameters extends BaseParameters { angle: number; // Current rotation angle (0, 90, 180, 270) } @@ -27,38 +33,29 @@ export const useRotateParameters = (): RotateParametersHook => { }, }); - // Normalize angle to valid backend values (0, 90, 180, 270) - const normalizeAngle = useCallback((angle: number): number => { - const normalized = angle % 360; - return normalized < 0 ? normalized + 360 : normalized; - }, []); - // Rotate clockwise by 90 degrees const rotateClockwise = useCallback(() => { - baseHook.updateParameter('angle', normalizeAngle(baseHook.parameters.angle + 90)); - }, [baseHook, normalizeAngle]); + baseHook.updateParameter('angle', baseHook.parameters.angle + 90); + }, [baseHook]); // Rotate anticlockwise by 90 degrees const rotateAnticlockwise = useCallback(() => { - baseHook.updateParameter('angle', normalizeAngle(baseHook.parameters.angle - 90)); - }, [baseHook, normalizeAngle]); + baseHook.updateParameter('angle', baseHook.parameters.angle - 90); + }, [baseHook]); // Check if rotation will actually change the document const hasRotation = useMemo(() => { - return baseHook.parameters.angle !== 0; - }, [baseHook.parameters.angle]); + const normalized = normalizeAngle(baseHook.parameters.angle); + return normalized !== 0; + }, [baseHook.parameters.angle, normalizeAngle]); - // Override updateParameter to normalize angles + // Override updateParameter - no longer normalize angles here const updateParameter = useCallback(( parameter: K, value: RotateParameters[K] ) => { - if (parameter === 'angle') { - baseHook.updateParameter(parameter, normalizeAngle(value as number) as RotateParameters[K]); - } else { - baseHook.updateParameter(parameter, value); - } - }, [baseHook, normalizeAngle]); + baseHook.updateParameter(parameter, value); + }, [baseHook]); return { ...baseHook,