Compare commits

..

No commits in common. "ad7cd6a4172d477681918aef790c44d5b4a29a0b" and "aa3797cb22271cc1526edf170a89a6a98ba3f31a" have entirely different histories.

4 changed files with 37 additions and 3 deletions

View File

@ -19,7 +19,7 @@ const RemoveBlanksSettings = ({ parameters, onParameterChange, disabled = false
label={t('removeBlanks.threshold.label', 'Pixel Whiteness Threshold')}
value={parameters.threshold}
onChange={(v) => onParameterChange('threshold', typeof v === 'string' ? Number(v) : v)}
unit=''
unit={t('removeBlanks.threshold.unit', '')}
min={0}
max={255}
disabled={disabled}
@ -31,7 +31,7 @@ const RemoveBlanksSettings = ({ parameters, onParameterChange, disabled = false
label={t('removeBlanks.whitePercent.label', 'White Percent')}
value={parameters.whitePercent}
onChange={(v) => onParameterChange('whitePercent', typeof v === 'string' ? Number(v) : v)}
unit='%'
unit={t('removeBlanks.whitePercent.unit', '%')}
min={0.1}
max={100}
disabled={disabled}

View File

@ -19,6 +19,7 @@ export const removeBlanksOperationConfig = {
buildFormData: buildRemoveBlanksFormData,
operationType: 'remove-blanks',
endpoint: '/api/v1/misc/remove-blanks',
filePrefix: 'noblank_',
defaultParameters,
} as const satisfies ToolOperationConfig<RemoveBlanksParameters>;
@ -34,6 +35,7 @@ export const useRemoveBlanksOperation = () => {
return useToolOperation<RemoveBlanksParameters>({
...removeBlanksOperationConfig,
responseHandler,
filePrefix: t('removeBlanks.filenamePrefix', 'noblank') + '_',
getErrorMessage: createStandardErrorHandler(
t('removeBlanks.error.failed', 'Failed to remove blank pages')
)

View File

@ -1,3 +1,4 @@
import { useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import { ToolType, useToolOperation, ToolOperationConfig } from '../shared/useToolOperation';
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
@ -16,14 +17,24 @@ export const removePagesOperationConfig = {
buildFormData: buildRemovePagesFormData,
operationType: 'remove-pages',
endpoint: '/api/v1/general/remove-pages',
filePrefix: 'removed_pages_',
defaultParameters,
} as const satisfies ToolOperationConfig<RemovePagesParameters>;
export const useRemovePagesOperation = () => {
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>({
...removePagesOperationConfig,
responseHandler,
filePrefix: t('removePages.filenamePrefix', 'removed_pages') + '_',
getErrorMessage: createStandardErrorHandler(
t('removePages.error.failed', 'Failed to remove pages')
)

View File

@ -1,3 +1,4 @@
import { useState, useEffect } from "react";
import { useTranslation } from "react-i18next";
import { createToolFlow } from "../components/tools/shared/createToolFlow";
import { BaseToolProps, ToolComponent } from "../types/tool";
@ -18,6 +19,23 @@ const RemoveBlanks = (props: BaseToolProps) => {
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 = (
<RemoveBlanksSettings
parameters={base.params.parameters}
@ -29,6 +47,9 @@ const RemoveBlanks = (props: BaseToolProps) => {
const handleSettingsClick = () => {
if (base.hasResults) {
base.handleSettingsReset();
} else {
if (!base.hasFiles) return;
setExpandedStep(expandedStep === "settings" ? null : "settings");
}
};
@ -40,7 +61,7 @@ const RemoveBlanks = (props: BaseToolProps) => {
steps: [
{
title: t("removeBlanks.settings.title", "Settings"),
isCollapsed: base.settingsCollapsed,
isCollapsed: expandedStep !== "settings",
onCollapsedClick: handleSettingsClick,
content: settingsContent,
tooltip: tooltipContent,