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