Update to get running in current version

This commit is contained in:
James Brunton 2025-09-09 13:30:44 +01:00
parent a6e250e2fd
commit 8206310ef3
4 changed files with 29 additions and 9 deletions

View File

@ -20,12 +20,12 @@ vi.mock('../../../utils/toolErrorHandler', () => ({
}));
// Import the mocked function
import { ToolOperationHook, useToolOperation } from '../shared/useToolOperation';
import { MultiFileToolOperationConfig, ToolOperationHook, useToolOperation } from '../shared/useToolOperation';
describe('useMergeOperation', () => {
const mockUseToolOperation = vi.mocked(useToolOperation<MergeParameters>);
const getToolConfig = () => mockUseToolOperation.mock.calls[0][0];
const getToolConfig = () => mockUseToolOperation.mock.calls[0][0] as MultiFileToolOperationConfig<MergeParameters>;
const mockToolOperationReturn: ToolOperationHook<unknown> = {
files: [],
@ -41,6 +41,9 @@ describe('useMergeOperation', () => {
resetResults: vi.fn(),
clearError: vi.fn(),
cancelOperation: vi.fn(),
undoOperation: function (): Promise<void> {
throw new Error('Function not implemented.');
}
};
beforeEach(() => {
@ -61,7 +64,7 @@ describe('useMergeOperation', () => {
generateTableOfContents: false
};
const formData = config.buildFormData(parameters, mockFiles as any /* FIX ME */);
const formData = config.buildFormData(parameters, mockFiles);
// Verify files are appended
expect(formData.getAll('fileInput')).toHaveLength(2);
@ -115,7 +118,7 @@ describe('useMergeOperation', () => {
removeDigitalSignature: false,
generateTableOfContents: false
};
const formData1 = config.buildFormData(params1, mockFiles as any /* FIX ME */);
const formData1 = config.buildFormData(params1, mockFiles);
expect(formData1.get('removeCertSign')).toBe('false');
expect(formData1.get('generateToc')).toBe('false');
@ -124,7 +127,7 @@ describe('useMergeOperation', () => {
removeDigitalSignature: true,
generateTableOfContents: true
};
const formData2 = config.buildFormData(params2, mockFiles as any /* FIX ME */);
const formData2 = config.buildFormData(params2, mockFiles);
expect(formData2.get('removeCertSign')).toBe('true');
expect(formData2.get('generateToc')).toBe('true');
});

View File

@ -1,5 +1,5 @@
import { useTranslation } from 'react-i18next';
import { useToolOperation, ResponseHandler, ToolOperationConfig } from '../shared/useToolOperation';
import { useToolOperation, ResponseHandler, ToolOperationConfig, ToolType } from '../shared/useToolOperation';
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
import { MergeParameters } from './useMergeParameters';
@ -23,11 +23,11 @@ const mergeResponseHandler: ResponseHandler = (blob: Blob, originalFiles: File[]
// Operation configuration for automation
export const mergeOperationConfig: ToolOperationConfig<MergeParameters> = {
toolType: ToolType.multiFile,
buildFormData,
operationType: 'merge',
endpoint: '/api/v1/general/merge-pdfs',
buildFormData,
filePrefix: 'merged_',
multiFileEndpoint: true,
responseHandler: mergeResponseHandler,
};

View File

@ -2,7 +2,6 @@ import { useState, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { useFlatToolRegistry } from "../data/useTranslatedToolRegistry";
import { getAllEndpoints, type ToolRegistryEntry } from "../data/toolsTaxonomy";
import MergeIcon from "@mui/icons-material/Merge";
import { useMultipleEndpointsEnabled } from "./useEndpointConfig";
import { FileId } from '../types/file';

View File

@ -52,6 +52,11 @@ const Merge = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
onPreviewFile?.(null);
};
const handleUndo = async () => {
await mergeOperation.undoOperation();
onPreviewFile?.(null);
};
// TODO: Move to more general place so other tools can use it
const sortFiles = useCallback((sortType: 'filename' | 'dateModified', ascending: boolean = true) => {
// Sort the FileIds based on their corresponding File properties
@ -102,6 +107,18 @@ const Merge = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
title: "Settings",
isCollapsed: settingsCollapsed,
onCollapsedClick: settingsCollapsed ? handleSettingsReset : undefined,
tooltip: {
tips: [
{
title: t('merge.removeDigitalSignature.tooltip.title', 'Remove Digital Signature'),
description: t('merge.removeDigitalSignature.tooltip.description', 'Digital signatures will be invalidated when merging files. Check this to remove them from the final merged PDF.')
},
{
title: t('merge.generateTableOfContents.tooltip.title', 'Generate Table of Contents'),
description: t('merge.generateTableOfContents.tooltip.description', 'Automatically creates a clickable table of contents in the merged PDF based on the original file names and page numbers.')
}
]
},
content: (
<MergeSettings
parameters={mergeParams.parameters}
@ -123,6 +140,7 @@ const Merge = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
operation: mergeOperation,
title: t("merge.title", "Merge Results"),
onFileClick: handleThumbnailClick,
onUndo: handleUndo,
},
});
};