2025-07-16 17:53:50 +01:00
|
|
|
import { useState } from 'react';
|
2025-08-14 14:27:23 +01:00
|
|
|
import { SPLIT_MODES, SPLIT_TYPES, ENDPOINTS, type SplitMode, SplitType } from '../../../constants/splitConstants';
|
|
|
|
|
|
|
|
export interface SplitParameters {
|
|
|
|
mode: SplitMode | '';
|
|
|
|
pages: string;
|
|
|
|
hDiv: string;
|
|
|
|
vDiv: string;
|
|
|
|
merge: boolean;
|
|
|
|
splitType: SplitType | '';
|
|
|
|
splitValue: string;
|
|
|
|
bookmarkLevel: string;
|
|
|
|
includeMetadata: boolean;
|
|
|
|
allowDuplicates: boolean;
|
|
|
|
}
|
2025-07-16 17:53:50 +01:00
|
|
|
|
|
|
|
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
|
|
|
};
|