Skip to content

Commit f3fbe13

Browse files
author
Kévin Commaille
committed
Draft 1
1 parent e91b01d commit f3fbe13

File tree

6 files changed

+97
-0
lines changed

6 files changed

+97
-0
lines changed

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222
"etebase": "^0.41.0",
2323
"expo-background-fetch": "^8.6.0",
2424
"expo-font": "^8.3.0",
25+
"expo-intent-launcher": "^8.4.0",
2526
"expo-splash-screen": "^0.6.1",
2627
"expo-status-bar": "~1.0.2",
2728
"expo-task-manager": "^8.6.0",
2829
"expo-updates": "~0.3.2",
30+
"file-saver": "^2.0.5",
2931
"immutable": "^4.0.0-rc.12",
3032
"localforage": "^1.9.0",
3133
"moment": "^2.29.0",
@@ -34,6 +36,7 @@
3436
"react-native": "0.63.4",
3537
"react-native-appearance": "~0.3.3",
3638
"react-native-etebase": "^0.1.5",
39+
"react-native-fs": "^2.16.6",
3740
"react-native-gesture-handler": "~1.7.0",
3841
"react-native-get-random-values": "^1.5.0",
3942
"react-native-keyboard-aware-scroll-view": "^0.9.2",
@@ -58,6 +61,7 @@
5861
"devDependencies": {
5962
"@babel/core": "~7.9.0",
6063
"@expo/webpack-config": "^0.12.53",
64+
"@types/file-saver": "^2.0.1",
6165
"@types/markdown-it": "^12.0.0",
6266
"@types/react": "~16.9.35",
6367
"@types/react-dom": "~16.9.8",
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import * as Etebase from "etebase";
2+
import * as IntentLauncher from "expo-intent-launcher";
3+
import RNFS from "react-native-fs";
4+
import { getItemData } from "./utils";
5+
6+
export function canExport() {
7+
return true;
8+
}
9+
10+
export async function exportItem(item: Etebase.Item) {
11+
const { name, content } = await getItemData(item);
12+
const result = await IntentLauncher.startActivityAsync("android.intent.action.CREATE_DOCUMENT", {
13+
type: "text/markdown",
14+
category: "android.intent.category.OPENABLE",
15+
extra: { "android.intent.extra.TITLE": `${name}.md` },
16+
});
17+
console.log("Export Item Result", result);
18+
if (result.resultCode === -1 && result?.data) {
19+
console.log("Content to write", content);
20+
await RNFS.writeFile(result.data, content);
21+
}
22+
}

src/import-export/export.ios.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as Etebase from "etebase";
2+
3+
export function canExport() {
4+
return false;
5+
}
6+
7+
export async function exportItem(item: Etebase.Item) {
8+
const { name } = item.getMeta();
9+
throw Error(`Cannot export item "${name}". Exporting is not implemented on this Platform`);
10+
}

src/import-export/export.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as Etebase from "etebase";
2+
3+
export function canExport() {
4+
return false;
5+
}
6+
7+
export async function exportItem(item: Etebase.Item) {
8+
const { name } = item.getMeta();
9+
throw Error(`Cannot export item "${name}". Exporting is not implemented on this Platform`);
10+
}

src/import-export/export.web.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import * as Etebase from "etebase";
2+
import FileSaver from "file-saver";
3+
import { getItemData } from "./utils";
4+
5+
export function canExport() {
6+
try {
7+
const canBlob = !!new Blob;
8+
return canBlob;
9+
} catch (e) {
10+
return false;
11+
}
12+
}
13+
14+
export async function exportItem(item: Etebase.Item) {
15+
const { name, content } = await getItemData(item);
16+
const blob = new Blob([content], { type: "text/markdown;charset=utf-8" });
17+
FileSaver.saveAs(blob, `${name}.md`);
18+
}

yarn.lock

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2829,6 +2829,11 @@
28292829
dependencies:
28302830
"@babel/types" "^7.3.0"
28312831

2832+
"@types/file-saver@^2.0.1":
2833+
version "2.0.1"
2834+
resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.1.tgz#e18eb8b069e442f7b956d313f4fadd3ef887354e"
2835+
integrity sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==
2836+
28322837
"@types/glob@^7.1.1":
28332838
version "7.1.3"
28342839
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
@@ -3953,6 +3958,11 @@ balanced-match@^1.0.0:
39533958
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
39543959
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
39553960

3961+
base-64@^0.1.0:
3962+
version "0.1.0"
3963+
resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
3964+
integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs=
3965+
39563966
base64-js@^1.0.2:
39573967
version "1.3.1"
39583968
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
@@ -6068,6 +6078,11 @@ expo-image-loader@~1.3.0:
60686078
resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-1.3.0.tgz#06982a1a02f443ba6afa2cc7a4f0ccebc26a5415"
60696079
integrity sha512-kn+9hm42TtHi1wFEp/1nq63vp33/cIbypI2hYjGsL22PAC9yk1go1hs/ktKgVWVlgmi0ruwR09SrM6ndOs7s7w==
60706080

6081+
expo-intent-launcher@^8.4.0:
6082+
version "8.4.0"
6083+
resolved "https://registry.yarnpkg.com/expo-intent-launcher/-/expo-intent-launcher-8.4.0.tgz#c413a3aca06db2a02f3f7b0e40f5ffebc9ff63ed"
6084+
integrity sha512-nlsNEf7XpqWWXvGy6Bv8llGP348yvgg3dpCBIMveCosC49IjwDeXVJPT0VZWr6Q8leM/n+e+BWBDRiU6mfuwQA==
6085+
60716086
expo-permissions@~10.0.0:
60726087
version "10.0.0"
60736088
resolved "https://registry.yarnpkg.com/expo-permissions/-/expo-permissions-10.0.0.tgz#5b31c54d561d00c7e46cd02321bc3704c51c584b"
@@ -6319,6 +6334,11 @@ file-loader@~6.0.0:
63196334
loader-utils "^2.0.0"
63206335
schema-utils "^2.6.5"
63216336

6337+
file-saver@^2.0.5:
6338+
version "2.0.5"
6339+
resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
6340+
integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
6341+
63226342
file-type@^9.0.0:
63236343
version "9.0.0"
63246344
resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
@@ -10908,6 +10928,14 @@ react-native-fit-image@^1.5.5:
1090810928
dependencies:
1090910929
prop-types "^15.5.10"
1091010930

10931+
react-native-fs@^2.16.6:
10932+
version "2.16.6"
10933+
resolved "https://registry.yarnpkg.com/react-native-fs/-/react-native-fs-2.16.6.tgz#2901789a43210a35a0ef0a098019bbef3af395fd"
10934+
integrity sha512-ZWOooD1AuFoAGY3HS2GY7Qx2LZo4oIg6AK0wbC68detxwvX75R/q9lRqThXNKP6vIo2VHWa0fYUo/SrLw80E8w==
10935+
dependencies:
10936+
base-64 "^0.1.0"
10937+
utf8 "^3.0.0"
10938+
1091110939
react-native-gesture-handler@~1.7.0:
1091210940
version "1.7.0"
1091310941
resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.7.0.tgz#0ef74a5ba836832e497dc49eb1ce58baa6c617e5"
@@ -13028,6 +13056,11 @@ use@^3.1.0:
1302813056
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
1302913057
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
1303013058

13059+
utf8@^3.0.0:
13060+
version "3.0.0"
13061+
resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
13062+
integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
13063+
1303113064
utif@^2.0.1:
1303213065
version "2.0.1"
1303313066
resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"

0 commit comments

Comments
 (0)