Update navigation on tools

This commit is contained in:
Reece Browne 2025-08-20 19:30:32 +01:00
parent 9c49f329e2
commit 7328cc6922
10 changed files with 35 additions and 18 deletions

View File

@ -20,6 +20,8 @@ export type ModeType =
| 'ocr' | 'ocr'
| 'convert' | 'convert'
| 'addPassword' | 'addPassword'
| 'addWatermark'
| 'removePassword'
| 'changePermissions' | 'changePermissions'
| 'sanitize'; | 'sanitize';

View File

@ -2,6 +2,7 @@ import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useEndpointEnabled } from "../hooks/useEndpointConfig";
import { useToolFileSelection } from "../contexts/FileContext"; import { useToolFileSelection } from "../contexts/FileContext";
import { useNavigationActions } from "../contexts/NavigationContext";
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { createToolFlow } from "../components/tools/shared/createToolFlow";
@ -16,6 +17,7 @@ import { BaseToolProps } from "../types/tool";
const AddPassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const AddPassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions();
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const [collapsedPermissions, setCollapsedPermissions] = useState(true); const [collapsedPermissions, setCollapsedPermissions] = useState(true);
@ -28,6 +30,11 @@ const AddPassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
// Endpoint validation // Endpoint validation
const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(addPasswordParams.getEndpointName()); const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(addPasswordParams.getEndpointName());
// Set URL mode when component loads
useEffect(() => {
actions.setMode("addPassword");
}, [actions]);
useEffect(() => { useEffect(() => {
addPasswordOperation.resetResults(); addPasswordOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);

View File

@ -2,6 +2,7 @@ import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useEndpointEnabled } from "../hooks/useEndpointConfig";
import { useToolFileSelection } from "../contexts/FileContext"; import { useToolFileSelection } from "../contexts/FileContext";
import { useNavigationActions } from "../contexts/NavigationContext";
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { createToolFlow } from "../components/tools/shared/createToolFlow";
@ -24,6 +25,7 @@ import { BaseToolProps } from "../types/tool";
const AddWatermark = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const AddWatermark = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions();
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const [collapsedType, setCollapsedType] = useState(false); const [collapsedType, setCollapsedType] = useState(false);
@ -41,6 +43,11 @@ const AddWatermark = ({ onPreviewFile, onComplete, onError }: BaseToolProps) =>
// Endpoint validation // Endpoint validation
const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled("add-watermark"); const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled("add-watermark");
// Set URL mode when component loads
useEffect(() => {
actions.setMode("addWatermark");
}, [actions]);
useEffect(() => { useEffect(() => {
watermarkOperation.resetResults(); watermarkOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);

View File

@ -16,7 +16,6 @@ import { BaseToolProps } from "../types/tool";
const ChangePermissions = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const ChangePermissions = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const changePermissionsParams = useChangePermissionsParameters(); const changePermissionsParams = useChangePermissionsParameters();
@ -49,13 +48,13 @@ const ChangePermissions = ({ onPreviewFile, onComplete, onError }: BaseToolProps
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "changePermissions"); sessionStorage.setItem("previousMode", "changePermissions");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const handleSettingsReset = () => { const handleSettingsReset = () => {
changePermissionsOperation.resetResults(); changePermissionsOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("changePermissions"); actions.setMode("changePermissions");
}; };
const hasFiles = selectedFiles.length > 0; const hasFiles = selectedFiles.length > 0;

View File

@ -16,7 +16,6 @@ import { useCompressTips } from "../components/tooltips/useCompressTips";
const Compress = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const Compress = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const compressParams = useCompressParameters(); const compressParams = useCompressParameters();
@ -47,13 +46,13 @@ const Compress = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "compress"); sessionStorage.setItem("previousMode", "compress");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const handleSettingsReset = () => { const handleSettingsReset = () => {
compressOperation.resetResults(); compressOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("compress"); actions.setMode("compress");
}; };
const hasFiles = selectedFiles.length > 0; const hasFiles = selectedFiles.length > 0;

View File

@ -17,7 +17,6 @@ const Convert = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { selectors } = useFileState(); const { selectors } = useFileState();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const activeFiles = selectors.getFiles(); const activeFiles = selectors.getFiles();
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const scrollContainerRef = useRef<HTMLDivElement>(null); const scrollContainerRef = useRef<HTMLDivElement>(null);
@ -89,13 +88,13 @@ const Convert = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "convert"); sessionStorage.setItem("previousMode", "convert");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const handleSettingsReset = () => { const handleSettingsReset = () => {
convertOperation.resetResults(); convertOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("convert"); actions.setMode("convert");
}; };
return createToolFlow({ return createToolFlow({

View File

@ -17,7 +17,6 @@ import { useOCRTips } from "../components/tooltips/useOCRTips";
const OCR = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const OCR = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const ocrParams = useOCRParameters(); const ocrParams = useOCRParameters();
@ -67,13 +66,13 @@ const OCR = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "ocr"); sessionStorage.setItem("previousMode", "ocr");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const handleSettingsReset = () => { const handleSettingsReset = () => {
ocrOperation.resetResults(); ocrOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("ocr"); actions.setMode("ocr");
}; };
const settingsCollapsed = expandedStep !== "settings"; const settingsCollapsed = expandedStep !== "settings";

View File

@ -2,6 +2,7 @@ import { useEffect } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useEndpointEnabled } from "../hooks/useEndpointConfig";
import { useToolFileSelection } from "../contexts/FileContext"; import { useToolFileSelection } from "../contexts/FileContext";
import { useNavigationActions } from "../contexts/NavigationContext";
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { createToolFlow } from "../components/tools/shared/createToolFlow";
@ -14,6 +15,7 @@ import { BaseToolProps } from "../types/tool";
const RemovePassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const RemovePassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions();
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const removePasswordParams = useRemovePasswordParameters(); const removePasswordParams = useRemovePasswordParameters();
@ -23,6 +25,11 @@ const RemovePassword = ({ onPreviewFile, onComplete, onError }: BaseToolProps) =
// Endpoint validation // Endpoint validation
const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(removePasswordParams.getEndpointName()); const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(removePasswordParams.getEndpointName());
// Set URL mode when component loads
useEffect(() => {
actions.setMode("removePassword");
}, [actions]);
useEffect(() => { useEffect(() => {
removePasswordOperation.resetResults(); removePasswordOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);

View File

@ -16,7 +16,6 @@ const Sanitize = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const sanitizeParams = useSanitizeParameters(); const sanitizeParams = useSanitizeParameters();
const sanitizeOperation = useSanitizeOperation(); const sanitizeOperation = useSanitizeOperation();
@ -45,13 +44,13 @@ const Sanitize = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const handleSettingsReset = () => { const handleSettingsReset = () => {
sanitizeOperation.resetResults(); sanitizeOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("sanitize"); actions.setMode("sanitize");
}; };
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "sanitize"); sessionStorage.setItem("previousMode", "sanitize");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const hasFiles = selectedFiles.length > 0; const hasFiles = selectedFiles.length > 0;

View File

@ -14,7 +14,6 @@ import { BaseToolProps } from "../types/tool";
const Split = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const Split = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { actions } = useNavigationActions(); const { actions } = useNavigationActions();
const setCurrentMode = actions.setMode;
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const splitParams = useSplitParameters(); const splitParams = useSplitParameters();
@ -43,13 +42,13 @@ const Split = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const handleThumbnailClick = (file: File) => { const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file); onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "split"); sessionStorage.setItem("previousMode", "split");
setCurrentMode("viewer"); actions.setMode("viewer");
}; };
const handleSettingsReset = () => { const handleSettingsReset = () => {
splitOperation.resetResults(); splitOperation.resetResults();
onPreviewFile?.(null); onPreviewFile?.(null);
setCurrentMode("split"); actions.setMode("split");
}; };
const hasFiles = selectedFiles.length > 0; const hasFiles = selectedFiles.length > 0;