import { useEffect, useMemo } from "react"; import { Button, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import DownloadIcon from "@mui/icons-material/Download"; import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useFileContext } from "../contexts/FileContext"; import { useToolFileSelection } from "../contexts/FileSelectionContext"; import ToolStep, { ToolStepContainer } from "../components/tools/shared/ToolStep"; import OperationButton from "../components/tools/shared/OperationButton"; import ErrorNotification from "../components/tools/shared/ErrorNotification"; import FileStatusIndicator from "../components/tools/shared/FileStatusIndicator"; import ResultsPreview from "../components/tools/shared/ResultsPreview"; 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 { BaseToolProps } from "../types/tool"; const ChangePermissions = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const { t } = useTranslation(); const { setCurrentMode } = useFileContext(); const { selectedFiles } = useToolFileSelection(); const changePermissionsParams = useChangePermissionsParameters(); const changePermissionsOperation = useChangePermissionsOperation(); const changePermissionsTips = useChangePermissionsTips(); // Endpoint validation const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(changePermissionsParams.getEndpointName()); useEffect(() => { changePermissionsOperation.resetResults(); onPreviewFile?.(null); }, [changePermissionsParams.parameters, selectedFiles]); const handleChangePermissions = async () => { try { await changePermissionsOperation.executeOperation( changePermissionsParams.parameters, selectedFiles ); if (changePermissionsOperation.files && onComplete) { onComplete(changePermissionsOperation.files); } } catch (error) { if (onError) { onError(error instanceof Error ? error.message : t('changePermissions.error.failed', 'Change permissions operation failed')); } } }; const handleThumbnailClick = (file: File) => { onPreviewFile?.(file); sessionStorage.setItem('previousMode', 'changePermissions'); setCurrentMode('viewer'); }; const handleSettingsReset = () => { changePermissionsOperation.resetResults(); onPreviewFile?.(null); setCurrentMode('changePermissions'); }; const hasFiles = selectedFiles.length > 0; const hasResults = changePermissionsOperation.files.length > 0 || changePermissionsOperation.downloadUrl !== null; const filesCollapsed = hasFiles; const settingsCollapsed = hasResults; const previewResults = useMemo(() => changePermissionsOperation.files?.map((file, index) => ({ file, thumbnail: changePermissionsOperation.thumbnails[index] })) || [], [changePermissionsOperation.files, changePermissionsOperation.thumbnails] ); return ( {/* Files Step */} {/* Settings Step */} {/* Results Step */} {changePermissionsOperation.status && ( {changePermissionsOperation.status} )} {changePermissionsOperation.downloadUrl && ( )} ); } export default ChangePermissions;