Files
Stirling-PDF/frontend/src/hooks/tools/split/useSplitParameters.ts
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

67 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-07-16 17:53:50 +01:00
import { useState } from 'react';
2025-08-12 16:05:59 +01:00
import { SPLIT_MODES, SPLIT_TYPES, ENDPOINTS, type SplitMode } from '../../../constants/splitConstants';
2025-07-16 17:53:50 +01:00
import { SplitParameters } from '../../../components/tools/split/SplitSettings';
export interface SplitParametersHook {
parameters: SplitParameters;
updateParameter: (parameter: keyof SplitParameters, value: string | boolean) => void;
resetParameters: () => void;
validateParameters: () => boolean;
getEndpointName: () => string;
}
const initialParameters: SplitParameters = {
2025-08-08 16:01:56 +01:00
mode: '',
2025-07-16 17:53:50 +01:00
pages: '',
hDiv: '2',
vDiv: '2',
merge: false,
splitType: SPLIT_TYPES.SIZE,
splitValue: '',
bookmarkLevel: '1',
includeMetadata: false,
allowDuplicates: false,
};
export const useSplitParameters = (): SplitParametersHook => {
const [parameters, setParameters] = useState<SplitParameters>(initialParameters);
const updateParameter = (parameter: keyof SplitParameters, value: string | boolean) => {
setParameters(prev => ({ ...prev, [parameter]: value }));
};
const resetParameters = () => {
setParameters(initialParameters);
};
const validateParameters = () => {
2025-08-08 16:01:56 +01:00
if (!parameters.mode) return false;
2025-07-16 17:53:50 +01:00
2025-08-08 16:01:56 +01:00
switch (parameters.mode) {
2025-07-16 17:53:50 +01:00
case SPLIT_MODES.BY_PAGES:
return parameters.pages.trim() !== "";
case SPLIT_MODES.BY_SECTIONS:
return parameters.hDiv !== "" && parameters.vDiv !== "";
case SPLIT_MODES.BY_SIZE_OR_COUNT:
return parameters.splitValue.trim() !== "";
case SPLIT_MODES.BY_CHAPTERS:
return parameters.bookmarkLevel !== "";
default:
return false;
}
};
const getEndpointName = () => {
2025-08-08 16:01:56 +01:00
if (!parameters.mode) return ENDPOINTS[SPLIT_MODES.BY_PAGES];
return ENDPOINTS[parameters.mode as SplitMode];
2025-07-16 17:53:50 +01:00
};
return {
parameters,
updateParameter,
resetParameters,
validateParameters,
getEndpointName,
};
2025-08-12 16:05:59 +01:00
};