import { useEffect, useState } from 'react'; import { Badge, Button, Card, Group, Modal, Stack, Text } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import { useToolWorkflow } from '@app/contexts/ToolWorkflowContext'; import { usePreferences } from '@app/contexts/PreferencesContext'; import '@app/components/tools/ToolPanelModePrompt.css'; import { type ToolPanelMode } from '@app/constants/toolPanel'; interface ToolPanelModePromptProps { onComplete?: () => void; /** If true, the modal will be forced open (used by orchestrator) */ forceOpen?: boolean; } /** * ToolPanelModePrompt - Lets users choose between sidebar and fullscreen tool modes * * The orchestrator controls this via forceOpen prop. When shown standalone (legacy), * it uses internal state based on preferences. */ const ToolPanelModePrompt = ({ onComplete, forceOpen }: ToolPanelModePromptProps = {}) => { const { t } = useTranslation(); const { toolPanelMode, setToolPanelMode } = useToolWorkflow(); const { preferences, updatePreference } = usePreferences(); const [internalOpened, setInternalOpened] = useState(false); // Only show after the intro onboarding has been completed (legacy standalone mode) const shouldShowPrompt = !preferences.toolPanelModePromptSeen && preferences.hasSeenIntroOnboarding; useEffect(() => { if (shouldShowPrompt && forceOpen === undefined) { setInternalOpened(true); } }, [shouldShowPrompt, forceOpen]); // If forceOpen is provided, use it; otherwise use internal state const opened = forceOpen ?? internalOpened; const setOpened = forceOpen !== undefined ? () => {} : setInternalOpened; const handleSelect = (mode: ToolPanelMode) => { setToolPanelMode(mode); updatePreference('defaultToolPanelMode', mode); updatePreference('toolPanelModePromptSeen', true); updatePreference('hasSelectedToolPanelMode', true); setOpened(false); onComplete?.(); }; const handleDismiss = () => { const defaultMode: ToolPanelMode = 'sidebar'; if (toolPanelMode !== defaultMode) { setToolPanelMode(defaultMode); updatePreference('defaultToolPanelMode', defaultMode); } updatePreference('hasSelectedToolPanelMode', true); updatePreference('toolPanelModePromptSeen', true); setOpened(false); onComplete?.(); }; return ( {t('toolPanel.modePrompt.description', 'Preview both layouts and decide how you want to explore Stirling PDF tools.')}
{t('toolPanel.modePrompt.sidebarTitle', 'Sidebar mode')} {t('toolPanel.modePrompt.sidebarDescription', 'Keep tools alongside your workspace for quick switching.')} {t('toolPanel.modePrompt.recommended', 'Recommended')}
{t('toolPanel.modePrompt.fullscreenTitle', 'Fullscreen mode')} {t('toolPanel.modePrompt.fullscreenDescription', 'Browse every tool in a catalogue that covers the workspace until you pick one.')}
); }; export default ToolPanelModePrompt;