30 lines
		
	
	
		
			1022 B
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			1022 B
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
|  | #import <Foundation/Foundation.h>
 | ||
|  | #import <React/RCTUtils.h>
 | ||
|  | 
 | ||
|  | #import "RCTDocumentPicker.h"
 | ||
|  | 
 | ||
|  | @implementation RCTDocumentPicker
 | ||
|  | 
 | ||
|  | RCT_EXPORT_MODULE();
 | ||
|  | 
 | ||
|  | RCT_EXPORT_METHOD(PickAndRead:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
 | ||
|  | {
 | ||
|  |   RCTExecuteOnMainQueue(^{
 | ||
|  |     NSOpenPanel *panel = [NSOpenPanel openPanel];
 | ||
|  |     [panel setCanChooseDirectories:NO];
 | ||
|  |     [panel setAllowsMultipleSelection:NO];
 | ||
|  |     [panel setMessage:@"Select a spreadsheet to read"];
 | ||
|  | 
 | ||
|  |     [panel beginWithCompletionHandler:^(NSInteger result){
 | ||
|  |       if (result == NSModalResponseOK) {
 | ||
|  |         NSURL *selected = [[panel URLs] objectAtIndex:0];
 | ||
|  |         NSFileHandle *hFile = [NSFileHandle fileHandleForReadingFromURL:selected error:nil];
 | ||
|  |         if(hFile) {
 | ||
|  |           NSData *data = [hFile readDataToEndOfFile];
 | ||
|  |           resolve([data base64EncodedStringWithOptions:0]);
 | ||
|  |         } else reject(@"read_failure", @"Could not read selected file!", nil);
 | ||
|  |       } else reject(@"select_failure", @"No file selected!", nil);
 | ||
|  |     }];
 | ||
|  |   });
 | ||
|  | }
 | ||
|  | @end
 |