mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-03-13 02:18:16 +01:00
feat: add browser implementations for advanced tools
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* AddPageNumbersPositionSettings - Position & Pages step
|
||||
*/
|
||||
|
||||
import { Stack, TextInput, NumberInput, Divider, Text } from "@mantine/core";
|
||||
import { Stack, TextInput, NumberInput, Divider, Text, SegmentedControl } from "@mantine/core";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { AddPageNumbersParameters } from "./useAddPageNumbersParameters";
|
||||
import { Tooltip } from "../../shared/Tooltip";
|
||||
@@ -27,6 +27,27 @@ const AddPageNumbersPositionSettings = ({
|
||||
|
||||
return (
|
||||
<Stack gap="lg">
|
||||
<Stack gap="xs">
|
||||
<Text size="sm" fw={500}>
|
||||
{t('addPageNumbers.processingMode.label', 'Processing mode')}
|
||||
</Text>
|
||||
<SegmentedControl
|
||||
value={parameters.processingMode}
|
||||
onChange={(value) => onParameterChange('processingMode', value as AddPageNumbersParameters['processingMode'])}
|
||||
data={[
|
||||
{ label: t('addPageNumbers.processingMode.backend', 'Backend'), value: 'backend' },
|
||||
{ label: t('addPageNumbers.processingMode.frontend', 'Browser'), value: 'frontend' }
|
||||
]}
|
||||
fullWidth
|
||||
disabled={disabled}
|
||||
/>
|
||||
<Text size="xs" c="dimmed">
|
||||
{parameters.processingMode === 'frontend'
|
||||
? t('addPageNumbers.processingMode.frontendDescription', 'Stamp page numbers locally (page lists only).')
|
||||
: t('addPageNumbers.processingMode.backendDescription', 'Use the server for formula-based selection and heavy PDFs.')}
|
||||
</Text>
|
||||
</Stack>
|
||||
|
||||
{/* Position Selection */}
|
||||
<Stack gap="md">
|
||||
<PageNumberPreview
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { ToolType, useToolOperation } from '../../../hooks/tools/shared/useToolOperation';
|
||||
import { ToolType, useToolOperation, ToolOperationConfig } from '../../../hooks/tools/shared/useToolOperation';
|
||||
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
||||
import { AddPageNumbersParameters, defaultParameters } from './useAddPageNumbersParameters';
|
||||
import { addPageNumbersClientSide } from '../../../utils/pdfOperations/addPageNumbers';
|
||||
import { validatePageNumbers } from '../../../utils/pageSelection';
|
||||
|
||||
export const buildAddPageNumbersFormData = (parameters: AddPageNumbersParameters, file: File): FormData => {
|
||||
const formData = new FormData();
|
||||
@@ -23,7 +25,18 @@ export const addPageNumbersOperationConfig = {
|
||||
operationType: 'addPageNumbers',
|
||||
endpoint: '/api/v1/misc/add-page-numbers',
|
||||
defaultParameters,
|
||||
} as const;
|
||||
frontendProcessing: {
|
||||
process: addPageNumbersClientSide,
|
||||
shouldUseFrontend: (params) => {
|
||||
if (params.processingMode !== 'frontend') return false;
|
||||
const selection = params.pagesToNumber?.trim();
|
||||
if (!selection) return true;
|
||||
if (selection.toLowerCase().includes('n')) return false;
|
||||
return validatePageNumbers(selection);
|
||||
},
|
||||
statusMessage: 'Adding page numbers in browser...'
|
||||
}
|
||||
} as const satisfies ToolOperationConfig<AddPageNumbersParameters>;
|
||||
|
||||
export const useAddPageNumbersOperation = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { BaseParameters } from '../../../types/parameters';
|
||||
import { BaseParameters, ToggleableProcessingParameters } from '../../../types/parameters';
|
||||
import { useBaseParameters, type BaseParametersHook } from '../../../hooks/tools/shared/useBaseParameters';
|
||||
|
||||
export interface AddPageNumbersParameters extends BaseParameters {
|
||||
export interface AddPageNumbersParameters extends BaseParameters, ToggleableProcessingParameters {
|
||||
customMargin: 'small' | 'medium' | 'large' | 'x-large';
|
||||
position: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
||||
fontSize: number;
|
||||
@@ -19,6 +19,7 @@ export const defaultParameters: AddPageNumbersParameters = {
|
||||
startingNumber: 1,
|
||||
pagesToNumber: '',
|
||||
customText: '',
|
||||
processingMode: 'backend',
|
||||
};
|
||||
|
||||
export type AddPageNumbersParametersHook = BaseParametersHook<AddPageNumbersParameters>;
|
||||
@@ -26,7 +27,7 @@ export type AddPageNumbersParametersHook = BaseParametersHook<AddPageNumbersPara
|
||||
export const useAddPageNumbersParameters = (): AddPageNumbersParametersHook => {
|
||||
return useBaseParameters<AddPageNumbersParameters>({
|
||||
defaultParameters,
|
||||
endpointName: 'add-page-numbers',
|
||||
endpointName: (params) => (params.processingMode === 'frontend' ? '' : 'add-page-numbers'),
|
||||
validateFn: (params): boolean => {
|
||||
return params.fontSize > 0 && params.startingNumber > 0;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user