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};
 | 
						|
  };
 | 
						|
} |