diff --git a/frontend/src/components/tooltips/useChangePermissionsTips.ts b/frontend/src/components/tooltips/useChangePermissionsTips.ts
deleted file mode 100644
index 39c6fc299..000000000
--- a/frontend/src/components/tooltips/useChangePermissionsTips.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { useTranslation } from 'react-i18next';
-import { TooltipContent } from '../../types/tips';
-
-export const useChangePermissionsTips = (): TooltipContent => {
- const { t } = useTranslation();
-
- return {
- header: {
- title: t("changePermissions.tooltip.header.title", "Change Permissions")
- },
- tips: [
- {
- description: t("changePermissions.tooltip.description.text", "Changes document permissions, allowing/disallowing access to different features in PDF readers.")
- },
- {
- title: t("warning.tooltipTitle", "Warning"),
- description: t("changePermissions.tooltip.warning.text", "To make these permissions unchangeable, use the Add Password tool to set an owner password.")
- }
- ]
- };
-};
diff --git a/frontend/src/tools/ChangePermissions.tsx b/frontend/src/tools/ChangePermissions.tsx
index 3982d1520..b4b2d7138 100644
--- a/frontend/src/tools/ChangePermissions.tsx
+++ b/frontend/src/tools/ChangePermissions.tsx
@@ -1,61 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import ChangePermissionsSettings from "../components/tools/changePermissions/ChangePermissionsSettings";
-import { useChangePermissionsParameters } from "../hooks/tools/changePermissions/useChangePermissionsParameters";
-import { useChangePermissionsOperation } from "../hooks/tools/changePermissions/useChangePermissionsOperation";
-import { useChangePermissionsTips } from "../components/tooltips/useChangePermissionsTips";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { changePermissionsDefinition } from './definitions/changePermissionsDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const ChangePermissions = (props: BaseToolProps) => {
- const { t } = useTranslation();
- const changePermissionsTips = useChangePermissionsTips();
-
- const base = useBaseTool(
- 'changePermissions',
- useChangePermissionsParameters,
- useChangePermissionsOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasResults,
- },
- steps: [
- {
- title: t("changePermissions.title", "Document Permissions"),
- isCollapsed: base.settingsCollapsed,
- onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined,
- tooltip: changePermissionsTips,
- content: (
-
- ),
- },
- ],
- executeButton: {
- text: t("changePermissions.submit", "Change Permissions"),
- 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("changePermissions.results.title", "Modified PDFs"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-ChangePermissions.tool = () => useChangePermissionsOperation;
+ChangePermissions.tool = () => changePermissionsDefinition.useOperation;
export default ChangePermissions as ToolComponent;
diff --git a/frontend/src/tools/RemoveCertificateSign.tsx b/frontend/src/tools/RemoveCertificateSign.tsx
index 195fc11f1..ae35a6772 100644
--- a/frontend/src/tools/RemoveCertificateSign.tsx
+++ b/frontend/src/tools/RemoveCertificateSign.tsx
@@ -1,45 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import { useRemoveCertificateSignParameters } from "../hooks/tools/removeCertificateSign/useRemoveCertificateSignParameters";
-import { useRemoveCertificateSignOperation } from "../hooks/tools/removeCertificateSign/useRemoveCertificateSignOperation";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { removeCertificateSignDefinition } from './definitions/removeCertificateSignDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const RemoveCertificateSign = (props: BaseToolProps) => {
- const { t } = useTranslation();
-
- const base = useBaseTool(
- 'removeCertificateSign',
- useRemoveCertificateSignParameters,
- useRemoveCertificateSignOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasResults,
- placeholder: t("removeCertSign.files.placeholder", "Select a PDF file in the main view to get started"),
- },
- steps: [],
- executeButton: {
- text: t("removeCertSign.submit", "Remove Signature"),
- 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("removeCertSign.results.title", "Certificate Removal Results"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-RemoveCertificateSign.tool = () => useRemoveCertificateSignOperation;
+RemoveCertificateSign.tool = () => removeCertificateSignDefinition.useOperation;
export default RemoveCertificateSign as ToolComponent;
diff --git a/frontend/src/tools/SingleLargePage.tsx b/frontend/src/tools/SingleLargePage.tsx
index 095428e70..74da8a628 100644
--- a/frontend/src/tools/SingleLargePage.tsx
+++ b/frontend/src/tools/SingleLargePage.tsx
@@ -1,45 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import { useSingleLargePageParameters } from "../hooks/tools/singleLargePage/useSingleLargePageParameters";
-import { useSingleLargePageOperation } from "../hooks/tools/singleLargePage/useSingleLargePageOperation";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { singleLargePageDefinition } from './definitions/singleLargePageDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const SingleLargePage = (props: BaseToolProps) => {
- const { t } = useTranslation();
-
- const base = useBaseTool(
- 'singleLargePage',
- useSingleLargePageParameters,
- useSingleLargePageOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasResults,
- placeholder: t("pdfToSinglePage.files.placeholder", "Select a PDF file in the main view to get started"),
- },
- steps: [],
- executeButton: {
- text: t("pdfToSinglePage.submit", "Convert To Single Page"),
- 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("pdfToSinglePage.results.title", "Single Page Results"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-SingleLargePage.tool = () => useSingleLargePageOperation;
+SingleLargePage.tool = () => singleLargePageDefinition.useOperation;
export default SingleLargePage as ToolComponent;
diff --git a/frontend/src/tools/UnlockPdfForms.tsx b/frontend/src/tools/UnlockPdfForms.tsx
index 332af5163..55bec879e 100644
--- a/frontend/src/tools/UnlockPdfForms.tsx
+++ b/frontend/src/tools/UnlockPdfForms.tsx
@@ -1,45 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import { useUnlockPdfFormsParameters } from "../hooks/tools/unlockPdfForms/useUnlockPdfFormsParameters";
-import { useUnlockPdfFormsOperation } from "../hooks/tools/unlockPdfForms/useUnlockPdfFormsOperation";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { unlockPdfFormsDefinition } from './definitions/unlockPdfFormsDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const UnlockPdfForms = (props: BaseToolProps) => {
- const { t } = useTranslation();
-
- const base = useBaseTool(
- 'unlockPdfForms',
- useUnlockPdfFormsParameters,
- useUnlockPdfFormsOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasFiles || base.hasResults,
- placeholder: t("unlockPDFForms.files.placeholder", "Select a PDF file in the main view to get started"),
- },
- steps: [],
- executeButton: {
- text: t("unlockPDFForms.submit", "Unlock Forms"),
- 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("unlockPDFForms.results.title", "Unlocked Forms Results"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-UnlockPdfForms.tool = () => useUnlockPdfFormsOperation;
+UnlockPdfForms.tool = () => unlockPdfFormsDefinition.useOperation;
export default UnlockPdfForms as ToolComponent;
diff --git a/frontend/src/tools/definitions/changePermissionsDefinition.ts b/frontend/src/tools/definitions/changePermissionsDefinition.ts
new file mode 100644
index 000000000..2f7be98f9
--- /dev/null
+++ b/frontend/src/tools/definitions/changePermissionsDefinition.ts
@@ -0,0 +1,42 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { ChangePermissionsParameters, useChangePermissionsParameters } from '../../hooks/tools/changePermissions/useChangePermissionsParameters';
+import { useChangePermissionsOperation } from '../../hooks/tools/changePermissions/useChangePermissionsOperation';
+import ChangePermissionsSettings from '../../components/tools/changePermissions/ChangePermissionsSettings';
+
+export const changePermissionsDefinition: ToolDefinition = {
+ id: 'changePermissions',
+
+ useParameters: useChangePermissionsParameters,
+ useOperation: useChangePermissionsOperation,
+
+ steps: [
+ {
+ key: 'settings',
+ title: (t) => t("changePermissions.title", "Document Permissions"),
+ component: ChangePermissionsSettings,
+ tooltip: (t) => ({
+ header: {
+ title: t("changePermissions.tooltip.header.title", "Change Permissions")
+ },
+ tips: [
+ {
+ description: t("changePermissions.tooltip.description.text", "Changes document permissions, allowing/disallowing access to different features in PDF readers.")
+ },
+ {
+ title: t("warning.tooltipTitle", "Warning"),
+ description: t("changePermissions.tooltip.warning.text", "To make these permissions unchangeable, use the Add Password tool to set an owner password.")
+ }
+ ]
+ }),
+ },
+ ],
+
+ executeButton: {
+ text: (t) => t("changePermissions.submit", "Change Permissions"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("changePermissions.results.title", "Modified PDFs"),
+ },
+};
diff --git a/frontend/src/tools/definitions/removeCertificateSignDefinition.ts b/frontend/src/tools/definitions/removeCertificateSignDefinition.ts
new file mode 100644
index 000000000..937fb0291
--- /dev/null
+++ b/frontend/src/tools/definitions/removeCertificateSignDefinition.ts
@@ -0,0 +1,21 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { RemoveCertificateSignParameters, useRemoveCertificateSignParameters } from '../../hooks/tools/removeCertificateSign/useRemoveCertificateSignParameters';
+import { useRemoveCertificateSignOperation } from '../../hooks/tools/removeCertificateSign/useRemoveCertificateSignOperation';
+
+export const removeCertificateSignDefinition: ToolDefinition = {
+ id: 'removeCertificateSign',
+
+ useParameters: useRemoveCertificateSignParameters,
+ useOperation: useRemoveCertificateSignOperation,
+
+ steps: [],
+
+ executeButton: {
+ text: (t) => t("removeCertSign.submit", "Remove Signature"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("removeCertSign.results.title", "Certificate Removal Results"),
+ },
+};
diff --git a/frontend/src/tools/definitions/singleLargePageDefinition.ts b/frontend/src/tools/definitions/singleLargePageDefinition.ts
new file mode 100644
index 000000000..c5f9ff705
--- /dev/null
+++ b/frontend/src/tools/definitions/singleLargePageDefinition.ts
@@ -0,0 +1,21 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { SingleLargePageParameters, useSingleLargePageParameters } from '../../hooks/tools/singleLargePage/useSingleLargePageParameters';
+import { useSingleLargePageOperation } from '../../hooks/tools/singleLargePage/useSingleLargePageOperation';
+
+export const singleLargePageDefinition: ToolDefinition = {
+ id: 'singleLargePage',
+
+ useParameters: useSingleLargePageParameters,
+ useOperation: useSingleLargePageOperation,
+
+ steps: [],
+
+ executeButton: {
+ text: (t) => t("pdfToSinglePage.submit", "Convert To Single Page"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("pdfToSinglePage.results.title", "Single Page Results"),
+ },
+};
diff --git a/frontend/src/tools/definitions/unlockPdfFormsDefinition.ts b/frontend/src/tools/definitions/unlockPdfFormsDefinition.ts
new file mode 100644
index 000000000..e765fb0b6
--- /dev/null
+++ b/frontend/src/tools/definitions/unlockPdfFormsDefinition.ts
@@ -0,0 +1,21 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { UnlockPdfFormsParameters, useUnlockPdfFormsParameters } from '../../hooks/tools/unlockPdfForms/useUnlockPdfFormsParameters';
+import { useUnlockPdfFormsOperation } from '../../hooks/tools/unlockPdfForms/useUnlockPdfFormsOperation';
+
+export const unlockPdfFormsDefinition: ToolDefinition = {
+ id: 'unlockPdfForms',
+
+ useParameters: useUnlockPdfFormsParameters,
+ useOperation: useUnlockPdfFormsOperation,
+
+ steps: [],
+
+ executeButton: {
+ text: (t) => t("unlockPDFForms.submit", "Unlock Forms"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("unlockPDFForms.results.title", "Unlocked Forms Results"),
+ },
+};