{tool.icon}
@@ -130,4 +142,4 @@ const ToolSearch = ({
);
};
-export default ToolSearch;
\ No newline at end of file
+export default ToolSearch;
diff --git a/frontend/src/data/useTranslatedToolRegistry.tsx b/frontend/src/data/useTranslatedToolRegistry.tsx
index ee8472bb8..e2d94fc14 100644
--- a/frontend/src/data/useTranslatedToolRegistry.tsx
+++ b/frontend/src/data/useTranslatedToolRegistry.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import SplitPdfPanel from "../tools/Split";
import CompressPdfPanel from "../tools/Compress";
@@ -21,7 +21,7 @@ import RemoveCertificateSign from '../tools/RemoveCertificateSign';
export function useFlatToolRegistry(): ToolRegistry {
const { t } = useTranslation();
- return {
+ return useMemo(() => ({
// Signing
"certSign": {
@@ -618,5 +618,5 @@ export function useFlatToolRegistry(): ToolRegistry {
category: ToolCategory.RECOMMENDED_TOOLS,
subcategory: SubcategoryId.GENERAL
},
- };
+ }), [t]);
}
\ No newline at end of file
diff --git a/frontend/src/tools/Automate.tsx b/frontend/src/tools/Automate.tsx
index bdbc7715e..49feb09c1 100644
--- a/frontend/src/tools/Automate.tsx
+++ b/frontend/src/tools/Automate.tsx
@@ -5,12 +5,13 @@ import { useToolFileSelection } from "../contexts/FileSelectionContext";
import { createToolFlow } from "../components/tools/shared/createToolFlow";
import AutomationSelection from "../components/tools/automate/AutomationSelection";
-import AutomationCreation from "../components/tools/automate/AutomationCreation";
+import AutomationCreation, { AutomationMode } from "../components/tools/automate/AutomationCreation";
import ToolSequence from "../components/tools/automate/ToolSequence";
import { useAutomateOperation } from "../hooks/tools/automate/useAutomateOperation";
import { BaseToolProps } from "../types/tool";
import { useFlatToolRegistry } from "../data/useTranslatedToolRegistry";
+import { useSavedAutomations } from "../hooks/tools/automate/useSavedAutomations";
const Automate = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation();
@@ -22,6 +23,7 @@ const Automate = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const automateOperation = useAutomateOperation();
const toolRegistry = useFlatToolRegistry();
+ const { savedAutomations, deleteAutomation } = useSavedAutomations();
const handleStepChange = (data: any) => {
setStepData(data);
@@ -40,9 +42,18 @@ const Automate = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
case 'selection':
return (
handleStepChange({ step: 'creation', mode: 'custom' })}
- onSelectSuggested={(automation: any) => handleStepChange({ step: 'creation', mode: 'suggested', automation })}
- onCreateNew={() => handleStepChange({ step: 'creation', mode: 'create' })}
+ savedAutomations={savedAutomations}
+ onCreateNew={() => handleStepChange({ step: 'creation', mode: AutomationMode.CREATE })}
+ onRun={(automation: any) => handleStepChange({ step: 'sequence', automation })}
+ onEdit={(automation: any) => handleStepChange({ step: 'creation', mode: AutomationMode.EDIT, automation })}
+ onDelete={async (automation: any) => {
+ try {
+ await deleteAutomation(automation.id);
+ } catch (error) {
+ console.error('Failed to delete automation:', error);
+ onError?.(`Failed to delete automation: ${automation.name}`);
+ }
+ }}
/>
);