From 86e0b1941d6cb0ce6cb56e2de2ebd17cf2c08cb9 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Thu, 11 May 2023 17:28:29 -0400 Subject: [PATCH] rnw11 --- .../03-demos/06-desktop/06-reactnative.md | 216 +++++++----------- .../03-demos/10-extensions/03-excelapi.md | 4 +- docz/docs/09-miscellany/05-contributing.md | 2 +- docz/docusaurus.config.js | 10 +- docz/static/reactnative/DocumentPicker.cs | 31 +++ docz/static/reactnative/DocumentPicker.h | 42 ++++ docz/static/reactnative/desktop/App.tsx | 41 ++++ docz/static/reactnative/rnw.png | Bin 26900 -> 11658 bytes 8 files changed, 211 insertions(+), 135 deletions(-) create mode 100644 docz/static/reactnative/DocumentPicker.cs create mode 100644 docz/static/reactnative/DocumentPicker.h create mode 100644 docz/static/reactnative/desktop/App.tsx diff --git a/docz/docs/03-demos/06-desktop/06-reactnative.md b/docz/docs/03-demos/06-desktop/06-reactnative.md index b1159c5..d7ca5ba 100644 --- a/docz/docs/03-demos/06-desktop/06-reactnative.md +++ b/docz/docs/03-demos/06-desktop/06-reactnative.md @@ -41,6 +41,22 @@ The "Complete Example" creates an app that looks like the screenshots below: +
Tested Environments (click to show) + +:::note + +This demo was tested in the following environments: + +| OS and Version | Arch | RN Platform | Date | +|:---------------|:-----|:------------|:-----------| +| Windows 10 | x64 | `v0.70.10` | 2023-01-04 | +| Windows 11 | x64 | `v0.71.11` | 2023-05-11 | +| MacOS 12.4 | x64 | `v0.64.30` | 2023-01-04 | + +::: + +
+ ## Native Modules :::caution @@ -195,8 +211,6 @@ RCT_EXPORT_METHOD(PickAndRead:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromi ## Windows Demo -This demo was tested against `v0.70.10` on 2023 January 04 in Windows 10. - :::warning There is no simple standalone executable file at the end of the process. @@ -222,11 +236,11 @@ used to switch the NodeJS version. ::: -1) Create a new project using React Native `0.70`: +1) Create a new project using React Native `0.71`: -```powershell -npx react-native init SheetJSWin --template react-native@^0.70.0 -cd .\SheetJSWin\ +```bash +npx react-native init SheetJSWin --template react-native@^0.71.0 +cd SheetJSWin ``` Create the Windows part of the application: @@ -234,14 +248,14 @@ Create the Windows part of the application: -```powershell +```bash npx react-native-windows-init --no-telemetry --overwrite --language=cs ``` -```powershell +```bash npx react-native-windows-init --no-telemetry --overwrite ``` @@ -256,49 +270,45 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} To ensure that the app works, launch the app: -```powershell +```bash npx react-native run-windows --no-telemetry ``` +:::caution + +When the demo was tested in Windows 11, the run step failed with the message: + +> The Windows SDK version `10.0.19041.0` was not found + +Specific Windows SDK versions can be installed through Visual Studio Installer. + +::: + -2) Create the file `windows\SheetJSWin\DocumentPicker.cs` with the following: +2) Download [`DocumentPicker.cs`](pathname:///reactnative/DocumentPicker.cs) and +save to `windows\SheetJSWin\DocumentPicker.cs`. -```csharp title="windows\SheetJSWin\DocumentPicker.cs" -using System; -using System.Threading.Tasks; -using Windows.Security.Cryptography; -using Windows.Storage; -using Windows.Storage.Pickers; -using Microsoft.ReactNative.Managed; + + -namespace SheetJSWin { - [ReactModule] - class DocumentPicker { - private ReactContext context; - [ReactInitializer] - public void Initialize(ReactContext reactContext) { context = reactContext; } - - [ReactMethod("PickAndRead")] - public async void PickAndRead(IReactPromise result) { - context.Handle.UIDispatcher.Post(async() => { try { - var picker = new FileOpenPicker(); - picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; - picker.FileTypeFilter.Add(".xlsx"); - picker.FileTypeFilter.Add(".xls"); - - var file = await picker.PickSingleFileAsync(); - if(file == null) throw new Exception("File not found"); - - var buf = await FileIO.ReadBufferAsync(file); - result.Resolve(CryptographicBuffer.EncodeToBase64String(buf)); - } catch(Exception e) { result.Reject(new ReactError { Message = e.Message }); }}); - } - } -} +```bash +iwr -Uri https://docs.sheetjs.com/reactnative/DocumentPicker.cs -OutFile windows/SheetJSWin/DocumentPicker.cs ``` + + + +```bash +curl -Lo windows/SheetJSWin/DocumentPicker.cs https://docs.sheetjs.com/reactnative/DocumentPicker.cs +``` + + + + + + 3) Add the highlighted line to `windows\SheetJSWin\SheetJSWin.csproj`. Look for the `ItemGroup` that contains `ReactPackageProvider.cs`: @@ -312,53 +322,26 @@ the `ItemGroup` that contains `ReactPackageProvider.cs`: -2) Create the file `windows\SheetJSWin\DocumentPicker.h` with the following: +2) Download [`DocumentPicker.h`](pathname:///reactnative/DocumentPicker.h) and +save to `windows\SheetJSWin\DocumentPicker.h`. -```cpp title="windows\SheetJSWin\DocumentPicker.h" -#pragma once + + -#include -#include -#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 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}; - }; -} +```bash +iwr -Uri https://docs.sheetjs.com/reactnative/DocumentPicker.h -OutFile windows/SheetJSWin/DocumentPicker.h ``` + + + +```bash +curl -Lo windows/SheetJSWin/DocumentPicker.h https://docs.sheetjs.com/reactnative/DocumentPicker.h +``` + + + + 3) Add the highlighted line to `windows\SheetJSWin\ReactPackageProvider.cpp`: ```cpp title="windows\SheetJSWin\ReactPackageProvider.cpp" @@ -373,55 +356,30 @@ namespace SheetJSWin { Now the native module will be added to the app. -4) Remove `App.js` and save the following to `App.tsx`: +4) Remove `App.js` (if it exists) and save the following to `App.tsx`: -```tsx title="App.tsx" -import React, { useState, type Node } from 'react'; -import { SafeAreaView, ScrollView, StyleSheet, Text, TouchableHighlight, View } from 'react-native'; -import { read, utils, version } from 'xlsx'; -import { getEnforcing } from 'react-native/Libraries/TurboModule/TurboModuleRegistry'; -const DocumentPicker = getEnforcing('DocumentPicker'); + + -const App: () => Node = () => { - - const [ aoa, setAoA ] = useState(["SheetJS".split(""), "5433795".split("")]); - - return ( - - SheetJS × React Native Windows {version} - { - try { - const b64 = await DocumentPicker.PickAndRead(); - const wb = read(b64); - setAoA(utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1 } )); - } catch(err) { alert(`Error: ${err.message}`); } - }}>Click here to Open File! - - {aoa.map((row,R) => ( - {row.map((cell,C) => ( - {cell} - ))} - ))} - - - ); -}; - -const styles = StyleSheet.create({ - cell: { flex: 4 }, - row: { flexDirection: 'row', justifyContent: 'space-evenly', padding: 10, backgroundColor: 'white', }, - table: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', }, - outer: { marginTop: 32, paddingHorizontal: 24, }, - title: { fontSize: 24, fontWeight: '600', }, - button: { marginTop: 8, fontSize: 18, fontWeight: '400', }, -}); - -export default App; +```bash +iwr -Uri https://docs.sheetjs.com/reactnative/desktop/App.tsx -OutFile App.tsx ``` + + + +```bash +curl -LO https://docs.sheetjs.com/reactnative/desktop/App.tsx +``` + + + + + + 5) Test the app again: -```powershell +```bash npx react-native run-windows --no-telemetry ``` @@ -430,8 +388,6 @@ file picker to select the `pres.xlsx` file and the app will show the data. ## macOS Demo -This demo was tested against `v0.64.30` on 2023 January 04 in MacOS 12.4 - 0) Follow the [React Native](https://reactnative.dev/docs/environment-setup) guide for React Native CLI on MacOS. @@ -463,7 +419,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} To ensure that the app works, launch the app: -```powershell +```bash npx react-native run-macos ``` diff --git a/docz/docs/03-demos/10-extensions/03-excelapi.md b/docz/docs/03-demos/10-extensions/03-excelapi.md index fc1f053..2c22348 100644 --- a/docz/docs/03-demos/10-extensions/03-excelapi.md +++ b/docz/docs/03-demos/10-extensions/03-excelapi.md @@ -93,7 +93,7 @@ async function extern(url) { 2) Install dependencies in a new PowerShell window: -```powershell +```bash npm i -g yo bower generator-office ``` @@ -109,7 +109,7 @@ npm i -g yo bower generator-office 4) Start the dev process: -```powershell +```bash cd SheetJSImport npm run build npm start diff --git a/docz/docs/09-miscellany/05-contributing.md b/docz/docs/09-miscellany/05-contributing.md index e380ae7..c104ee7 100644 --- a/docz/docs/09-miscellany/05-contributing.md +++ b/docz/docs/09-miscellany/05-contributing.md @@ -98,7 +98,7 @@ chmod +x compile-git-with-openssl.sh E) Set `git` config `core.autocrlf` setting to `false`. The following commands should be run twice, once within PowerShell and once within WSL bash: -```powershell +```bash git config --global --add core.autocrlf false git config --global --unset core.autocrlf true ``` diff --git a/docz/docusaurus.config.js b/docz/docusaurus.config.js index 09976b1..951decc 100644 --- a/docz/docusaurus.config.js +++ b/docz/docusaurus.config.js @@ -192,25 +192,31 @@ const config = { { from: '/docs/demos/extendscript', to: '/docs/demos/extensions/extendscript/' }, { from: '/docs/demos/excelapi', to: '/docs/demos/extensions/excelapi/' }, { from: '/docs/demos/chromium', to: '/docs/demos/extensions/chromium/' }, - /* cloudata */ + { from: '/docs/getting-started/demos/chromium', to: '/docs/demos/extensions/chromium/' }, + /* cloud */ { from: '/docs/demos/cloudata', to: '/docs/demos/cloud/' }, { from: '/docs/demos/cloudata/gsheet', to: '/docs/demos/cloud/gsheet/' }, { from: '/docs/demos/cloudata/airtable', to: '/docs/demos/cloud/airtable/' }, + { from: '/docs/getting-started/demos/netsuite', to: '/docs/demos/cloud/netsuite/' }, /* hosting */ { from: '/docs/demos/hosting/dropbox', to: '/docs/demos/cloud/dropbox/' }, { from: '/docs/demos/hosting/github', to: '/docs/demos/cloud/github/' }, /* data */ - { from: '/docs/demos/nosql', to: '/docs/demos/data/' }, { from: '/docs/demos/database', to: '/docs/demos/data/' }, + { from: '/docs/demos/nosql', to: '/docs/demos/data/' }, + { from: '/docs/getting-started/demos/nosql', to: '/docs/demos/data/' }, /* net */ { from: '/docs/demos/headless', to: '/docs/demos/net/headless/' }, { from: '/docs/demos/server', to: '/docs/demos/net/server/' }, { from: '/docs/demos/network', to: '/docs/demos/net/network/' }, + { from: '/docs/getting-started/demos/network', to: '/docs/demos/net/network/' }, /* local */ { from: '/docs/demos/clipboard', to: '/docs/demos/local/clipboard/' }, { from: '/docs/demos/localfile', to: '/docs/demos/local/file/' }, /* desktop */ { from: '/docs/demos/cli', to: '/docs/demos/desktop/cli/' }, + { from: '/docs/getting-started/demos/cli', to: '/docs/demos/desktop/cli/' }, + { from: '/docs/getting-started/demos/desktop', to: '/docs/demos/desktop/' }, /* bigdata */ { from: '/docs/demos/ml', to: '/docs/demos/bigdata/ml/' }, { from: '/docs/demos/worker', to: '/docs/demos/bigdata/worker/' }, diff --git a/docz/static/reactnative/DocumentPicker.cs b/docz/static/reactnative/DocumentPicker.cs new file mode 100644 index 0000000..3b48ce2 --- /dev/null +++ b/docz/static/reactnative/DocumentPicker.cs @@ -0,0 +1,31 @@ +using System; +using System.Threading.Tasks; +using Windows.Security.Cryptography; +using Windows.Storage; +using Windows.Storage.Pickers; +using Microsoft.ReactNative.Managed; + +namespace SheetJSWin { + [ReactModule] + class DocumentPicker { + private ReactContext context; + [ReactInitializer] + public void Initialize(ReactContext reactContext) { context = reactContext; } + + [ReactMethod("PickAndRead")] + public async void PickAndRead(IReactPromise result) { + context.Handle.UIDispatcher.Post(async() => { try { + var picker = new FileOpenPicker(); + picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; + picker.FileTypeFilter.Add(".xlsx"); + picker.FileTypeFilter.Add(".xls"); + + var file = await picker.PickSingleFileAsync(); + if(file == null) throw new Exception("File not found"); + + var buf = await FileIO.ReadBufferAsync(file); + result.Resolve(CryptographicBuffer.EncodeToBase64String(buf)); + } catch(Exception e) { result.Reject(new ReactError { Message = e.Message }); }}); + } + } +} \ No newline at end of file diff --git a/docz/static/reactnative/DocumentPicker.h b/docz/static/reactnative/DocumentPicker.h new file mode 100644 index 0000000..031a798 --- /dev/null +++ b/docz/static/reactnative/DocumentPicker.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#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 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}; + }; +} \ No newline at end of file diff --git a/docz/static/reactnative/desktop/App.tsx b/docz/static/reactnative/desktop/App.tsx new file mode 100644 index 0000000..fb4537d --- /dev/null +++ b/docz/static/reactnative/desktop/App.tsx @@ -0,0 +1,41 @@ +import React, { useState, type Node } from 'react'; +import { SafeAreaView, ScrollView, StyleSheet, Text, TouchableHighlight, View } from 'react-native'; +import { read, utils, version } from 'xlsx'; +import { getEnforcing } from 'react-native/Libraries/TurboModule/TurboModuleRegistry'; +const DocumentPicker = getEnforcing('DocumentPicker'); + +const App: () => Node = () => { + + const [ aoa, setAoA ] = useState(["SheetJS".split(""), "5433795".split("")]); + + return ( + + SheetJS × React Native Windows {version} + { + try { + const b64 = await DocumentPicker.PickAndRead(); + const wb = read(b64); + setAoA(utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1 } )); + } catch(err) { alert(`Error: ${err.message}`); } + }}>Click here to Open File! + + {aoa.map((row,R) => ( + {row.map((cell,C) => ( + {cell} + ))} + ))} + + + ); +}; + +const styles = StyleSheet.create({ + cell: { flex: 4 }, + row: { flexDirection: 'row', justifyContent: 'space-evenly', padding: 10, backgroundColor: 'white', }, + table: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', }, + outer: { marginTop: 32, paddingHorizontal: 24, }, + title: { fontSize: 24, fontWeight: '600', }, + button: { marginTop: 8, fontSize: 18, fontWeight: '400', }, +}); + +export default App; \ No newline at end of file diff --git a/docz/static/reactnative/rnw.png b/docz/static/reactnative/rnw.png index b6e40a4fe09207cfe43fe89997d7c50dcc4c0680..7185662740f5c97c88e79efd82046377dedc84ad 100644 GIT binary patch literal 11658 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 IyZG<_03;@ttpET3