mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-18 01:19:24 +00:00
68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { BaseParameters } from '../../../types/parameters';
|
|
import { useBaseParameters, BaseParametersHook } from '../shared/useBaseParameters';
|
|
import { useMemo, useCallback } from 'react';
|
|
|
|
// Normalize angle to number between 0 and 359
|
|
export const normalizeAngle = (angle: number): number => {
|
|
return ((angle % 360) + 360) % 360;
|
|
};
|
|
|
|
export interface RotateParameters extends BaseParameters {
|
|
angle: number; // Current rotation angle (0, 90, 180, 270)
|
|
}
|
|
|
|
export const defaultParameters: RotateParameters = {
|
|
angle: 0,
|
|
};
|
|
|
|
export type RotateParametersHook = BaseParametersHook<RotateParameters> & {
|
|
rotateClockwise: () => void;
|
|
rotateAnticlockwise: () => void;
|
|
hasRotation: boolean;
|
|
normalizeAngle: (angle: number) => number;
|
|
};
|
|
|
|
export const useRotateParameters = (): RotateParametersHook => {
|
|
const baseHook = useBaseParameters({
|
|
defaultParameters,
|
|
endpointName: 'rotate-pdf',
|
|
validateFn: (params) => {
|
|
// Angle must be a multiple of 90
|
|
return params.angle % 90 === 0;
|
|
},
|
|
});
|
|
|
|
// Rotate clockwise by 90 degrees
|
|
const rotateClockwise = useCallback(() => {
|
|
baseHook.updateParameter('angle', baseHook.parameters.angle + 90);
|
|
}, [baseHook]);
|
|
|
|
// Rotate anticlockwise by 90 degrees
|
|
const rotateAnticlockwise = useCallback(() => {
|
|
baseHook.updateParameter('angle', baseHook.parameters.angle - 90);
|
|
}, [baseHook]);
|
|
|
|
// Check if rotation will actually change the document
|
|
const hasRotation = useMemo(() => {
|
|
const normalized = normalizeAngle(baseHook.parameters.angle);
|
|
return normalized !== 0;
|
|
}, [baseHook.parameters.angle, normalizeAngle]);
|
|
|
|
// Override updateParameter - no longer normalize angles here
|
|
const updateParameter = useCallback(<K extends keyof RotateParameters>(
|
|
parameter: K,
|
|
value: RotateParameters[K]
|
|
) => {
|
|
baseHook.updateParameter(parameter, value);
|
|
}, [baseHook]);
|
|
|
|
return {
|
|
...baseHook,
|
|
updateParameter,
|
|
rotateClockwise,
|
|
rotateAnticlockwise,
|
|
hasRotation,
|
|
normalizeAngle,
|
|
};
|
|
};
|