Data drive Sanitize and Remove Password

This commit is contained in:
James Brunton 2025-09-04 13:48:44 +01:00
parent a16ee308e5
commit 5be766121a
5 changed files with 79 additions and 126 deletions

View File

@ -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."
)
}
]
};
};

View File

@ -1,61 +1,12 @@
import { useTranslation } from "react-i18next"; import GenericTool from '../components/tools/shared/GenericTool';
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { removePasswordDefinition } from './definitions/removePasswordDefinition';
import RemovePasswordSettings from "../components/tools/removePassword/RemovePasswordSettings"; import { BaseToolProps, ToolComponent } from '../types/tool';
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";
const RemovePassword = (props: BaseToolProps) => { const RemovePassword = (props: BaseToolProps) => {
const { t } = useTranslation(); return <GenericTool definition={removePasswordDefinition} {...props} />;
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: (
<RemovePasswordSettings
parameters={base.params.parameters}
onParameterChange={base.params.updateParameter}
disabled={base.endpointLoading}
/>
),
},
],
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,
},
});
}; };
// Static method to get the operation hook for automation // Static method to get the operation hook for automation
RemovePassword.tool = () => useRemovePasswordOperation; RemovePassword.tool = () => removePasswordDefinition.useOperation;
export default RemovePassword as ToolComponent; export default RemovePassword as ToolComponent;

View File

@ -1,59 +1,12 @@
import { useTranslation } from "react-i18next"; import GenericTool from '../components/tools/shared/GenericTool';
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { sanitizeDefinition } from './definitions/sanitizeDefinition';
import SanitizeSettings from "../components/tools/sanitize/SanitizeSettings"; import { BaseToolProps, ToolComponent } from '../types/tool';
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";
const Sanitize = (props: BaseToolProps) => { const Sanitize = (props: BaseToolProps) => {
const { t } = useTranslation(); return <GenericTool definition={sanitizeDefinition} {...props} />;
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: (
<SanitizeSettings
parameters={base.params.parameters}
onParameterChange={base.params.updateParameter}
disabled={base.endpointLoading}
/>
),
},
],
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,
},
});
}; };
// Static method to get the operation hook for automation // Static method to get the operation hook for automation
Sanitize.tool = () => useSanitizeOperation; Sanitize.tool = () => sanitizeDefinition.useOperation;
export default Sanitize as ToolComponent; export default Sanitize as ToolComponent;

View File

@ -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<RemovePasswordParameters> = {
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"),
},
};

View File

@ -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<SanitizeParameters> = {
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"),
},
};