From a43aaed9b0587c4e649affa2fac3c20c3d680e6e Mon Sep 17 00:00:00 2001 From: Rad Azzouz Date: Thu, 10 Oct 2019 10:06:28 -0400 Subject: [PATCH] Make setFormFieldValue return a promise on iOS --- index.js | 2 +- ios/RCTPSPDFKit/RCTPSPDFKitView.h | 2 +- ios/RCTPSPDFKit/RCTPSPDFKitView.m | 16 ++- ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m | 9 +- samples/Catalog/Catalog.ios.js | 149 ++++++++++++++++++++--- 5 files changed, 153 insertions(+), 25 deletions(-) diff --git a/index.js b/index.js index 1c287f9d..23760132 100644 --- a/index.js +++ b/index.js @@ -415,7 +415,7 @@ class PSPDFKitView extends React.Component { return promise; } else if (Platform.OS === "ios") { - NativeModules.PSPDFKitViewManager.setFormFieldValue( + return NativeModules.PSPDFKitViewManager.setFormFieldValue( value, fullyQualifiedName, findNodeHandle(this.refs.pdfView) diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitView.h b/ios/RCTPSPDFKit/RCTPSPDFKitView.h index 5a5f40ae..546d96a8 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitView.h +++ b/ios/RCTPSPDFKit/RCTPSPDFKitView.h @@ -48,7 +48,7 @@ NS_ASSUME_NONNULL_BEGIN /// Forms - (NSDictionary *)getFormFieldValue:(NSString *)fullyQualifiedName; -- (void)setFormFieldValue:(NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName; +- (BOOL)setFormFieldValue:(NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName; // Toolbar buttons customizations - (void)setLeftBarButtonItems:(nullable NSArray *)items forViewMode:(nullable NSString *) viewMode animated:(BOOL)animated; diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitView.m b/ios/RCTPSPDFKit/RCTPSPDFKitView.m index ceff59d6..acc24afc 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitView.m +++ b/ios/RCTPSPDFKit/RCTPSPDFKitView.m @@ -310,35 +310,43 @@ - (BOOL)addAnnotations:(id)jsonAnnotations error:(NSError *_Nullable *)error { return @{@"error": @"Failed to get the form field value."}; } -- (void)setFormFieldValue:(NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName { +- (BOOL)setFormFieldValue:(NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName { if (fullyQualifiedName.length == 0) { NSLog(@"Invalid fully qualified name."); - return; + return NO; } PSPDFDocument *document = self.pdfController.document; - VALIDATE_DOCUMENT(document) - + VALIDATE_DOCUMENT(document, NO) + + BOOL success = NO; for (PSPDFFormElement *formElement in document.formParser.forms) { if ([formElement.fullyQualifiedFieldName isEqualToString:fullyQualifiedName]) { if ([formElement isKindOfClass:PSPDFButtonFormElement.class]) { if ([value isEqualToString:@"selected"]) { [(PSPDFButtonFormElement *)formElement select]; + success = YES; } else if ([value isEqualToString:@"deselected"]) { [(PSPDFButtonFormElement *)formElement deselect]; + success = YES; } } else if ([formElement isKindOfClass:PSPDFChoiceFormElement.class]) { ((PSPDFChoiceFormElement *)formElement).selectedIndices = [NSIndexSet indexSetWithIndex:value.integerValue]; + success = YES; } else if ([formElement isKindOfClass:PSPDFTextFieldFormElement.class]) { formElement.contents = value; + success = YES; } else if ([formElement isKindOfClass:PSPDFSignatureFormElement.class]) { NSLog(@"Signature form elements are not supported."); + success = NO; } else { NSLog(@"Unsupported form element."); + success = NO; } break; } } + return success; } #pragma mark - Notifications diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m b/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m index 6ec6dd70..40f35642 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m +++ b/ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m @@ -233,10 +233,15 @@ @implementation RCTPSPDFKitViewManager }); } -RCT_EXPORT_METHOD(setFormFieldValue:(nullable NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName reactTag:(nonnull NSNumber *)reactTag) { +RCT_EXPORT_METHOD(setFormFieldValue:(nullable NSString *)value fullyQualifiedName:(NSString *)fullyQualifiedName reactTag:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { dispatch_async(dispatch_get_main_queue(), ^{ RCTPSPDFKitView *component = (RCTPSPDFKitView *)[self.bridge.uiManager viewForReactTag:reactTag]; - [component setFormFieldValue:value fullyQualifiedName:fullyQualifiedName]; + BOOL success = [component setFormFieldValue:value fullyQualifiedName:fullyQualifiedName]; + if (success) { + resolve(@(success)); + } else { + reject(@"error", @"Failed to set form field value.", nil); + } }); } diff --git a/samples/Catalog/Catalog.ios.js b/samples/Catalog/Catalog.ios.js index e59477c7..0879deef 100644 --- a/samples/Catalog/Catalog.ios.js +++ b/samples/Catalog/Catalog.ios.js @@ -477,7 +477,18 @@ class ManualSave extends Component {