mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-24 04:26:14 +00:00
Compare commits
No commits in common. "ad7cd6a4172d477681918aef790c44d5b4a29a0b" and "aa3797cb22271cc1526edf170a89a6a98ba3f31a" have entirely different histories.
ad7cd6a417
...
aa3797cb22
@ -19,7 +19,7 @@ const RemoveBlanksSettings = ({ parameters, onParameterChange, disabled = false
|
|||||||
label={t('removeBlanks.threshold.label', 'Pixel Whiteness Threshold')}
|
label={t('removeBlanks.threshold.label', 'Pixel Whiteness Threshold')}
|
||||||
value={parameters.threshold}
|
value={parameters.threshold}
|
||||||
onChange={(v) => onParameterChange('threshold', typeof v === 'string' ? Number(v) : v)}
|
onChange={(v) => onParameterChange('threshold', typeof v === 'string' ? Number(v) : v)}
|
||||||
unit=''
|
unit={t('removeBlanks.threshold.unit', '')}
|
||||||
min={0}
|
min={0}
|
||||||
max={255}
|
max={255}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
@ -31,7 +31,7 @@ const RemoveBlanksSettings = ({ parameters, onParameterChange, disabled = false
|
|||||||
label={t('removeBlanks.whitePercent.label', 'White Percent')}
|
label={t('removeBlanks.whitePercent.label', 'White Percent')}
|
||||||
value={parameters.whitePercent}
|
value={parameters.whitePercent}
|
||||||
onChange={(v) => onParameterChange('whitePercent', typeof v === 'string' ? Number(v) : v)}
|
onChange={(v) => onParameterChange('whitePercent', typeof v === 'string' ? Number(v) : v)}
|
||||||
unit='%'
|
unit={t('removeBlanks.whitePercent.unit', '%')}
|
||||||
min={0.1}
|
min={0.1}
|
||||||
max={100}
|
max={100}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
|
@ -19,6 +19,7 @@ export const removeBlanksOperationConfig = {
|
|||||||
buildFormData: buildRemoveBlanksFormData,
|
buildFormData: buildRemoveBlanksFormData,
|
||||||
operationType: 'remove-blanks',
|
operationType: 'remove-blanks',
|
||||||
endpoint: '/api/v1/misc/remove-blanks',
|
endpoint: '/api/v1/misc/remove-blanks',
|
||||||
|
filePrefix: 'noblank_',
|
||||||
defaultParameters,
|
defaultParameters,
|
||||||
} as const satisfies ToolOperationConfig<RemoveBlanksParameters>;
|
} as const satisfies ToolOperationConfig<RemoveBlanksParameters>;
|
||||||
|
|
||||||
@ -34,6 +35,7 @@ export const useRemoveBlanksOperation = () => {
|
|||||||
return useToolOperation<RemoveBlanksParameters>({
|
return useToolOperation<RemoveBlanksParameters>({
|
||||||
...removeBlanksOperationConfig,
|
...removeBlanksOperationConfig,
|
||||||
responseHandler,
|
responseHandler,
|
||||||
|
filePrefix: t('removeBlanks.filenamePrefix', 'noblank') + '_',
|
||||||
getErrorMessage: createStandardErrorHandler(
|
getErrorMessage: createStandardErrorHandler(
|
||||||
t('removeBlanks.error.failed', 'Failed to remove blank pages')
|
t('removeBlanks.error.failed', 'Failed to remove blank pages')
|
||||||
)
|
)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ToolType, useToolOperation, ToolOperationConfig } from '../shared/useToolOperation';
|
import { ToolType, useToolOperation, ToolOperationConfig } from '../shared/useToolOperation';
|
||||||
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
||||||
@ -16,14 +17,24 @@ export const removePagesOperationConfig = {
|
|||||||
buildFormData: buildRemovePagesFormData,
|
buildFormData: buildRemovePagesFormData,
|
||||||
operationType: 'remove-pages',
|
operationType: 'remove-pages',
|
||||||
endpoint: '/api/v1/general/remove-pages',
|
endpoint: '/api/v1/general/remove-pages',
|
||||||
|
filePrefix: 'removed_pages_',
|
||||||
defaultParameters,
|
defaultParameters,
|
||||||
} as const satisfies ToolOperationConfig<RemovePagesParameters>;
|
} as const satisfies ToolOperationConfig<RemovePagesParameters>;
|
||||||
|
|
||||||
export const useRemovePagesOperation = () => {
|
export const useRemovePagesOperation = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
// const { extractZipFiles } = useToolResources();
|
||||||
|
|
||||||
|
const responseHandler = useCallback(async (blob: Blob, originalFiles: File[]): Promise<File[]> => {
|
||||||
|
// Backend returns a PDF for remove-pages
|
||||||
|
const base = originalFiles[0]?.name?.replace(/\.[^.]+$/, '') || 'document';
|
||||||
|
return [new File([blob], `removed_pages_${base}.pdf`, { type: 'application/pdf' })];
|
||||||
|
}, []);
|
||||||
|
|
||||||
return useToolOperation<RemovePagesParameters>({
|
return useToolOperation<RemovePagesParameters>({
|
||||||
...removePagesOperationConfig,
|
...removePagesOperationConfig,
|
||||||
|
responseHandler,
|
||||||
|
filePrefix: t('removePages.filenamePrefix', 'removed_pages') + '_',
|
||||||
getErrorMessage: createStandardErrorHandler(
|
getErrorMessage: createStandardErrorHandler(
|
||||||
t('removePages.error.failed', 'Failed to remove pages')
|
t('removePages.error.failed', 'Failed to remove pages')
|
||||||
)
|
)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { useState, useEffect } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { createToolFlow } from "../components/tools/shared/createToolFlow";
|
import { createToolFlow } from "../components/tools/shared/createToolFlow";
|
||||||
import { BaseToolProps, ToolComponent } from "../types/tool";
|
import { BaseToolProps, ToolComponent } from "../types/tool";
|
||||||
@ -18,6 +19,23 @@ const RemoveBlanks = (props: BaseToolProps) => {
|
|||||||
props
|
props
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Step expansion state management
|
||||||
|
const [expandedStep, setExpandedStep] = useState<"files" | "settings" | null>("files");
|
||||||
|
|
||||||
|
// Auto-expand settings when files are selected
|
||||||
|
useEffect(() => {
|
||||||
|
if (base.selectedFiles.length > 0 && expandedStep === "files") {
|
||||||
|
setExpandedStep("settings");
|
||||||
|
}
|
||||||
|
}, [base.selectedFiles.length, expandedStep]);
|
||||||
|
|
||||||
|
// Collapse all steps when results appear
|
||||||
|
useEffect(() => {
|
||||||
|
if (base.hasResults) {
|
||||||
|
setExpandedStep(null);
|
||||||
|
}
|
||||||
|
}, [base.hasResults]);
|
||||||
|
|
||||||
const settingsContent = (
|
const settingsContent = (
|
||||||
<RemoveBlanksSettings
|
<RemoveBlanksSettings
|
||||||
parameters={base.params.parameters}
|
parameters={base.params.parameters}
|
||||||
@ -29,6 +47,9 @@ const RemoveBlanks = (props: BaseToolProps) => {
|
|||||||
const handleSettingsClick = () => {
|
const handleSettingsClick = () => {
|
||||||
if (base.hasResults) {
|
if (base.hasResults) {
|
||||||
base.handleSettingsReset();
|
base.handleSettingsReset();
|
||||||
|
} else {
|
||||||
|
if (!base.hasFiles) return;
|
||||||
|
setExpandedStep(expandedStep === "settings" ? null : "settings");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,7 +61,7 @@ const RemoveBlanks = (props: BaseToolProps) => {
|
|||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
title: t("removeBlanks.settings.title", "Settings"),
|
title: t("removeBlanks.settings.title", "Settings"),
|
||||||
isCollapsed: base.settingsCollapsed,
|
isCollapsed: expandedStep !== "settings",
|
||||||
onCollapsedClick: handleSettingsClick,
|
onCollapsedClick: handleSettingsClick,
|
||||||
content: settingsContent,
|
content: settingsContent,
|
||||||
tooltip: tooltipContent,
|
tooltip: tooltipContent,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user