mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-16 19:33:11 +02:00
Feature/v2/redact (#5249)
# Description of Changes - Add manual redaction and added it to the right rail in the viewer --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] 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) - [ ] I have performed a self-review of my own code - [ ] 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) ### 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) - [ ] 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.
This commit is contained in:
@@ -117,11 +117,13 @@ interface ViewerContextType {
|
||||
registerImmediateZoomUpdate: (callback: (percent: number) => void) => () => void;
|
||||
registerImmediateScrollUpdate: (callback: (currentPage: number, totalPages: number) => void) => () => void;
|
||||
registerImmediateSpreadUpdate: (callback: (mode: SpreadMode, isDualPage: boolean) => void) => () => void;
|
||||
registerImmediatePanUpdate: (callback: (isPanning: boolean) => void) => () => void;
|
||||
|
||||
// Internal - for bridges to trigger immediate updates
|
||||
triggerImmediateScrollUpdate: (currentPage: number, totalPages: number) => void;
|
||||
triggerImmediateZoomUpdate: (zoomPercent: number) => void;
|
||||
triggerImmediateSpreadUpdate: (mode: SpreadMode, isDualPage?: boolean) => void;
|
||||
triggerImmediatePanUpdate: (isPanning: boolean) => void;
|
||||
|
||||
// Action handlers - call EmbedPDF APIs directly
|
||||
scrollActions: ScrollActions;
|
||||
@@ -140,6 +142,10 @@ interface ViewerContextType {
|
||||
type: K,
|
||||
ref: BridgeRef<BridgeStateMap[K], BridgeApiMap[K]>
|
||||
) => void;
|
||||
|
||||
// Save changes function - registered by EmbedPdfViewer
|
||||
applyChanges: (() => Promise<void>) | null;
|
||||
setApplyChanges: (fn: (() => Promise<void>) | null) => void;
|
||||
}
|
||||
|
||||
export const ViewerContext = createContext<ViewerContextType | null>(null);
|
||||
@@ -163,6 +169,19 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
||||
// Bridge registry - bridges register their state and APIs here
|
||||
const bridgeRefs = useRef<ViewerBridgeRegistry>(createBridgeRegistry());
|
||||
|
||||
// Apply changes function - registered by EmbedPdfViewer
|
||||
const applyChangesRef = useRef<(() => Promise<void>) | null>(null);
|
||||
|
||||
const setApplyChanges = useCallback((fn: (() => Promise<void>) | null) => {
|
||||
applyChangesRef.current = fn;
|
||||
}, []);
|
||||
|
||||
const applyChanges = useCallback(async () => {
|
||||
if (applyChangesRef.current) {
|
||||
await applyChangesRef.current();
|
||||
}
|
||||
}, []);
|
||||
|
||||
const {
|
||||
register: registerImmediateZoomUpdate,
|
||||
trigger: triggerImmediateZoomInternal,
|
||||
@@ -175,6 +194,10 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
||||
register: registerImmediateSpreadUpdate,
|
||||
trigger: triggerImmediateSpreadInternal,
|
||||
} = useImmediateNotifier<[SpreadMode, boolean]>();
|
||||
const {
|
||||
register: registerImmediatePanUpdate,
|
||||
trigger: triggerImmediatePanInternal,
|
||||
} = useImmediateNotifier<[boolean]>();
|
||||
|
||||
const triggerImmediateZoomUpdate = useCallback(
|
||||
(percent: number) => {
|
||||
@@ -197,6 +220,13 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
||||
[triggerImmediateSpreadInternal]
|
||||
);
|
||||
|
||||
const triggerImmediatePanUpdate = useCallback(
|
||||
(isPanning: boolean) => {
|
||||
triggerImmediatePanInternal(isPanning);
|
||||
},
|
||||
[triggerImmediatePanInternal]
|
||||
);
|
||||
|
||||
const registerBridge = useCallback(
|
||||
<K extends BridgeKey>(
|
||||
type: K,
|
||||
@@ -335,9 +365,11 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
||||
registerImmediateZoomUpdate,
|
||||
registerImmediateScrollUpdate,
|
||||
registerImmediateSpreadUpdate,
|
||||
registerImmediatePanUpdate,
|
||||
triggerImmediateScrollUpdate,
|
||||
triggerImmediateZoomUpdate,
|
||||
triggerImmediateSpreadUpdate,
|
||||
triggerImmediatePanUpdate,
|
||||
|
||||
// Actions
|
||||
scrollActions,
|
||||
@@ -353,6 +385,10 @@ export const ViewerProvider: React.FC<ViewerProviderProps> = ({ children }) => {
|
||||
|
||||
// Bridge registration
|
||||
registerBridge,
|
||||
|
||||
// Apply changes
|
||||
applyChanges,
|
||||
setApplyChanges,
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user