mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-22 12:19:24 +00:00
simplify QuickAccessBar
This commit is contained in:
parent
808aae186e
commit
d664666ff8
@ -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();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -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';
|
||||||
}
|
}
|
||||||
|
@ -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');
|
||||||
|
@ -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
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user