mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-16 19:33:11 +02:00
fix(annotations): fix error 300 on sign frontend (#5536)
# Description of Changes the bug https://github.com/user-attachments/assets/7f524c95-e57a-4188-a7a9-8d3020a3bb47 <!-- Please provide a summary of the changes, including: - What was changed - Why the change was made - Any challenges encountered Closes #(issue_number) --> --- ## Checklist ### General - [X] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [X] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [X] I have performed a self-review of my own code - [X] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [X] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details. Signed-off-by: Balázs Szücs <[email protected]>
This commit is contained in:
@@ -83,7 +83,10 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const sidebarContext = sidebarTooltip ? useSidebarContext() : null;
|
// Always call the hook unconditionally to satisfy React's rules of hooks.
|
||||||
|
// The context is only used when sidebarTooltip is true.
|
||||||
|
const sidebarContextValue = useSidebarContext();
|
||||||
|
const sidebarContext = sidebarTooltip ? sidebarContextValue : null;
|
||||||
|
|
||||||
const isControlled = controlledOpen !== undefined;
|
const isControlled = controlledOpen !== undefined;
|
||||||
const open = (isControlled ? !!controlledOpen : internalOpen) && !disabled;
|
const open = (isControlled ? !!controlledOpen : internalOpen) && !disabled;
|
||||||
|
|||||||
@@ -55,11 +55,6 @@ export default function ViewerAnnotationControls({ currentView, disabled = false
|
|||||||
const isAnnotateActive = selectedTool === 'annotate';
|
const isAnnotateActive = selectedTool === 'annotate';
|
||||||
const annotationsHidden = viewerContext ? !viewerContext.isAnnotationsVisible : false;
|
const annotationsHidden = viewerContext ? !viewerContext.isAnnotationsVisible : false;
|
||||||
|
|
||||||
// Don't show any annotation controls in sign mode
|
|
||||||
if (isSignMode) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Persist annotations to file if there are unsaved changes
|
// Persist annotations to file if there are unsaved changes
|
||||||
const saveAnnotationsIfNeeded = async () => {
|
const saveAnnotationsIfNeeded = async () => {
|
||||||
if (!viewerContext?.exportActions?.saveAsCopy || currentView !== 'viewer' || !historyApiRef?.current?.canUndo()) return;
|
if (!viewerContext?.exportActions?.saveAsCopy || currentView !== 'viewer' || !historyApiRef?.current?.canUndo()) return;
|
||||||
@@ -135,6 +130,11 @@ export default function ViewerAnnotationControls({ currentView, disabled = false
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Don't show any annotation controls in sign mode
|
||||||
|
// NOTE: This early return is placed AFTER all hooks to satisfy React's rules of hooks
|
||||||
|
if (isSignMode) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -54,8 +54,10 @@ function FileContextInner({
|
|||||||
}: FileContextProviderProps) {
|
}: FileContextProviderProps) {
|
||||||
const [state, dispatch] = useReducer(fileContextReducer, initialFileContextState);
|
const [state, dispatch] = useReducer(fileContextReducer, initialFileContextState);
|
||||||
|
|
||||||
// IndexedDB context for persistence
|
// Always call the hook unconditionally to satisfy React's rules of hooks.
|
||||||
const indexedDB = enablePersistence ? useIndexedDB() : null;
|
// IndexedDB context is only used when enablePersistence is true.
|
||||||
|
const indexedDBValue = useIndexedDB();
|
||||||
|
const indexedDB = enablePersistence ? indexedDBValue : null;
|
||||||
|
|
||||||
// File ref map - stores File objects outside React state
|
// File ref map - stores File objects outside React state
|
||||||
const filesRef = useRef<Map<FileId, File>>(new Map());
|
const filesRef = useRef<Map<FileId, File>>(new Map());
|
||||||
|
|||||||
Reference in New Issue
Block a user