From 2601f82e3e11cb8604c0eee79750238965bbb453 Mon Sep 17 00:00:00 2001 From: Rad Azzouz Date: Tue, 28 May 2019 12:09:07 -0400 Subject: [PATCH 01/16] Adds the ability to customize the tool bar on iOS --- index.js | 48 +++++++++++++------- ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m | 28 ++++++++++++ samples/Catalog/Catalog.ios.js | 56 ++++++++++++++++++++---- 3 files changed, 108 insertions(+), 24 deletions(-) diff --git a/index.js b/index.js index 34471843..06050909 100644 --- a/index.js +++ b/index.js @@ -24,8 +24,8 @@ class PSPDFKitView extends React.Component { if (Platform.OS === "ios" || Platform.OS === "android") { const onCloseButtonPressedHandler = this.props.onCloseButtonPressed ? event => { - this.props.onCloseButtonPressed(event.nativeEvent); - } + this.props.onCloseButtonPressed(event.nativeEvent); + } : null; return ( { PSPDFKit.present("PDFs/Annual Report.pdf", { backgroundColor: processColor("white"), @@ -203,13 +202,24 @@ const examples = [ pageTransition: "scrollContinuous", pageScrollDirection: "vertical", sharingConfigurations: [ - { - annotationOptions: ["flatten"], - pageSelectionOptions: ["all", "annotated"] - } + { + annotationOptions: ["flatten"], + pageSelectionOptions: ["all", "annotated"] + } ] }); } + }, + { + key: "item14", + name: "Customize the Toolbar", + description: "Shows how to customize the buttons in the toolbar.", + action: component => { + const nextRoute = { + component: ToolbarCustomization + }; + component.props.navigator.push(nextRoute); + } } ]; @@ -486,7 +496,12 @@ class AnnotationCreationMode extends Component { showThumbnailBar: "scrollable", useParentNavigationBar: true }} - menuItemGrouping={['freetext', {key: 'markup', items: ['highlight', "underline"]}, 'ink', 'image']} + menuItemGrouping={[ + "freetext", + { key: "markup", items: ["highlight", "underline"] }, + "ink", + "image" + ]} pageIndex={this.state.currentPageIndex} style={{ flex: 1, color: pspdfkitColor }} onStateChanged={event => { @@ -882,6 +897,31 @@ class ProgrammaticFormFilling extends Component { } } +class ToolbarCustomization extends Component { + render() { + return ( + + + + ); + } +} + export default class Catalog extends Component { render() { return ( From f3dc9a571408f603f92895869b55cbcf20d3ddd0 Mon Sep 17 00:00:00 2001 From: Rad Azzouz Date: Wed, 29 May 2019 14:03:37 -0400 Subject: [PATCH 02/16] Add functions to get and set the bar buttons for specified view modes --- index.js | 70 +++++++++++++++++++ ios/RCTPSPDFKit.xcodeproj/project.pbxproj | 6 ++ .../Converters/RCTConvert+PSPDFViewMode.h | 18 +++++ .../Converters/RCTConvert+PSPDFViewMode.m | 27 +++++++ ios/RCTPSPDFKit/RCTPSPDFKitView.h | 6 ++ ios/RCTPSPDFKit/RCTPSPDFKitView.m | 67 ++++++++++++++++++ ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m | 65 +++++++++++------ samples/Catalog/Catalog.ios.js | 44 ++++++++++-- 8 files changed, 278 insertions(+), 25 deletions(-) create mode 100644 ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.h create mode 100644 ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.m diff --git a/index.js b/index.js index 06050909..0874b6d0 100644 --- a/index.js +++ b/index.js @@ -315,6 +315,76 @@ class PSPDFKitView extends React.Component { ); } }; + /** + * Set the left bar button items for the spcified view mode + * Note: The same button item cannot be added to both the left and right bar button items simultaneously. + * + * @param items The list of bar button items. See the full list of button items here: https://pspdfkit.com/api/ios/Classes/PSPDFViewController.html#/Toolbar%20button%20items + * @param viewMode The optional view mode. Can be 'document', 'thumbnails', 'documentEditor' or null. + * @param animated The animated flag. + * + * @platform ios + */ + setLeftBarButtonItems = function(items, viewMode, animated) { + if (Platform.OS === "ios") { + NativeModules.PSPDFKitViewManager.setLeftBarButtonItems( + items, + viewMode, + animated, + findNodeHandle(this.refs.pdfView) + ); + } + }; + /** + * Get the left bar button items for the spcified view mode + * + * @param viewMode The optional view mode. Can be 'document', 'thumbnails', 'documentEditor' or null. + * + * @platform ios + */ + getLeftBarButtonItemsForViewMode = function(viewMode) { + if (Platform.OS === "ios") { + return NativeModules.PSPDFKitViewManager.getLeftBarButtonItemsForViewMode( + viewMode, + findNodeHandle(this.refs.pdfView) + ); + } + }; + /** + * Set the right bar button items for the spcified view mode + * Note: The same button item cannot be added to both the left and right bar button items simultaneously. + * + * @param items The list of bar button items. See the full list of button items here: https://pspdfkit.com/api/ios/Classes/PSPDFViewController.html#/Toolbar%20button%20items + * @param viewMode The optional view mode. Can be 'document', 'thumbnails', 'documentEditor' or null. + * @param animated The animated flag. + * + * @platform ios + */ + setRightBarButtonItems = function(items, viewMode, animated) { + if (Platform.OS === "ios") { + NativeModules.PSPDFKitViewManager.setRightBarButtonItems( + items, + viewMode, + animated, + findNodeHandle(this.refs.pdfView) + ); + } + }; + /** + * Get the right bar button items for the spcified view mode + * + * @param viewMode The optional view mode. Can be 'document', 'thumbnails', 'documentEditor' or null. + * + * @platform ios + */ + getRightBarButtonItemsForViewMode = function(viewMode) { + if (Platform.OS === "ios") { + return NativeModules.PSPDFKitViewManager.getRightBarButtonItemsForViewMode( + viewMode, + findNodeHandle(this.refs.pdfView) + ); + } + }; } PSPDFKitView.propTypes = { diff --git a/ios/RCTPSPDFKit.xcodeproj/project.pbxproj b/ios/RCTPSPDFKit.xcodeproj/project.pbxproj index 3cdb3bc2..2d5f862f 100644 --- a/ios/RCTPSPDFKit.xcodeproj/project.pbxproj +++ b/ios/RCTPSPDFKit.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 6572780C1D86AE7300A5E1A8 /* RCTConvert+PSPDFConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 657278071D86AE7300A5E1A8 /* RCTConvert+PSPDFConfiguration.m */; }; 657278111D86AEC600A5E1A8 /* RCTConvert+PSPDFDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 657278101D86AEC600A5E1A8 /* RCTConvert+PSPDFDocument.m */; }; 84545BA4210A5CCF00FBB0A7 /* RCTConvert+PSPDFAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84545BA2210A5CCF00FBB0A7 /* RCTConvert+PSPDFAnnotation.m */; }; + 84BC2EAD229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BC2EAC229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.m */; }; B783BA3421C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = B783BA3321C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.m */; }; F84F8B192032D54F00153D9E /* RCTPSPDFKitView.m in Sources */ = {isa = PBXBuildFile; fileRef = F84F8B182032D54F00153D9E /* RCTPSPDFKitView.m */; }; F8C1A2E5202DCC9700E98192 /* RCTPSPDFKitViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C1A2E4202DCC9700E98192 /* RCTPSPDFKitViewManager.m */; }; @@ -38,6 +39,8 @@ 657278101D86AEC600A5E1A8 /* RCTConvert+PSPDFDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+PSPDFDocument.m"; sourceTree = ""; }; 84545BA2210A5CCF00FBB0A7 /* RCTConvert+PSPDFAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+PSPDFAnnotation.m"; sourceTree = ""; }; 84545BA3210A5CCF00FBB0A7 /* RCTConvert+PSPDFAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+PSPDFAnnotation.h"; sourceTree = ""; }; + 84BC2EAB229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+PSPDFViewMode.h"; sourceTree = ""; }; + 84BC2EAC229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+PSPDFViewMode.m"; sourceTree = ""; }; B783BA3221C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+PSPDFAnnotationToolbarConfiguration.h"; sourceTree = ""; }; B783BA3321C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+PSPDFAnnotationToolbarConfiguration.m"; sourceTree = ""; }; F84F8B182032D54F00153D9E /* RCTPSPDFKitView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTPSPDFKitView.m; sourceTree = ""; }; @@ -82,6 +85,8 @@ 657278101D86AEC600A5E1A8 /* RCTConvert+PSPDFDocument.m */, B783BA3221C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.h */, B783BA3321C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.m */, + 84BC2EAB229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.h */, + 84BC2EAC229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.m */, ); path = Converters; sourceTree = ""; @@ -170,6 +175,7 @@ B783BA3421C3F55300FD981A /* RCTConvert+PSPDFAnnotationToolbarConfiguration.m in Sources */, F84F8B192032D54F00153D9E /* RCTPSPDFKitView.m in Sources */, 6572780C1D86AE7300A5E1A8 /* RCTConvert+PSPDFConfiguration.m in Sources */, + 84BC2EAD229EE9FF00A386C6 /* RCTConvert+PSPDFViewMode.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.h b/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.h new file mode 100644 index 00000000..c06ebe17 --- /dev/null +++ b/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.h @@ -0,0 +1,18 @@ +// +// Copyright © 2018-2019 PSPDFKit GmbH. All rights reserved. +// +// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW +// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT. +// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. +// This notice may not be removed from this file. +// + +#import +@import PSPDFKit; +@import PSPDFKitUI; + +@interface RCTConvert (PSPDFViewMode) + ++ (PSPDFViewMode)PSPDFViewMode:(NSString *)viewMode; + +@end diff --git a/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.m b/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.m new file mode 100644 index 00000000..adfb0868 --- /dev/null +++ b/ios/RCTPSPDFKit/Converters/RCTConvert+PSPDFViewMode.m @@ -0,0 +1,27 @@ +// +// Copyright © 2018-2019 PSPDFKit GmbH. All rights reserved. +// +// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW +// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT. +// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. +// This notice may not be removed from this file. +// + + +#import "RCTConvert+PSPDFViewMode.h" + +@implementation RCTConvert (PSPDFViewMode) + ++ (PSPDFViewMode)PSPDFViewMode:(NSString *)viewMode { + if ([viewMode isEqualToString:@"document"]) { + return PSPDFViewModeDocument; + } else if ([viewMode isEqualToString:@"thumbnails"]) { + return PSPDFViewModeThumbnails; + } else if ([viewMode isEqualToString:@"documentEditor"]) { + return PSPDFViewModeDocumentEditor;; + } else { + return PSPDFViewModeDocument; + } +} + +@end diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitView.h b/ios/RCTPSPDFKit/RCTPSPDFKitView.h index 5c2ad779..d9a329c3 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitView.h +++ b/ios/RCTPSPDFKit/RCTPSPDFKitView.h @@ -48,6 +48,12 @@ NS_ASSUME_NONNULL_BEGIN - (NSDictionary *)getFormFieldValue:(NSString *)fullyQualifiedName; - (void)setFormFieldValue:(NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName; +// Toolbar button customizations +- (void)setLeftBarButtonItems:(nullable NSArray *)items forViewMode:(nullable NSString *) viewMode animated:(BOOL)animated; +- (void)setRightBarButtonItems:(nullable NSArray *)items forViewMode:(nullable NSString *) viewMode animated:(BOOL)animated; +- (NSArray *)getLeftBarButtonItemsForViewMode:(NSString *)viewMode; +- (NSArray *)getRightBarButtonItemsForViewMode:(NSString *)viewMode; + @end NS_ASSUME_NONNULL_END diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitView.m b/ios/RCTPSPDFKit/RCTPSPDFKitView.m index 3d8f4460..4e170a33 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitView.m +++ b/ios/RCTPSPDFKit/RCTPSPDFKitView.m @@ -10,6 +10,7 @@ #import "RCTPSPDFKitView.h" #import #import "RCTConvert+PSPDFAnnotation.h" +#import "RCTConvert+PSPDFViewMode.h" #define VALIDATE_DOCUMENT(document, ...) { if (!document.isValid) { NSLog(@"Document is invalid."); return __VA_ARGS__; }} @@ -349,6 +350,62 @@ - (void)annotationChangedNotification:(NSNotification *)notification { } } +#pragma mark - Customize the Toolbar + +- (void)setLeftBarButtonItems:(nullable NSArray *)items forViewMode:(nullable NSString *) viewMode animated:(BOOL)animated { + NSMutableArray *leftItems = [NSMutableArray array]; + for (NSString *barButtonItemString in items) { + id barButtonItem = [self.pdfController valueForKey:barButtonItemString]; + if (barButtonItem && [barButtonItem isKindOfClass:UIBarButtonItem.class] && ![self.pdfController.navigationItem.rightBarButtonItems containsObject:barButtonItem]) { + [leftItems addObject:barButtonItem]; + } + } + + if (viewMode.length) { + [self.pdfController.navigationItem setLeftBarButtonItems:[leftItems copy] forViewMode:[RCTConvert PSPDFViewMode:viewMode] animated:animated]; + } else { + [self.pdfController.navigationItem setLeftBarButtonItems:[leftItems copy] animated:animated]; + } +} + +- (void)setRightBarButtonItems:(nullable NSArray *)items forViewMode:(nullable NSString *) viewMode animated:(BOOL)animated { + NSMutableArray *rightItems = [NSMutableArray array]; + for (NSString *barButtonItemString in items) { + id barButtonItem = [self.pdfController valueForKey:barButtonItemString]; + if (barButtonItem && [barButtonItem isKindOfClass:UIBarButtonItem.class] && ![self.pdfController.navigationItem.leftBarButtonItems containsObject:barButtonItem]) { + [rightItems addObject:barButtonItem]; + } + } + + if (viewMode.length) { + [self.pdfController.navigationItem setRightBarButtonItems:[rightItems copy] forViewMode:[RCTConvert PSPDFViewMode:viewMode] animated:animated]; + } else { + [self.pdfController.navigationItem setRightBarButtonItems:[rightItems copy] animated:animated]; + } +} + +- (NSArray *)getLeftBarButtonItemsForViewMode:(NSString *)viewMode { + NSArray *items; + if (viewMode.length) { + items = [self.pdfController.navigationItem leftBarButtonItemsForViewMode:[RCTConvert PSPDFViewMode:viewMode]]; + } else { + items = [self.pdfController.navigationItem leftBarButtonItems]; + } + + return [self buttonItemsStringFromUIBarButtonItems:items]; +} + +- (NSArray *)getRightBarButtonItemsForViewMode:(NSString *)viewMode { + NSArray *items; + if (viewMode.length) { + items = [self.pdfController.navigationItem rightBarButtonItemsForViewMode:[RCTConvert PSPDFViewMode:viewMode]]; + } else { + items = [self.pdfController.navigationItem rightBarButtonItems]; + } + + return [self buttonItemsStringFromUIBarButtonItems:items]; +} + #pragma mark - Helpers - (void)onStateChangedForPDFViewController:(PSPDFViewController *)pdfController pageView:(PSPDFPageView *)pageView pageAtIndex:(NSInteger)pageIndex { @@ -377,4 +434,14 @@ - (void)onStateChangedForPDFViewController:(PSPDFViewController *)pdfController } } +- (NSArray *)buttonItemsStringFromUIBarButtonItems:(NSArray *)barButtonItems { + NSMutableArray *barButtonItemsString = [NSMutableArray new]; + [barButtonItems enumerateObjectsUsingBlock:^(UIBarButtonItem * _Nonnull barButtonItem, NSUInteger idx, BOOL * _Nonnull stop) { + NSString *actionString = NSStringFromSelector(barButtonItem.action); + NSString *buttonNameString = [actionString stringByReplacingOccurrencesOfString:@"ButtonPressed:" withString:@"BarButtonItem"]; + [barButtonItemsString addObject:buttonNameString]; + }]; + return [barButtonItemsString copy]; +} + @end diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m b/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m index c9158e83..4af0be55 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m +++ b/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m @@ -12,6 +12,7 @@ #import "RCTConvert+PSPDFConfiguration.h" #import "RCTConvert+PSPDFDocument.h" #import "RCTConvert+PSPDFAnnotationToolbarConfiguration.h" +#import "RCTConvert+PSPDFViewMode.h" #import "RCTPSPDFKitView.h" #import @@ -59,30 +60,16 @@ @implementation RCTPSPDFKitViewManager } RCT_CUSTOM_VIEW_PROPERTY(leftBarButtonItems, pdfController.navigationItem.leftBarButtonItems, RCTPSPDFKitView) { - NSArray *leftBarButtonItems = [RCTConvert NSArray:json]; - NSMutableArray *items = [NSMutableArray array]; - if (json && leftBarButtonItems) { - for (NSString *barButtonItemString in leftBarButtonItems) { - UIBarButtonItem *barButtonItem = [view.pdfController valueForKey:barButtonItemString]; - if (barButtonItem && ![view.pdfController.navigationItem.rightBarButtonItems containsObject:barButtonItem]) { - [items addObject:barButtonItem]; - } - } - view.pdfController.navigationItem.leftBarButtonItems = [items copy]; + if (json) { + NSArray *leftBarButtonItems = [RCTConvert NSArray:json]; + [view setLeftBarButtonItems:leftBarButtonItems forViewMode:nil animated:NO]; } } RCT_CUSTOM_VIEW_PROPERTY(rightBarButtonItems, pdfController.navigationItem.leftBarButtonItems, RCTPSPDFKitView) { - NSArray *rightBarButtonItems = [RCTConvert NSArray:json]; - NSMutableArray *items = [NSMutableArray array]; - if (json && rightBarButtonItems) { - for (NSString *barButtonItemString in rightBarButtonItems) { - UIBarButtonItem *barButtonItem = [view.pdfController valueForKey:barButtonItemString]; - if (barButtonItem && ![view.pdfController.navigationItem.leftBarButtonItems containsObject:barButtonItem]) { - [items addObject:barButtonItem]; - } - } - view.pdfController.navigationItem.rightBarButtonItems = [items copy]; + if (json) { + NSArray *rightBarButtonItems = [RCTConvert NSArray:json]; + [view setRightBarButtonItems:rightBarButtonItems forViewMode:nil animated:NO]; } } @@ -227,6 +214,44 @@ @implementation RCTPSPDFKitViewManager }); } +RCT_EXPORT_METHOD(setLeftBarButtonItems:(nullable NSArray *)items viewMode:(nullable NSString *)viewMode animated:(BOOL)animated reactTag:(nonnull NSNumber *)reactTag) { + dispatch_async(dispatch_get_main_queue(), ^{ + RCTPSPDFKitView *component = (RCTPSPDFKitView *)[self.bridge.uiManager viewForReactTag:reactTag]; + [component setLeftBarButtonItems:items forViewMode:viewMode animated:animated]; + }); +} + +RCT_EXPORT_METHOD(setRightBarButtonItems:(nullable NSArray *)items viewMode:(nullable NSString *)viewMode animated:(BOOL)animated reactTag:(nonnull NSNumber *)reactTag) { + dispatch_async(dispatch_get_main_queue(), ^{ + RCTPSPDFKitView *component = (RCTPSPDFKitView *)[self.bridge.uiManager viewForReactTag:reactTag]; + [component setRightBarButtonItems:items forViewMode:viewMode animated:animated]; + }); +} + +RCT_EXPORT_METHOD(getLeftBarButtonItemsForViewMode:(nullable NSString *)viewMode reactTag:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + dispatch_async(dispatch_get_main_queue(), ^{ + RCTPSPDFKitView *component = (RCTPSPDFKitView *)[self.bridge.uiManager viewForReactTag:reactTag]; + NSArray *leftBarButtonItems = [component getLeftBarButtonItemsForViewMode:viewMode]; + if (leftBarButtonItems) { + resolve(leftBarButtonItems); + } else { + reject(@"error", @"Failed to get the left bar button items.", nil); + } + }); +} + +RCT_EXPORT_METHOD(getRightBarButtonItemsForViewMode:(nullable NSString *)viewMode reactTag:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + dispatch_async(dispatch_get_main_queue(), ^{ + RCTPSPDFKitView *component = (RCTPSPDFKitView *)[self.bridge.uiManager viewForReactTag:reactTag]; + NSArray *rightBarButtonItems = [component getRightBarButtonItemsForViewMode:viewMode]; + if (rightBarButtonItems) { + resolve(rightBarButtonItems); + } else { + reject(@"error", @"Failed to get the right bar button items.", nil); + } + }); +} + - (UIView *)view { return [[RCTPSPDFKitView alloc] init]; } diff --git a/samples/Catalog/Catalog.ios.js b/samples/Catalog/Catalog.ios.js index 131afb7d..61ec492a 100644 --- a/samples/Catalog/Catalog.ios.js +++ b/samples/Catalog/Catalog.ios.js @@ -910,13 +910,47 @@ class ToolbarCustomization extends Component { useParentNavigationBar: true }} leftBarButtonItems={["closeButtonItem"]} - rightBarButtonItems={[ - "thumbnailsButtonItem", - "searchButtonItem", - "annotationButtonItem" - ]} style={{ flex: 1, color: pspdfkitColor }} /> + + +