diff --git a/frontend/src/components/tooltips/useRemovePasswordTips.ts b/frontend/src/components/tooltips/useRemovePasswordTips.ts deleted file mode 100644 index 1ec303cd6..000000000 --- a/frontend/src/components/tooltips/useRemovePasswordTips.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import { TooltipContent } from '../../types/tips'; - -export const useRemovePasswordTips = (): TooltipContent => { - const { t } = useTranslation(); - - return { - header: { - title: t("removePassword.title", "Remove Password") - }, - tips: [ - { - description: t( - "removePassword.tooltip.description", - "Removing password protection requires the current password that was used to encrypt the PDF. This will decrypt the document, making it accessible without a password." - ) - } - ] - }; -}; diff --git a/frontend/src/tools/RemovePassword.tsx b/frontend/src/tools/RemovePassword.tsx index 970eb324b..3688f6a66 100644 --- a/frontend/src/tools/RemovePassword.tsx +++ b/frontend/src/tools/RemovePassword.tsx @@ -1,61 +1,12 @@ -import { useTranslation } from "react-i18next"; -import { createToolFlow } from "../components/tools/shared/createToolFlow"; -import RemovePasswordSettings from "../components/tools/removePassword/RemovePasswordSettings"; -import { useRemovePasswordParameters } from "../hooks/tools/removePassword/useRemovePasswordParameters"; -import { useRemovePasswordOperation } from "../hooks/tools/removePassword/useRemovePasswordOperation"; -import { useRemovePasswordTips } from "../components/tooltips/useRemovePasswordTips"; -import { useBaseTool } from "../hooks/tools/shared/useBaseTool"; -import { BaseToolProps, ToolComponent } from "../types/tool"; +import GenericTool from '../components/tools/shared/GenericTool'; +import { removePasswordDefinition } from './definitions/removePasswordDefinition'; +import { BaseToolProps, ToolComponent } from '../types/tool'; const RemovePassword = (props: BaseToolProps) => { - const { t } = useTranslation(); - const removePasswordTips = useRemovePasswordTips(); - - const base = useBaseTool( - 'removePassword', - useRemovePasswordParameters, - useRemovePasswordOperation, - props - ); - - return createToolFlow({ - files: { - selectedFiles: base.selectedFiles, - isCollapsed: base.hasResults, - }, - steps: [ - { - title: t("removePassword.password.stepTitle", "Remove Password"), - isCollapsed: base.settingsCollapsed, - onCollapsedClick: base.hasResults ? base.handleSettingsReset : undefined, - tooltip: removePasswordTips, - content: ( - - ), - }, - ], - executeButton: { - text: t("removePassword.submit", "Remove Password"), - isVisible: !base.hasResults, - loadingText: t("loading"), - onClick: base.handleExecute, - disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled, - }, - review: { - isVisible: base.hasResults, - operation: base.operation, - title: t("removePassword.results.title", "Decrypted PDFs"), - onFileClick: base.handleThumbnailClick, - onUndo: base.handleUndo, - }, - }); + return ; }; // Static method to get the operation hook for automation -RemovePassword.tool = () => useRemovePasswordOperation; +RemovePassword.tool = () => removePasswordDefinition.useOperation; export default RemovePassword as ToolComponent; diff --git a/frontend/src/tools/Sanitize.tsx b/frontend/src/tools/Sanitize.tsx index f37c8fa0b..28c0cc220 100644 --- a/frontend/src/tools/Sanitize.tsx +++ b/frontend/src/tools/Sanitize.tsx @@ -1,59 +1,12 @@ -import { useTranslation } from "react-i18next"; -import { createToolFlow } from "../components/tools/shared/createToolFlow"; -import SanitizeSettings from "../components/tools/sanitize/SanitizeSettings"; -import { useSanitizeParameters } from "../hooks/tools/sanitize/useSanitizeParameters"; -import { useSanitizeOperation } from "../hooks/tools/sanitize/useSanitizeOperation"; -import { useBaseTool } from "../hooks/tools/shared/useBaseTool"; -import { BaseToolProps, ToolComponent } from "../types/tool"; +import GenericTool from '../components/tools/shared/GenericTool'; +import { sanitizeDefinition } from './definitions/sanitizeDefinition'; +import { BaseToolProps, ToolComponent } from '../types/tool'; const Sanitize = (props: BaseToolProps) => { - const { t } = useTranslation(); - - const base = useBaseTool( - 'sanitize', - useSanitizeParameters, - useSanitizeOperation, - props - ); - - return createToolFlow({ - files: { - selectedFiles: base.selectedFiles, - isCollapsed: base.hasResults, - placeholder: t("sanitize.files.placeholder", "Select a PDF file in the main view to get started"), - }, - steps: [ - { - title: t("sanitize.steps.settings", "Settings"), - isCollapsed: base.settingsCollapsed, - onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined, - content: ( - - ), - }, - ], - executeButton: { - text: t("sanitize.submit", "Sanitize PDF"), - isVisible: !base.hasResults, - loadingText: t("loading"), - onClick: base.handleExecute, - disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled, - }, - review: { - isVisible: base.hasResults, - operation: base.operation, - title: t("sanitize.sanitizationResults", "Sanitization Results"), - onFileClick: base.handleThumbnailClick, - onUndo: base.handleUndo, - }, - }); + return ; }; // Static method to get the operation hook for automation -Sanitize.tool = () => useSanitizeOperation; +Sanitize.tool = () => sanitizeDefinition.useOperation; export default Sanitize as ToolComponent; diff --git a/frontend/src/tools/definitions/removePasswordDefinition.ts b/frontend/src/tools/definitions/removePasswordDefinition.ts new file mode 100644 index 000000000..8f048a59c --- /dev/null +++ b/frontend/src/tools/definitions/removePasswordDefinition.ts @@ -0,0 +1,41 @@ +import { ToolDefinition } from '../../components/tools/shared/toolDefinition'; +import { RemovePasswordParameters, useRemovePasswordParameters } from '../../hooks/tools/removePassword/useRemovePasswordParameters'; +import { useRemovePasswordOperation } from '../../hooks/tools/removePassword/useRemovePasswordOperation'; +import RemovePasswordSettings from '../../components/tools/removePassword/RemovePasswordSettings'; + +export const removePasswordDefinition: ToolDefinition = { + id: 'removePassword', + + useParameters: useRemovePasswordParameters, + useOperation: useRemovePasswordOperation, + + steps: [ + { + key: 'settings', + title: (t) => t("removePassword.password.stepTitle", "Remove Password"), + component: RemovePasswordSettings, + tooltip: (t) => ({ + header: { + title: t("removePassword.title", "Remove Password") + }, + tips: [ + { + description: t( + "removePassword.tooltip.description", + "Removing password protection requires the current password that was used to encrypt the PDF. This will decrypt the document, making it accessible without a password." + ) + } + ] + }), + }, + ], + + executeButton: { + text: (t) => t("removePassword.submit", "Remove Password"), + loadingText: (t) => t("loading"), + }, + + review: { + title: (t) => t("removePassword.results.title", "Decrypted PDFs"), + }, +}; diff --git a/frontend/src/tools/definitions/sanitizeDefinition.ts b/frontend/src/tools/definitions/sanitizeDefinition.ts new file mode 100644 index 000000000..991add9b1 --- /dev/null +++ b/frontend/src/tools/definitions/sanitizeDefinition.ts @@ -0,0 +1,28 @@ +import { ToolDefinition } from '../../components/tools/shared/toolDefinition'; +import { SanitizeParameters, useSanitizeParameters } from '../../hooks/tools/sanitize/useSanitizeParameters'; +import { useSanitizeOperation } from '../../hooks/tools/sanitize/useSanitizeOperation'; +import SanitizeSettings from '../../components/tools/sanitize/SanitizeSettings'; + +export const sanitizeDefinition: ToolDefinition = { + id: 'sanitize', + + useParameters: useSanitizeParameters, + useOperation: useSanitizeOperation, + + steps: [ + { + key: 'settings', + title: (t) => t("sanitize.steps.settings", "Settings"), + component: SanitizeSettings, + }, + ], + + executeButton: { + text: (t) => t("sanitize.submit", "Sanitize PDF"), + loadingText: (t) => t("loading"), + }, + + review: { + title: (t) => t("sanitize.sanitizationResults", "Sanitization Results"), + }, +};