simplify QuickAccessBar

This commit is contained in:
EthanHealy01 2025-08-15 16:26:06 +01:00
parent 808aae186e
commit d664666ff8
4 changed files with 23 additions and 26 deletions

View File

@ -16,7 +16,7 @@ import TopToolIndicator from './quickAccessBar/TopToolIndicator';
import { import {
isNavButtonActive, isNavButtonActive,
getNavButtonStyle, getNavButtonStyle,
getActiveNavButton getActiveNavButton,
} from './quickAccessBar/QuickAccessBar'; } from './quickAccessBar/QuickAccessBar';
const QuickAccessBar = forwardRef<HTMLDivElement>(({ const QuickAccessBar = forwardRef<HTMLDivElement>(({
@ -24,15 +24,15 @@ const QuickAccessBar = forwardRef<HTMLDivElement>(({
const { t } = useTranslation(); const { t } = useTranslation();
const { isRainbowMode } = useRainbowThemeContext(); const { isRainbowMode } = useRainbowThemeContext();
const { openFilesModal, isFilesModalOpen } = useFilesModalContext(); const { openFilesModal, isFilesModalOpen } = useFilesModalContext();
const { handleReaderToggle, handleBackToTools, selectedTool, selectedToolKey, leftPanelView } = useToolWorkflow(); const { handleReaderToggle, handleBackToTools, handleToolSelect, selectedTool, selectedToolKey, leftPanelView, toolRegistry, readerMode } = useToolWorkflow();
const [configModalOpen, setConfigModalOpen] = useState(false); const [configModalOpen, setConfigModalOpen] = useState(false);
const [activeButton, setActiveButton] = useState<string>('tools'); const [activeButton, setActiveButton] = useState<string>('tools');
const scrollableRef = useRef<HTMLDivElement>(null); const scrollableRef = useRef<HTMLDivElement>(null);
const isOverflow = useIsOverflowing(scrollableRef); const isOverflow = useIsOverflowing(scrollableRef);
useEffect(() => { useEffect(() => {
setActiveButton(getActiveNavButton(leftPanelView, selectedTool, selectedToolKey)); setActiveButton(getActiveNavButton(leftPanelView, selectedToolKey, toolRegistry as any, readerMode));
}, [leftPanelView, selectedTool, selectedToolKey]); }, [leftPanelView, selectedToolKey, toolRegistry, readerMode]);
const handleFilesButtonClick = () => { const handleFilesButtonClick = () => {
openFilesModal(); openFilesModal();
@ -49,9 +49,7 @@ const QuickAccessBar = forwardRef<HTMLDivElement>(({
type: 'navigation', type: 'navigation',
onClick: () => { onClick: () => {
setActiveButton('read'); setActiveButton('read');
// Clear any selected tool and return to picker so the top tool indicator hides
handleBackToTools(); handleBackToTools();
// Then enter reader mode
handleReaderToggle(); handleReaderToggle();
} }
}, },
@ -67,8 +65,7 @@ const QuickAccessBar = forwardRef<HTMLDivElement>(({
type: 'navigation', type: 'navigation',
onClick: () => { onClick: () => {
setActiveButton('sign'); setActiveButton('sign');
// Ensure any previously selected tool is cleared so indicator hides handleToolSelect('sign');
handleBackToTools();
} }
}, },
{ {
@ -83,8 +80,7 @@ const QuickAccessBar = forwardRef<HTMLDivElement>(({
type: 'navigation', type: 'navigation',
onClick: () => { onClick: () => {
setActiveButton('automate'); setActiveButton('automate');
// Ensure any previously selected tool is cleared so indicator hides handleToolSelect('automate');
handleBackToTools();
} }
}, },
{ {

View File

@ -59,11 +59,7 @@ export const getTargetNavButton = (
): string | null => { ): string | null => {
if (!selectedToolKey) return null; if (!selectedToolKey) return null;
const toolEntry = registry[selectedToolKey]; return selectedToolKey;
if (!toolEntry) return null;
// Use the tool's view as the nav button id
return toolEntry.view || null;
}; };
/** /**
@ -72,8 +68,13 @@ export const getTargetNavButton = (
export const getActiveNavButton = ( export const getActiveNavButton = (
leftPanelView: 'toolPicker' | 'toolContent', leftPanelView: 'toolPicker' | 'toolContent',
selectedToolKey: string | null, selectedToolKey: string | null,
registry: ReturnType<typeof useFlatToolRegistry> registry: ReturnType<typeof useFlatToolRegistry>,
readerMode: boolean
): string => { ): string => {
// Reader mode takes precedence and should highlight the Read nav item
if (readerMode) {
return 'read';
}
if (leftPanelView !== 'toolContent' || !selectedToolKey) { if (leftPanelView !== 'toolContent' || !selectedToolKey) {
return 'tools'; return 'tools';
} }

View File

@ -142,13 +142,22 @@ export function ToolWorkflowProvider({ children, onViewChange }: ToolWorkflowPro
// Workflow actions (compound actions that coordinate multiple state changes) // Workflow actions (compound actions that coordinate multiple state changes)
const handleToolSelect = useCallback((toolId: string) => { const handleToolSelect = useCallback((toolId: string) => {
// Special-case: if tool is a dedicated reader tool, enter reader mode and do not go to toolContent
if (toolId === 'read' || toolId === 'view-pdf') {
setReaderMode(true);
setLeftPanelView('toolPicker');
clearToolSelection();
setSearchQuery('');
return;
}
selectTool(toolId); selectTool(toolId);
onViewChange?.('fileEditor'); onViewChange?.('fileEditor');
setLeftPanelView('toolContent'); setLeftPanelView('toolContent');
setReaderMode(false); setReaderMode(false);
// Clear search so the tool content becomes visible immediately // Clear search so the tool content becomes visible immediately
setSearchQuery(''); setSearchQuery('');
}, [selectTool, onViewChange, setLeftPanelView, setReaderMode, setSearchQuery]); }, [selectTool, onViewChange, setLeftPanelView, setReaderMode, setSearchQuery, clearToolSelection]);
const handleBackToTools = useCallback(() => { const handleBackToTools = useCallback(() => {
setLeftPanelView('toolPicker'); setLeftPanelView('toolPicker');

View File

@ -670,15 +670,6 @@ export function useFlatToolRegistry(): ToolRegistry {
category: "Recommended Tools", category: "Recommended Tools",
subcategory: null subcategory: null
}, },
"view-pdf": {
icon: <span className="material-symbols-rounded">article</span>,
name: t("home.viewPdf.title", "View/Edit PDF"),
component: null,
view: "view",
description: t("home.viewPdf.desc", "View, annotate, draw, add text or images"),
category: "Recommended Tools",
subcategory: null
}
}; };
} }