forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <winrt/Windows.Storage.Pickers.h>
							 | 
						||
| 
								 | 
							
								#include <winrt/Windows.Security.Cryptography.h>
							 | 
						||
| 
								 | 
							
								#include "NativeModules.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using namespace winrt::Microsoft::ReactNative;
							 | 
						||
| 
								 | 
							
								using namespace winrt::Windows::Storage;
							 | 
						||
| 
								 | 
							
								using namespace winrt::Windows::Storage::Pickers;
							 | 
						||
| 
								 | 
							
								using namespace winrt::Windows::Security::Cryptography;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace SheetJSWin {
							 | 
						||
| 
								 | 
							
								  REACT_MODULE(DocumentPicker);
							 | 
						||
| 
								 | 
							
								  struct DocumentPicker {
							 | 
						||
| 
								 | 
							
								    REACT_INIT(Initialize);
							 | 
						||
| 
								 | 
							
								    void Initialize(const ReactContext& reactContext) noexcept {
							 | 
						||
| 
								 | 
							
								      context = reactContext;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    REACT_METHOD(PickAndRead);
							 | 
						||
| 
								 | 
							
								    void PickAndRead(ReactPromise<winrt::hstring> promise) noexcept {
							 | 
						||
| 
								 | 
							
								      auto prom = promise;
							 | 
						||
| 
								 | 
							
								      context.UIDispatcher().Post([prom = std::move(prom)]()->winrt::fire_and_forget {
							 | 
						||
| 
								 | 
							
								        auto p = prom;
							 | 
						||
| 
								 | 
							
								        FileOpenPicker picker;
							 | 
						||
| 
								 | 
							
								        picker.SuggestedStartLocation(PickerLocationId::DocumentsLibrary);
							 | 
						||
| 
								 | 
							
								        picker.FileTypeFilter().Append(L".xlsx");
							 | 
						||
| 
								 | 
							
								        picker.FileTypeFilter().Append(L".xls");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        StorageFile file = co_await picker.PickSingleFileAsync();
							 | 
						||
| 
								 | 
							
								        if(file == nullptr) { p.Reject("File not Found"); co_return; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        auto buf = co_await FileIO::ReadBufferAsync(file);
							 | 
						||
| 
								 | 
							
								        p.Resolve(CryptographicBuffer::EncodeToBase64String(buf));
							 | 
						||
| 
								 | 
							
								        co_return;
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private:
							 | 
						||
| 
								 | 
							
								      ReactContext context{nullptr};
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |