react-native-share 9.1.0 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/helpers/android.js +34 -0
- package/lib/commonjs/helpers/android.js.map +1 -0
- package/lib/commonjs/helpers/checkPermissions.js +22 -0
- package/lib/commonjs/helpers/checkPermissions.js.map +1 -0
- package/lib/commonjs/helpers/options.js +36 -0
- package/lib/commonjs/helpers/options.js.map +1 -0
- package/lib/commonjs/helpers/platform.js +20 -0
- package/lib/commonjs/helpers/platform.js.map +1 -0
- package/lib/commonjs/index.js +35 -68
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/helpers/android.js +27 -0
- package/lib/module/helpers/android.js.map +1 -0
- package/lib/module/helpers/checkPermissions.js +17 -0
- package/lib/module/helpers/checkPermissions.js.map +1 -0
- package/lib/module/helpers/options.js +29 -0
- package/lib/module/helpers/options.js.map +1 -0
- package/lib/module/helpers/platform.js +12 -0
- package/lib/module/helpers/platform.js.map +1 -0
- package/lib/module/index.js +35 -68
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/helpers/android.d.ts +1 -0
- package/lib/typescript/src/helpers/checkPermissions.d.ts +3 -0
- package/lib/typescript/src/helpers/options.d.ts +71 -0
- package/lib/typescript/src/helpers/platform.d.ts +3 -0
- package/lib/typescript/src/index.d.ts +4 -4
- package/package.json +1 -1
- package/src/helpers/android.ts +30 -0
- package/src/helpers/checkPermissions.ts +13 -0
- package/src/helpers/options.ts +26 -0
- package/src/helpers/platform.ts +14 -0
- package/src/index.tsx +46 -81
- package/lib/commonjs/helpers/requireAndAskPermissions.js +0 -46
- package/lib/commonjs/helpers/requireAndAskPermissions.js.map +0 -1
- package/lib/module/helpers/requireAndAskPermissions.js +0 -38
- package/lib/module/helpers/requireAndAskPermissions.js.map +0 -1
- package/lib/typescript/src/helpers/requireAndAskPermissions.d.ts +0 -3
- package/src/helpers/requireAndAskPermissions.ts +0 -60
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.checkAndroidPermissionsForUrls = checkAndroidPermissionsForUrls;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _NativeRNShare = _interopRequireDefault(require("../../codegenSpec/NativeRNShare"));
|
|
9
|
+
var _platform = require("./platform");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
async function checkAndroidPermissionsForUrls(urls) {
|
|
12
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/871
|
|
13
|
+
if ((await Promise.all(urls.map(url => _NativeRNShare.default.isBase64File(url)))).includes(true)) {
|
|
14
|
+
await checkExternalStoragePermission();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async function checkExternalStoragePermission() {
|
|
18
|
+
const {
|
|
19
|
+
WRITE_EXTERNAL_STORAGE
|
|
20
|
+
} = _reactNative.PermissionsAndroid.PERMISSIONS;
|
|
21
|
+
const granted = await _reactNative.PermissionsAndroid.check(WRITE_EXTERNAL_STORAGE);
|
|
22
|
+
if (!granted) {
|
|
23
|
+
if (!isAndroidVersionAtLeastKitKat()) {
|
|
24
|
+
const result = await _reactNative.PermissionsAndroid.request(WRITE_EXTERNAL_STORAGE);
|
|
25
|
+
if (result !== _reactNative.PermissionsAndroid.RESULTS.GRANTED) {
|
|
26
|
+
throw new Error('Write Permission not available');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function isAndroidVersionAtLeastKitKat() {
|
|
32
|
+
return (0, _platform.getAndroidVersion)() >= 19;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeRNShare","_interopRequireDefault","_platform","obj","__esModule","default","checkAndroidPermissionsForUrls","urls","Promise","all","map","url","NativeRNShare","isBase64File","includes","checkExternalStoragePermission","WRITE_EXTERNAL_STORAGE","PermissionsAndroid","PERMISSIONS","granted","check","isAndroidVersionAtLeastKitKat","result","request","RESULTS","GRANTED","Error","getAndroidVersion"],"sources":["android.ts"],"sourcesContent":["import { PermissionsAndroid } from 'react-native';\n\nimport NativeRNShare from '../../codegenSpec/NativeRNShare';\nimport { getAndroidVersion } from './platform';\n\nexport async function checkAndroidPermissionsForUrls(urls: string[]) {\n // Reference: https://github.com/react-native-share/react-native-share/pull/871\n if ((await Promise.all(urls.map((url) => NativeRNShare.isBase64File(url)))).includes(true)) {\n await checkExternalStoragePermission();\n }\n}\n\nasync function checkExternalStoragePermission() {\n const { WRITE_EXTERNAL_STORAGE } = PermissionsAndroid.PERMISSIONS;\n\n const granted = await PermissionsAndroid.check(WRITE_EXTERNAL_STORAGE);\n\n if (!granted) {\n if (!isAndroidVersionAtLeastKitKat()) {\n const result = await PermissionsAndroid.request(WRITE_EXTERNAL_STORAGE);\n if (result !== PermissionsAndroid.RESULTS.GRANTED) {\n throw new Error('Write Permission not available');\n }\n }\n }\n}\n\nfunction isAndroidVersionAtLeastKitKat() {\n return getAndroidVersion() >= 19;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAA+C,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAExC,eAAeG,8BAA8BA,CAACC,IAAc,EAAE;EACnE;EACA,IAAI,CAAC,MAAMC,OAAO,CAACC,GAAG,CAACF,IAAI,CAACG,GAAG,CAAEC,GAAG,IAAKC,sBAAa,CAACC,YAAY,CAACF,GAAG,CAAC,CAAC,CAAC,EAAEG,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC1F,MAAMC,8BAA8B,CAAC,CAAC;EACxC;AACF;AAEA,eAAeA,8BAA8BA,CAAA,EAAG;EAC9C,MAAM;IAAEC;EAAuB,CAAC,GAAGC,+BAAkB,CAACC,WAAW;EAEjE,MAAMC,OAAO,GAAG,MAAMF,+BAAkB,CAACG,KAAK,CAACJ,sBAAsB,CAAC;EAEtE,IAAI,CAACG,OAAO,EAAE;IACZ,IAAI,CAACE,6BAA6B,CAAC,CAAC,EAAE;MACpC,MAAMC,MAAM,GAAG,MAAML,+BAAkB,CAACM,OAAO,CAACP,sBAAsB,CAAC;MACvE,IAAIM,MAAM,KAAKL,+BAAkB,CAACO,OAAO,CAACC,OAAO,EAAE;QACjD,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;MACnD;IACF;EACF;AACF;AAEA,SAASL,6BAA6BA,CAAA,EAAG;EACvC,OAAO,IAAAM,2BAAiB,EAAC,CAAC,IAAI,EAAE;AAClC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = checkPermissions;
|
|
7
|
+
var _android = require("./android");
|
|
8
|
+
var _platform = require("./platform");
|
|
9
|
+
/** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */
|
|
10
|
+
async function checkPermissions(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
url,
|
|
13
|
+
urls
|
|
14
|
+
} = _ref;
|
|
15
|
+
if ((0, _platform.isAndroid)()) {
|
|
16
|
+
if (url || urls) {
|
|
17
|
+
const normalizedUrls = urls ?? (url ? [url] : []);
|
|
18
|
+
await (0, _android.checkAndroidPermissionsForUrls)(normalizedUrls);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=checkPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_android","require","_platform","checkPermissions","_ref","url","urls","isAndroid","normalizedUrls","checkAndroidPermissionsForUrls"],"sources":["checkPermissions.ts"],"sourcesContent":["import { ShareOptions } from '../types';\nimport { checkAndroidPermissionsForUrls } from './android';\nimport { isAndroid } from './platform';\n\n/** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */\nexport default async function checkPermissions({ url, urls }: Pick<ShareOptions, 'url' | 'urls'>) {\n if (isAndroid()) {\n if (url || urls) {\n const normalizedUrls = urls ?? (url ? [url] : []);\n await checkAndroidPermissionsForUrls(normalizedUrls);\n }\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA;AACe,eAAeE,gBAAgBA,CAAAC,IAAA,EAAoD;EAAA,IAAnD;IAAEC,GAAG;IAAEC;EAAyC,CAAC,GAAAF,IAAA;EAC9F,IAAI,IAAAG,mBAAS,EAAC,CAAC,EAAE;IACf,IAAIF,GAAG,IAAIC,IAAI,EAAE;MACf,MAAME,cAAc,GAAGF,IAAI,KAAKD,GAAG,GAAG,CAACA,GAAG,CAAC,GAAG,EAAE,CAAC;MACjD,MAAM,IAAAI,uCAA8B,EAACD,cAAc,CAAC;IACtD;EACF;AACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.normalizeShareOpenOptions = normalizeShareOpenOptions;
|
|
7
|
+
exports.normalizeSingleShareOptions = normalizeSingleShareOptions;
|
|
8
|
+
var _platform = require("./platform");
|
|
9
|
+
function normalizeShareOpenOptions(_ref) {
|
|
10
|
+
let {
|
|
11
|
+
...options
|
|
12
|
+
} = _ref;
|
|
13
|
+
if ((0, _platform.isIOS)()) {
|
|
14
|
+
// Backward compatibility with { Share } from react-native
|
|
15
|
+
if (options.url && !options.urls) {
|
|
16
|
+
options.urls = [options.url];
|
|
17
|
+
delete options.url;
|
|
18
|
+
|
|
19
|
+
// Concern: I could be wrong but there seems to be an implicit association between url and filename in the native code.
|
|
20
|
+
// I don't understand object-c but it looks like we're using urls index to look up a filename. What happens if the length of urls doesn't match the length of filenames? Maybe we can throw an error.
|
|
21
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/1396/files#diff-2d42a82ccc4ec42d9bfea630535ec2b757bd7a90b96d33d5d5433da17f4bdf79R208
|
|
22
|
+
if (options.filename && !options.filenames) {
|
|
23
|
+
options.filenames = [options.filename];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return options;
|
|
28
|
+
}
|
|
29
|
+
function normalizeSingleShareOptions(_ref2) {
|
|
30
|
+
let {
|
|
31
|
+
...options
|
|
32
|
+
} = _ref2;
|
|
33
|
+
if (options.url) options.urls = [options.url];
|
|
34
|
+
return options;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_platform","require","normalizeShareOpenOptions","_ref","options","isIOS","url","urls","filename","filenames","normalizeSingleShareOptions","_ref2"],"sources":["options.ts"],"sourcesContent":["import { ShareOptions, ShareSingleOptions } from '../types';\nimport { isIOS } from './platform';\n\nexport function normalizeShareOpenOptions({ ...options }: ShareOptions) {\n if (isIOS()) {\n // Backward compatibility with { Share } from react-native\n if (options.url && !options.urls) {\n options.urls = [options.url];\n delete options.url;\n\n // Concern: I could be wrong but there seems to be an implicit association between url and filename in the native code.\n // I don't understand object-c but it looks like we're using urls index to look up a filename. What happens if the length of urls doesn't match the length of filenames? Maybe we can throw an error.\n // Reference: https://github.com/react-native-share/react-native-share/pull/1396/files#diff-2d42a82ccc4ec42d9bfea630535ec2b757bd7a90b96d33d5d5433da17f4bdf79R208\n if (options.filename && !options.filenames) {\n options.filenames = [options.filename];\n }\n }\n }\n\n return options;\n}\n\nexport function normalizeSingleShareOptions({ ...options }: ShareSingleOptions) {\n if (options.url) options.urls = [options.url];\n return options;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEO,SAASC,yBAAyBA,CAAAC,IAAA,EAA+B;EAAA,IAA9B;IAAE,GAAGC;EAAsB,CAAC,GAAAD,IAAA;EACpE,IAAI,IAAAE,eAAK,EAAC,CAAC,EAAE;IACX;IACA,IAAID,OAAO,CAACE,GAAG,IAAI,CAACF,OAAO,CAACG,IAAI,EAAE;MAChCH,OAAO,CAACG,IAAI,GAAG,CAACH,OAAO,CAACE,GAAG,CAAC;MAC5B,OAAOF,OAAO,CAACE,GAAG;;MAElB;MACA;MACA;MACA,IAAIF,OAAO,CAACI,QAAQ,IAAI,CAACJ,OAAO,CAACK,SAAS,EAAE;QAC1CL,OAAO,CAACK,SAAS,GAAG,CAACL,OAAO,CAACI,QAAQ,CAAC;MACxC;IACF;EACF;EAEA,OAAOJ,OAAO;AAChB;AAEO,SAASM,2BAA2BA,CAAAC,KAAA,EAAqC;EAAA,IAApC;IAAE,GAAGP;EAA4B,CAAC,GAAAO,KAAA;EAC5E,IAAIP,OAAO,CAACE,GAAG,EAAEF,OAAO,CAACG,IAAI,GAAG,CAACH,OAAO,CAACE,GAAG,CAAC;EAC7C,OAAOF,OAAO;AAChB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAndroidVersion = getAndroidVersion;
|
|
7
|
+
exports.isAndroid = isAndroid;
|
|
8
|
+
exports.isIOS = isIOS;
|
|
9
|
+
var _reactNative = require("react-native");
|
|
10
|
+
function isIOS() {
|
|
11
|
+
return 'ios' === _reactNative.Platform.OS;
|
|
12
|
+
}
|
|
13
|
+
function isAndroid() {
|
|
14
|
+
return 'android' === _reactNative.Platform.OS;
|
|
15
|
+
}
|
|
16
|
+
function getAndroidVersion() {
|
|
17
|
+
const version = _reactNative.Platform.Version;
|
|
18
|
+
return typeof version === 'string' ? parseInt(version, 10) : version;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","isIOS","Platform","OS","isAndroid","getAndroidVersion","version","Version","parseInt"],"sources":["platform.ts"],"sourcesContent":["import { Platform } from 'react-native';\n\nexport function isIOS() {\n return 'ios' === Platform.OS;\n}\n\nexport function isAndroid() {\n return 'android' === Platform.OS;\n}\n\nexport function getAndroidVersion() {\n const version = Platform.Version;\n return typeof version === 'string' ? parseInt(version, 10) : version;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,SAASC,KAAKA,CAAA,EAAG;EACtB,OAAO,KAAK,KAAKC,qBAAQ,CAACC,EAAE;AAC9B;AAEO,SAASC,SAASA,CAAA,EAAG;EAC1B,OAAO,SAAS,KAAKF,qBAAQ,CAACC,EAAE;AAClC;AAEO,SAASE,iBAAiBA,CAAA,EAAG;EAClC,MAAMC,OAAO,GAAGJ,qBAAQ,CAACK,OAAO;EAChC,OAAO,OAAOD,OAAO,KAAK,QAAQ,GAAGE,QAAQ,CAACF,OAAO,EAAE,EAAE,CAAC,GAAGA,OAAO;AACtE"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -40,14 +40,15 @@ Object.defineProperty(exports, "Social", {
|
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
exports.default = void 0;
|
|
43
|
-
var _reactNative = require("react-native");
|
|
44
43
|
var _NativeRNShare = _interopRequireDefault(require("../codegenSpec/NativeRNShare"));
|
|
45
44
|
var _Overlay = _interopRequireDefault(require("./components/Overlay"));
|
|
46
45
|
var _Sheet = _interopRequireDefault(require("./components/Sheet"));
|
|
47
46
|
var _Button = _interopRequireDefault(require("./components/Button"));
|
|
48
47
|
var _ShareSheet = _interopRequireDefault(require("./components/ShareSheet"));
|
|
49
|
-
var
|
|
48
|
+
var _checkPermissions = _interopRequireDefault(require("./helpers/checkPermissions"));
|
|
50
49
|
var _types = require("./types");
|
|
50
|
+
var _platform = require("./helpers/platform");
|
|
51
|
+
var _options = require("./helpers/options");
|
|
51
52
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
52
53
|
const RNShare = {
|
|
53
54
|
Button: _Button.default,
|
|
@@ -73,75 +74,41 @@ const RNShare = {
|
|
|
73
74
|
SNAPCHAT: _NativeRNShare.default.getConstants().SNAPCHAT || _types.Social.Snapchat,
|
|
74
75
|
VIBER: _NativeRNShare.default.getConstants().VIBER || _types.Social.Viber
|
|
75
76
|
},
|
|
76
|
-
open(options) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
delete options.url;
|
|
83
|
-
options.urls = [url];
|
|
84
|
-
if (options.filename && !options.filenames) {
|
|
85
|
-
options.filenames = [options.filename];
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
_NativeRNShare.default.open(options).then(ret => {
|
|
89
|
-
if (ret.success) {
|
|
90
|
-
return resolve({
|
|
91
|
-
success: ret.success,
|
|
92
|
-
message: ret.message
|
|
93
|
-
});
|
|
94
|
-
} else if (options.failOnCancel === false) {
|
|
95
|
-
return resolve({
|
|
96
|
-
dismissedAction: true,
|
|
97
|
-
success: ret.success,
|
|
98
|
-
message: ret.message
|
|
99
|
-
});
|
|
100
|
-
} else {
|
|
101
|
-
reject(new Error('User did not share'));
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}).catch(e => reject(e));
|
|
105
|
-
});
|
|
106
|
-
},
|
|
107
|
-
shareSingle(options) {
|
|
108
|
-
if (_reactNative.Platform.OS === 'ios' || _reactNative.Platform.OS === 'android') {
|
|
109
|
-
return new Promise((resolve, reject) => {
|
|
110
|
-
(0, _requireAndAskPermissions.default)(options).then(() => {
|
|
111
|
-
if (options.url) {
|
|
112
|
-
options.urls = [options.url];
|
|
113
|
-
}
|
|
114
|
-
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
115
|
-
return reject({
|
|
116
|
-
success: false,
|
|
117
|
-
message: 'Instagram Story share requires an appId based on Meta policy.'
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
_NativeRNShare.default.shareSingle(options).then(ret => {
|
|
121
|
-
return resolve({
|
|
122
|
-
success: Boolean(ret.success),
|
|
123
|
-
message: ret.message
|
|
124
|
-
});
|
|
125
|
-
}).catch(e => reject(e));
|
|
126
|
-
}).catch(e => reject(e));
|
|
127
|
-
});
|
|
128
|
-
} else {
|
|
129
|
-
throw new Error('Not implemented');
|
|
77
|
+
async open(options) {
|
|
78
|
+
await (0, _checkPermissions.default)(options);
|
|
79
|
+
options = (0, _options.normalizeShareOpenOptions)(options);
|
|
80
|
+
const result = await _NativeRNShare.default.open(options);
|
|
81
|
+
if (!result.success && options.failOnCancel === false) {
|
|
82
|
+
throw new Error('User did not share');
|
|
130
83
|
}
|
|
84
|
+
return result;
|
|
131
85
|
},
|
|
132
|
-
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return resolve({
|
|
137
|
-
isInstalled,
|
|
138
|
-
message: 'Package is Installed'
|
|
139
|
-
});
|
|
140
|
-
}).catch(e => reject(e));
|
|
141
|
-
});
|
|
142
|
-
} else {
|
|
143
|
-
throw new Error('Not implemented');
|
|
86
|
+
async shareSingle(options) {
|
|
87
|
+
if (!(0, _platform.isAndroid)() && !(0, _platform.isIOS)()) throw new Error('Not implemented');
|
|
88
|
+
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
89
|
+
throw new Error('To share to Instagram Stories you need to provide appId');
|
|
144
90
|
}
|
|
91
|
+
await (0, _checkPermissions.default)(options);
|
|
92
|
+
options = (0, _options.normalizeSingleShareOptions)(options);
|
|
93
|
+
const {
|
|
94
|
+
success,
|
|
95
|
+
message
|
|
96
|
+
} = await _NativeRNShare.default.shareSingle(options);
|
|
97
|
+
const result = {
|
|
98
|
+
// Concern: Why do we need to covert success to boolean? A comment would be insightful
|
|
99
|
+
success: Boolean(success),
|
|
100
|
+
message
|
|
101
|
+
};
|
|
102
|
+
return result;
|
|
103
|
+
},
|
|
104
|
+
async isPackageInstalled(packageName) {
|
|
105
|
+
if (!(0, _platform.isAndroid)()) throw new Error('Not implemented');
|
|
106
|
+
const isInstalled = await _NativeRNShare.default.isPackageInstalled(packageName);
|
|
107
|
+
const result = {
|
|
108
|
+
isInstalled,
|
|
109
|
+
message: 'Package is Installed'
|
|
110
|
+
};
|
|
111
|
+
return result;
|
|
145
112
|
}
|
|
146
113
|
};
|
|
147
114
|
var _default = RNShare;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeRNShare","_interopRequireDefault","_Overlay","_Sheet","_Button","_ShareSheet","_requireAndAskPermissions","_types","obj","__esModule","default","RNShare","Button","ShareSheet","Overlay","Sheet","Social","FACEBOOK","NativeRNShare","getConstants","Facebook","FACEBOOK_STORIES","FACEBOOKSTORIES","FacebookStories","PAGESMANAGER","Pagesmanager","TWITTER","Twitter","WHATSAPP","Whatsapp","WHATSAPPBUSINESS","Whatsappbusiness","INSTAGRAM","Instagram","INSTAGRAM_STORIES","INSTAGRAMSTORIES","InstagramStories","GOOGLEPLUS","Googleplus","EMAIL","Email","PINTEREST","Pinterest","LINKEDIN","Linkedin","SMS","Sms","TELEGRAM","Telegram","MESSENGER","Messenger","SNAPCHAT","Snapchat","VIBER","Viber","open","options","Promise","resolve","reject","requireAndAskPermissions","then","Platform","OS","url","urls","filename","filenames","ret","success","message","failOnCancel","dismissedAction","Error","catch","e","shareSingle","social","appId","Boolean","isPackageInstalled","packageName","isInstalled","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import { Platform } from 'react-native';\n\nimport NativeRNShare from '../codegenSpec/NativeRNShare';\n\nimport Overlay from './components/Overlay';\nimport Sheet from './components/Sheet';\nimport Button from './components/Button';\nimport ShareSheet from './components/ShareSheet';\nimport requireAndAskPermissions from './helpers/requireAndAskPermissions';\nimport {\n Social,\n IsPackageInstalledResult,\n ActivityType,\n ShareOpenResult,\n ShareAsset,\n ShareOptions,\n ShareSingleOptions,\n ShareSingleResult,\n} from './types';\n\nconst RNShare = {\n Button,\n ShareSheet,\n Overlay,\n Sheet,\n\n Social: {\n FACEBOOK: NativeRNShare.getConstants().FACEBOOK || Social.Facebook,\n FACEBOOK_STORIES: NativeRNShare.getConstants().FACEBOOKSTORIES || Social.FacebookStories,\n PAGESMANAGER: NativeRNShare.getConstants().PAGESMANAGER || Social.Pagesmanager,\n TWITTER: NativeRNShare.getConstants().TWITTER || Social.Twitter,\n WHATSAPP: NativeRNShare.getConstants().WHATSAPP || Social.Whatsapp,\n WHATSAPPBUSINESS: NativeRNShare.getConstants().WHATSAPPBUSINESS || Social.Whatsappbusiness,\n INSTAGRAM: NativeRNShare.getConstants().INSTAGRAM || Social.Instagram,\n INSTAGRAM_STORIES: NativeRNShare.getConstants().INSTAGRAMSTORIES || Social.InstagramStories,\n GOOGLEPLUS: NativeRNShare.getConstants().GOOGLEPLUS || Social.Googleplus,\n EMAIL: NativeRNShare.getConstants().EMAIL || Social.Email,\n PINTEREST: NativeRNShare.getConstants().PINTEREST || Social.Pinterest,\n LINKEDIN: NativeRNShare.getConstants().LINKEDIN || Social.Linkedin,\n SMS: NativeRNShare.getConstants().SMS || Social.Sms,\n TELEGRAM: NativeRNShare.getConstants().TELEGRAM || Social.Telegram,\n MESSENGER: NativeRNShare.getConstants().MESSENGER || Social.Messenger,\n SNAPCHAT: NativeRNShare.getConstants().SNAPCHAT || Social.Snapchat,\n VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,\n },\n\n open(options: ShareOptions): Promise<ShareOpenResult | never> {\n return new Promise((resolve, reject) => {\n requireAndAskPermissions(options)\n .then(() => {\n if (Platform.OS === 'ios' && options.url && !options.urls) {\n // Backward compatibility with { Share } from react-native\n const url = options.url;\n delete options.url;\n\n options.urls = [url];\n\n if (options.filename && !options.filenames) {\n options.filenames = [options.filename];\n }\n }\n NativeRNShare.open(options).then((ret: { success: boolean; message: string }) => {\n if (ret.success) {\n return resolve({\n success: ret.success,\n message: ret.message,\n });\n } else if (options.failOnCancel === false) {\n return resolve({\n dismissedAction: true,\n success: ret.success,\n message: ret.message,\n });\n } else {\n reject(new Error('User did not share'));\n }\n });\n })\n .catch((e: unknown) => reject(e));\n });\n },\n\n shareSingle(options: ShareSingleOptions): Promise<ShareSingleResult | never> {\n if (Platform.OS === 'ios' || Platform.OS === 'android') {\n return new Promise((resolve, reject) => {\n requireAndAskPermissions(options)\n .then(() => {\n if (options.url) {\n options.urls = [options.url];\n }\n\n if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {\n return reject({\n success: false,\n message: 'Instagram Story share requires an appId based on Meta policy.',\n });\n }\n NativeRNShare.shareSingle(options)\n .then((ret: { success: boolean; message: string }) => {\n return resolve({\n success: Boolean(ret.success),\n message: ret.message,\n });\n })\n .catch((e: unknown) => reject(e));\n })\n .catch((e: unknown) => reject(e));\n });\n } else {\n throw new Error('Not implemented');\n }\n },\n\n isPackageInstalled(packageName: string): Promise<IsPackageInstalledResult | never> {\n if (Platform.OS === 'android') {\n return new Promise((resolve, reject) => {\n NativeRNShare.isPackageInstalled(packageName)\n .then((isInstalled: boolean) => {\n return resolve({\n isInstalled,\n message: 'Package is Installed',\n });\n })\n .catch((e: unknown) => reject(e));\n });\n } else {\n throw new Error('Not implemented');\n }\n },\n} as const;\n\nexport { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };\nexport type { ShareSingleOptions, ShareOptions, ActivityType, IsPackageInstalledResult };\nexport type { OverlayProps } from './components/Overlay';\nexport type { SheetProps } from './components/Sheet';\nexport type { ButtonProps } from './components/Button';\nexport type { ShareSheetProps } from './components/ShareSheet';\nexport default RNShare;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_NativeRNShare","_interopRequireDefault","require","_Overlay","_Sheet","_Button","_ShareSheet","_checkPermissions","_types","_platform","_options","obj","__esModule","default","RNShare","Button","ShareSheet","Overlay","Sheet","Social","FACEBOOK","NativeRNShare","getConstants","Facebook","FACEBOOK_STORIES","FACEBOOKSTORIES","FacebookStories","PAGESMANAGER","Pagesmanager","TWITTER","Twitter","WHATSAPP","Whatsapp","WHATSAPPBUSINESS","Whatsappbusiness","INSTAGRAM","Instagram","INSTAGRAM_STORIES","INSTAGRAMSTORIES","InstagramStories","GOOGLEPLUS","Googleplus","EMAIL","Email","PINTEREST","Pinterest","LINKEDIN","Linkedin","SMS","Sms","TELEGRAM","Telegram","MESSENGER","Messenger","SNAPCHAT","Snapchat","VIBER","Viber","open","options","checkPermissions","normalizeShareOpenOptions","result","success","failOnCancel","Error","shareSingle","isAndroid","isIOS","social","appId","normalizeSingleShareOptions","message","Boolean","isPackageInstalled","packageName","isInstalled","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import NativeRNShare from '../codegenSpec/NativeRNShare';\n\nimport Overlay from './components/Overlay';\nimport Sheet from './components/Sheet';\nimport Button from './components/Button';\nimport ShareSheet from './components/ShareSheet';\nimport checkPermissions from './helpers/checkPermissions';\nimport {\n Social,\n IsPackageInstalledResult,\n ActivityType,\n ShareAsset,\n ShareOpenResult,\n ShareOptions,\n ShareSingleOptions,\n ShareSingleResult,\n} from './types';\nimport { isAndroid, isIOS } from './helpers/platform';\nimport { normalizeShareOpenOptions, normalizeSingleShareOptions } from './helpers/options';\n\nconst RNShare = {\n Button,\n ShareSheet,\n Overlay,\n Sheet,\n\n Social: {\n FACEBOOK: NativeRNShare.getConstants().FACEBOOK || Social.Facebook,\n FACEBOOK_STORIES: NativeRNShare.getConstants().FACEBOOKSTORIES || Social.FacebookStories,\n PAGESMANAGER: NativeRNShare.getConstants().PAGESMANAGER || Social.Pagesmanager,\n TWITTER: NativeRNShare.getConstants().TWITTER || Social.Twitter,\n WHATSAPP: NativeRNShare.getConstants().WHATSAPP || Social.Whatsapp,\n WHATSAPPBUSINESS: NativeRNShare.getConstants().WHATSAPPBUSINESS || Social.Whatsappbusiness,\n INSTAGRAM: NativeRNShare.getConstants().INSTAGRAM || Social.Instagram,\n INSTAGRAM_STORIES: NativeRNShare.getConstants().INSTAGRAMSTORIES || Social.InstagramStories,\n GOOGLEPLUS: NativeRNShare.getConstants().GOOGLEPLUS || Social.Googleplus,\n EMAIL: NativeRNShare.getConstants().EMAIL || Social.Email,\n PINTEREST: NativeRNShare.getConstants().PINTEREST || Social.Pinterest,\n LINKEDIN: NativeRNShare.getConstants().LINKEDIN || Social.Linkedin,\n SMS: NativeRNShare.getConstants().SMS || Social.Sms,\n TELEGRAM: NativeRNShare.getConstants().TELEGRAM || Social.Telegram,\n MESSENGER: NativeRNShare.getConstants().MESSENGER || Social.Messenger,\n SNAPCHAT: NativeRNShare.getConstants().SNAPCHAT || Social.Snapchat,\n VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,\n },\n\n async open(options: ShareOptions) {\n await checkPermissions(options);\n\n options = normalizeShareOpenOptions(options);\n\n const result: ShareOpenResult = await NativeRNShare.open(options);\n\n if (!result.success && options.failOnCancel === false) {\n throw new Error('User did not share');\n }\n\n return result;\n },\n\n async shareSingle(options: ShareSingleOptions) {\n if (!isAndroid() && !isIOS()) throw new Error('Not implemented');\n\n if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {\n throw new Error('To share to Instagram Stories you need to provide appId');\n }\n\n await checkPermissions(options);\n\n options = normalizeSingleShareOptions(options);\n\n const { success, message } = await NativeRNShare.shareSingle(options);\n\n const result: ShareSingleResult = {\n // Concern: Why do we need to covert success to boolean? A comment would be insightful\n success: Boolean(success),\n message,\n };\n\n return result;\n },\n\n async isPackageInstalled(packageName: string) {\n if (!isAndroid()) throw new Error('Not implemented');\n\n const isInstalled = await NativeRNShare.isPackageInstalled(packageName);\n\n const result: IsPackageInstalledResult = {\n isInstalled,\n message: 'Package is Installed',\n };\n\n return result;\n },\n} as const;\n\nexport { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };\nexport type { ShareSingleOptions, ShareOptions, ActivityType, IsPackageInstalledResult };\nexport type { OverlayProps } from './components/Overlay';\nexport type { SheetProps } from './components/Sheet';\nexport type { ButtonProps } from './components/Button';\nexport type { ShareSheetProps } from './components/ShareSheet';\nexport default RNShare;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PermissionsAndroid } from 'react-native';
|
|
2
|
+
import NativeRNShare from '../../codegenSpec/NativeRNShare';
|
|
3
|
+
import { getAndroidVersion } from './platform';
|
|
4
|
+
export async function checkAndroidPermissionsForUrls(urls) {
|
|
5
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/871
|
|
6
|
+
if ((await Promise.all(urls.map(url => NativeRNShare.isBase64File(url)))).includes(true)) {
|
|
7
|
+
await checkExternalStoragePermission();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
async function checkExternalStoragePermission() {
|
|
11
|
+
const {
|
|
12
|
+
WRITE_EXTERNAL_STORAGE
|
|
13
|
+
} = PermissionsAndroid.PERMISSIONS;
|
|
14
|
+
const granted = await PermissionsAndroid.check(WRITE_EXTERNAL_STORAGE);
|
|
15
|
+
if (!granted) {
|
|
16
|
+
if (!isAndroidVersionAtLeastKitKat()) {
|
|
17
|
+
const result = await PermissionsAndroid.request(WRITE_EXTERNAL_STORAGE);
|
|
18
|
+
if (result !== PermissionsAndroid.RESULTS.GRANTED) {
|
|
19
|
+
throw new Error('Write Permission not available');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isAndroidVersionAtLeastKitKat() {
|
|
25
|
+
return getAndroidVersion() >= 19;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PermissionsAndroid","NativeRNShare","getAndroidVersion","checkAndroidPermissionsForUrls","urls","Promise","all","map","url","isBase64File","includes","checkExternalStoragePermission","WRITE_EXTERNAL_STORAGE","PERMISSIONS","granted","check","isAndroidVersionAtLeastKitKat","result","request","RESULTS","GRANTED","Error"],"sources":["android.ts"],"sourcesContent":["import { PermissionsAndroid } from 'react-native';\n\nimport NativeRNShare from '../../codegenSpec/NativeRNShare';\nimport { getAndroidVersion } from './platform';\n\nexport async function checkAndroidPermissionsForUrls(urls: string[]) {\n // Reference: https://github.com/react-native-share/react-native-share/pull/871\n if ((await Promise.all(urls.map((url) => NativeRNShare.isBase64File(url)))).includes(true)) {\n await checkExternalStoragePermission();\n }\n}\n\nasync function checkExternalStoragePermission() {\n const { WRITE_EXTERNAL_STORAGE } = PermissionsAndroid.PERMISSIONS;\n\n const granted = await PermissionsAndroid.check(WRITE_EXTERNAL_STORAGE);\n\n if (!granted) {\n if (!isAndroidVersionAtLeastKitKat()) {\n const result = await PermissionsAndroid.request(WRITE_EXTERNAL_STORAGE);\n if (result !== PermissionsAndroid.RESULTS.GRANTED) {\n throw new Error('Write Permission not available');\n }\n }\n }\n}\n\nfunction isAndroidVersionAtLeastKitKat() {\n return getAndroidVersion() >= 19;\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,cAAc;AAEjD,OAAOC,aAAa,MAAM,iCAAiC;AAC3D,SAASC,iBAAiB,QAAQ,YAAY;AAE9C,OAAO,eAAeC,8BAA8BA,CAACC,IAAc,EAAE;EACnE;EACA,IAAI,CAAC,MAAMC,OAAO,CAACC,GAAG,CAACF,IAAI,CAACG,GAAG,CAAEC,GAAG,IAAKP,aAAa,CAACQ,YAAY,CAACD,GAAG,CAAC,CAAC,CAAC,EAAEE,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC1F,MAAMC,8BAA8B,CAAC,CAAC;EACxC;AACF;AAEA,eAAeA,8BAA8BA,CAAA,EAAG;EAC9C,MAAM;IAAEC;EAAuB,CAAC,GAAGZ,kBAAkB,CAACa,WAAW;EAEjE,MAAMC,OAAO,GAAG,MAAMd,kBAAkB,CAACe,KAAK,CAACH,sBAAsB,CAAC;EAEtE,IAAI,CAACE,OAAO,EAAE;IACZ,IAAI,CAACE,6BAA6B,CAAC,CAAC,EAAE;MACpC,MAAMC,MAAM,GAAG,MAAMjB,kBAAkB,CAACkB,OAAO,CAACN,sBAAsB,CAAC;MACvE,IAAIK,MAAM,KAAKjB,kBAAkB,CAACmB,OAAO,CAACC,OAAO,EAAE;QACjD,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;MACnD;IACF;EACF;AACF;AAEA,SAASL,6BAA6BA,CAAA,EAAG;EACvC,OAAOd,iBAAiB,CAAC,CAAC,IAAI,EAAE;AAClC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { checkAndroidPermissionsForUrls } from './android';
|
|
2
|
+
import { isAndroid } from './platform';
|
|
3
|
+
|
|
4
|
+
/** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */
|
|
5
|
+
export default async function checkPermissions(_ref) {
|
|
6
|
+
let {
|
|
7
|
+
url,
|
|
8
|
+
urls
|
|
9
|
+
} = _ref;
|
|
10
|
+
if (isAndroid()) {
|
|
11
|
+
if (url || urls) {
|
|
12
|
+
const normalizedUrls = urls ?? (url ? [url] : []);
|
|
13
|
+
await checkAndroidPermissionsForUrls(normalizedUrls);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=checkPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["checkAndroidPermissionsForUrls","isAndroid","checkPermissions","_ref","url","urls","normalizedUrls"],"sources":["checkPermissions.ts"],"sourcesContent":["import { ShareOptions } from '../types';\nimport { checkAndroidPermissionsForUrls } from './android';\nimport { isAndroid } from './platform';\n\n/** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */\nexport default async function checkPermissions({ url, urls }: Pick<ShareOptions, 'url' | 'urls'>) {\n if (isAndroid()) {\n if (url || urls) {\n const normalizedUrls = urls ?? (url ? [url] : []);\n await checkAndroidPermissionsForUrls(normalizedUrls);\n }\n }\n}\n"],"mappings":"AACA,SAASA,8BAA8B,QAAQ,WAAW;AAC1D,SAASC,SAAS,QAAQ,YAAY;;AAEtC;AACA,eAAe,eAAeC,gBAAgBA,CAAAC,IAAA,EAAoD;EAAA,IAAnD;IAAEC,GAAG;IAAEC;EAAyC,CAAC,GAAAF,IAAA;EAC9F,IAAIF,SAAS,CAAC,CAAC,EAAE;IACf,IAAIG,GAAG,IAAIC,IAAI,EAAE;MACf,MAAMC,cAAc,GAAGD,IAAI,KAAKD,GAAG,GAAG,CAACA,GAAG,CAAC,GAAG,EAAE,CAAC;MACjD,MAAMJ,8BAA8B,CAACM,cAAc,CAAC;IACtD;EACF;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isIOS } from './platform';
|
|
2
|
+
export function normalizeShareOpenOptions(_ref) {
|
|
3
|
+
let {
|
|
4
|
+
...options
|
|
5
|
+
} = _ref;
|
|
6
|
+
if (isIOS()) {
|
|
7
|
+
// Backward compatibility with { Share } from react-native
|
|
8
|
+
if (options.url && !options.urls) {
|
|
9
|
+
options.urls = [options.url];
|
|
10
|
+
delete options.url;
|
|
11
|
+
|
|
12
|
+
// Concern: I could be wrong but there seems to be an implicit association between url and filename in the native code.
|
|
13
|
+
// I don't understand object-c but it looks like we're using urls index to look up a filename. What happens if the length of urls doesn't match the length of filenames? Maybe we can throw an error.
|
|
14
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/1396/files#diff-2d42a82ccc4ec42d9bfea630535ec2b757bd7a90b96d33d5d5433da17f4bdf79R208
|
|
15
|
+
if (options.filename && !options.filenames) {
|
|
16
|
+
options.filenames = [options.filename];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return options;
|
|
21
|
+
}
|
|
22
|
+
export function normalizeSingleShareOptions(_ref2) {
|
|
23
|
+
let {
|
|
24
|
+
...options
|
|
25
|
+
} = _ref2;
|
|
26
|
+
if (options.url) options.urls = [options.url];
|
|
27
|
+
return options;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isIOS","normalizeShareOpenOptions","_ref","options","url","urls","filename","filenames","normalizeSingleShareOptions","_ref2"],"sources":["options.ts"],"sourcesContent":["import { ShareOptions, ShareSingleOptions } from '../types';\nimport { isIOS } from './platform';\n\nexport function normalizeShareOpenOptions({ ...options }: ShareOptions) {\n if (isIOS()) {\n // Backward compatibility with { Share } from react-native\n if (options.url && !options.urls) {\n options.urls = [options.url];\n delete options.url;\n\n // Concern: I could be wrong but there seems to be an implicit association between url and filename in the native code.\n // I don't understand object-c but it looks like we're using urls index to look up a filename. What happens if the length of urls doesn't match the length of filenames? Maybe we can throw an error.\n // Reference: https://github.com/react-native-share/react-native-share/pull/1396/files#diff-2d42a82ccc4ec42d9bfea630535ec2b757bd7a90b96d33d5d5433da17f4bdf79R208\n if (options.filename && !options.filenames) {\n options.filenames = [options.filename];\n }\n }\n }\n\n return options;\n}\n\nexport function normalizeSingleShareOptions({ ...options }: ShareSingleOptions) {\n if (options.url) options.urls = [options.url];\n return options;\n}\n"],"mappings":"AACA,SAASA,KAAK,QAAQ,YAAY;AAElC,OAAO,SAASC,yBAAyBA,CAAAC,IAAA,EAA+B;EAAA,IAA9B;IAAE,GAAGC;EAAsB,CAAC,GAAAD,IAAA;EACpE,IAAIF,KAAK,CAAC,CAAC,EAAE;IACX;IACA,IAAIG,OAAO,CAACC,GAAG,IAAI,CAACD,OAAO,CAACE,IAAI,EAAE;MAChCF,OAAO,CAACE,IAAI,GAAG,CAACF,OAAO,CAACC,GAAG,CAAC;MAC5B,OAAOD,OAAO,CAACC,GAAG;;MAElB;MACA;MACA;MACA,IAAID,OAAO,CAACG,QAAQ,IAAI,CAACH,OAAO,CAACI,SAAS,EAAE;QAC1CJ,OAAO,CAACI,SAAS,GAAG,CAACJ,OAAO,CAACG,QAAQ,CAAC;MACxC;IACF;EACF;EAEA,OAAOH,OAAO;AAChB;AAEA,OAAO,SAASK,2BAA2BA,CAAAC,KAAA,EAAqC;EAAA,IAApC;IAAE,GAAGN;EAA4B,CAAC,GAAAM,KAAA;EAC5E,IAAIN,OAAO,CAACC,GAAG,EAAED,OAAO,CAACE,IAAI,GAAG,CAACF,OAAO,CAACC,GAAG,CAAC;EAC7C,OAAOD,OAAO;AAChB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
export function isIOS() {
|
|
3
|
+
return 'ios' === Platform.OS;
|
|
4
|
+
}
|
|
5
|
+
export function isAndroid() {
|
|
6
|
+
return 'android' === Platform.OS;
|
|
7
|
+
}
|
|
8
|
+
export function getAndroidVersion() {
|
|
9
|
+
const version = Platform.Version;
|
|
10
|
+
return typeof version === 'string' ? parseInt(version, 10) : version;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","isIOS","OS","isAndroid","getAndroidVersion","version","Version","parseInt"],"sources":["platform.ts"],"sourcesContent":["import { Platform } from 'react-native';\n\nexport function isIOS() {\n return 'ios' === Platform.OS;\n}\n\nexport function isAndroid() {\n return 'android' === Platform.OS;\n}\n\nexport function getAndroidVersion() {\n const version = Platform.Version;\n return typeof version === 'string' ? parseInt(version, 10) : version;\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,SAASC,KAAKA,CAAA,EAAG;EACtB,OAAO,KAAK,KAAKD,QAAQ,CAACE,EAAE;AAC9B;AAEA,OAAO,SAASC,SAASA,CAAA,EAAG;EAC1B,OAAO,SAAS,KAAKH,QAAQ,CAACE,EAAE;AAClC;AAEA,OAAO,SAASE,iBAAiBA,CAAA,EAAG;EAClC,MAAMC,OAAO,GAAGL,QAAQ,CAACM,OAAO;EAChC,OAAO,OAAOD,OAAO,KAAK,QAAQ,GAAGE,QAAQ,CAACF,OAAO,EAAE,EAAE,CAAC,GAAGA,OAAO;AACtE"}
|
package/lib/module/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { Platform } from 'react-native';
|
|
2
1
|
import NativeRNShare from '../codegenSpec/NativeRNShare';
|
|
3
2
|
import Overlay from './components/Overlay';
|
|
4
3
|
import Sheet from './components/Sheet';
|
|
5
4
|
import Button from './components/Button';
|
|
6
5
|
import ShareSheet from './components/ShareSheet';
|
|
7
|
-
import
|
|
6
|
+
import checkPermissions from './helpers/checkPermissions';
|
|
8
7
|
import { Social, ShareAsset } from './types';
|
|
8
|
+
import { isAndroid, isIOS } from './helpers/platform';
|
|
9
|
+
import { normalizeShareOpenOptions, normalizeSingleShareOptions } from './helpers/options';
|
|
9
10
|
const RNShare = {
|
|
10
11
|
Button,
|
|
11
12
|
ShareSheet,
|
|
@@ -30,75 +31,41 @@ const RNShare = {
|
|
|
30
31
|
SNAPCHAT: NativeRNShare.getConstants().SNAPCHAT || Social.Snapchat,
|
|
31
32
|
VIBER: NativeRNShare.getConstants().VIBER || Social.Viber
|
|
32
33
|
},
|
|
33
|
-
open(options) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
delete options.url;
|
|
40
|
-
options.urls = [url];
|
|
41
|
-
if (options.filename && !options.filenames) {
|
|
42
|
-
options.filenames = [options.filename];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
NativeRNShare.open(options).then(ret => {
|
|
46
|
-
if (ret.success) {
|
|
47
|
-
return resolve({
|
|
48
|
-
success: ret.success,
|
|
49
|
-
message: ret.message
|
|
50
|
-
});
|
|
51
|
-
} else if (options.failOnCancel === false) {
|
|
52
|
-
return resolve({
|
|
53
|
-
dismissedAction: true,
|
|
54
|
-
success: ret.success,
|
|
55
|
-
message: ret.message
|
|
56
|
-
});
|
|
57
|
-
} else {
|
|
58
|
-
reject(new Error('User did not share'));
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}).catch(e => reject(e));
|
|
62
|
-
});
|
|
63
|
-
},
|
|
64
|
-
shareSingle(options) {
|
|
65
|
-
if (Platform.OS === 'ios' || Platform.OS === 'android') {
|
|
66
|
-
return new Promise((resolve, reject) => {
|
|
67
|
-
requireAndAskPermissions(options).then(() => {
|
|
68
|
-
if (options.url) {
|
|
69
|
-
options.urls = [options.url];
|
|
70
|
-
}
|
|
71
|
-
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
72
|
-
return reject({
|
|
73
|
-
success: false,
|
|
74
|
-
message: 'Instagram Story share requires an appId based on Meta policy.'
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
NativeRNShare.shareSingle(options).then(ret => {
|
|
78
|
-
return resolve({
|
|
79
|
-
success: Boolean(ret.success),
|
|
80
|
-
message: ret.message
|
|
81
|
-
});
|
|
82
|
-
}).catch(e => reject(e));
|
|
83
|
-
}).catch(e => reject(e));
|
|
84
|
-
});
|
|
85
|
-
} else {
|
|
86
|
-
throw new Error('Not implemented');
|
|
34
|
+
async open(options) {
|
|
35
|
+
await checkPermissions(options);
|
|
36
|
+
options = normalizeShareOpenOptions(options);
|
|
37
|
+
const result = await NativeRNShare.open(options);
|
|
38
|
+
if (!result.success && options.failOnCancel === false) {
|
|
39
|
+
throw new Error('User did not share');
|
|
87
40
|
}
|
|
41
|
+
return result;
|
|
88
42
|
},
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return resolve({
|
|
94
|
-
isInstalled,
|
|
95
|
-
message: 'Package is Installed'
|
|
96
|
-
});
|
|
97
|
-
}).catch(e => reject(e));
|
|
98
|
-
});
|
|
99
|
-
} else {
|
|
100
|
-
throw new Error('Not implemented');
|
|
43
|
+
async shareSingle(options) {
|
|
44
|
+
if (!isAndroid() && !isIOS()) throw new Error('Not implemented');
|
|
45
|
+
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
46
|
+
throw new Error('To share to Instagram Stories you need to provide appId');
|
|
101
47
|
}
|
|
48
|
+
await checkPermissions(options);
|
|
49
|
+
options = normalizeSingleShareOptions(options);
|
|
50
|
+
const {
|
|
51
|
+
success,
|
|
52
|
+
message
|
|
53
|
+
} = await NativeRNShare.shareSingle(options);
|
|
54
|
+
const result = {
|
|
55
|
+
// Concern: Why do we need to covert success to boolean? A comment would be insightful
|
|
56
|
+
success: Boolean(success),
|
|
57
|
+
message
|
|
58
|
+
};
|
|
59
|
+
return result;
|
|
60
|
+
},
|
|
61
|
+
async isPackageInstalled(packageName) {
|
|
62
|
+
if (!isAndroid()) throw new Error('Not implemented');
|
|
63
|
+
const isInstalled = await NativeRNShare.isPackageInstalled(packageName);
|
|
64
|
+
const result = {
|
|
65
|
+
isInstalled,
|
|
66
|
+
message: 'Package is Installed'
|
|
67
|
+
};
|
|
68
|
+
return result;
|
|
102
69
|
}
|
|
103
70
|
};
|
|
104
71
|
export { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","NativeRNShare","Overlay","Sheet","Button","ShareSheet","requireAndAskPermissions","Social","ShareAsset","RNShare","FACEBOOK","getConstants","Facebook","FACEBOOK_STORIES","FACEBOOKSTORIES","FacebookStories","PAGESMANAGER","Pagesmanager","TWITTER","Twitter","WHATSAPP","Whatsapp","WHATSAPPBUSINESS","Whatsappbusiness","INSTAGRAM","Instagram","INSTAGRAM_STORIES","INSTAGRAMSTORIES","InstagramStories","GOOGLEPLUS","Googleplus","EMAIL","Email","PINTEREST","Pinterest","LINKEDIN","Linkedin","SMS","Sms","TELEGRAM","Telegram","MESSENGER","Messenger","SNAPCHAT","Snapchat","VIBER","Viber","open","options","Promise","resolve","reject","then","OS","url","urls","filename","filenames","ret","success","message","failOnCancel","dismissedAction","Error","catch","e","shareSingle","social","appId","Boolean","isPackageInstalled","packageName","isInstalled"],"sources":["index.tsx"],"sourcesContent":["import { Platform } from 'react-native';\n\nimport NativeRNShare from '../codegenSpec/NativeRNShare';\n\nimport Overlay from './components/Overlay';\nimport Sheet from './components/Sheet';\nimport Button from './components/Button';\nimport ShareSheet from './components/ShareSheet';\nimport requireAndAskPermissions from './helpers/requireAndAskPermissions';\nimport {\n Social,\n IsPackageInstalledResult,\n ActivityType,\n ShareOpenResult,\n ShareAsset,\n ShareOptions,\n ShareSingleOptions,\n ShareSingleResult,\n} from './types';\n\nconst RNShare = {\n Button,\n ShareSheet,\n Overlay,\n Sheet,\n\n Social: {\n FACEBOOK: NativeRNShare.getConstants().FACEBOOK || Social.Facebook,\n FACEBOOK_STORIES: NativeRNShare.getConstants().FACEBOOKSTORIES || Social.FacebookStories,\n PAGESMANAGER: NativeRNShare.getConstants().PAGESMANAGER || Social.Pagesmanager,\n TWITTER: NativeRNShare.getConstants().TWITTER || Social.Twitter,\n WHATSAPP: NativeRNShare.getConstants().WHATSAPP || Social.Whatsapp,\n WHATSAPPBUSINESS: NativeRNShare.getConstants().WHATSAPPBUSINESS || Social.Whatsappbusiness,\n INSTAGRAM: NativeRNShare.getConstants().INSTAGRAM || Social.Instagram,\n INSTAGRAM_STORIES: NativeRNShare.getConstants().INSTAGRAMSTORIES || Social.InstagramStories,\n GOOGLEPLUS: NativeRNShare.getConstants().GOOGLEPLUS || Social.Googleplus,\n EMAIL: NativeRNShare.getConstants().EMAIL || Social.Email,\n PINTEREST: NativeRNShare.getConstants().PINTEREST || Social.Pinterest,\n LINKEDIN: NativeRNShare.getConstants().LINKEDIN || Social.Linkedin,\n SMS: NativeRNShare.getConstants().SMS || Social.Sms,\n TELEGRAM: NativeRNShare.getConstants().TELEGRAM || Social.Telegram,\n MESSENGER: NativeRNShare.getConstants().MESSENGER || Social.Messenger,\n SNAPCHAT: NativeRNShare.getConstants().SNAPCHAT || Social.Snapchat,\n VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,\n },\n\n open(options: ShareOptions): Promise<ShareOpenResult | never> {\n return new Promise((resolve, reject) => {\n requireAndAskPermissions(options)\n .then(() => {\n if (Platform.OS === 'ios' && options.url && !options.urls) {\n // Backward compatibility with { Share } from react-native\n const url = options.url;\n delete options.url;\n\n options.urls = [url];\n\n if (options.filename && !options.filenames) {\n options.filenames = [options.filename];\n }\n }\n NativeRNShare.open(options).then((ret: { success: boolean; message: string }) => {\n if (ret.success) {\n return resolve({\n success: ret.success,\n message: ret.message,\n });\n } else if (options.failOnCancel === false) {\n return resolve({\n dismissedAction: true,\n success: ret.success,\n message: ret.message,\n });\n } else {\n reject(new Error('User did not share'));\n }\n });\n })\n .catch((e: unknown) => reject(e));\n });\n },\n\n shareSingle(options: ShareSingleOptions): Promise<ShareSingleResult | never> {\n if (Platform.OS === 'ios' || Platform.OS === 'android') {\n return new Promise((resolve, reject) => {\n requireAndAskPermissions(options)\n .then(() => {\n if (options.url) {\n options.urls = [options.url];\n }\n\n if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {\n return reject({\n success: false,\n message: 'Instagram Story share requires an appId based on Meta policy.',\n });\n }\n NativeRNShare.shareSingle(options)\n .then((ret: { success: boolean; message: string }) => {\n return resolve({\n success: Boolean(ret.success),\n message: ret.message,\n });\n })\n .catch((e: unknown) => reject(e));\n })\n .catch((e: unknown) => reject(e));\n });\n } else {\n throw new Error('Not implemented');\n }\n },\n\n isPackageInstalled(packageName: string): Promise<IsPackageInstalledResult | never> {\n if (Platform.OS === 'android') {\n return new Promise((resolve, reject) => {\n NativeRNShare.isPackageInstalled(packageName)\n .then((isInstalled: boolean) => {\n return resolve({\n isInstalled,\n message: 'Package is Installed',\n });\n })\n .catch((e: unknown) => reject(e));\n });\n } else {\n throw new Error('Not implemented');\n }\n },\n} as const;\n\nexport { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };\nexport type { ShareSingleOptions, ShareOptions, ActivityType, IsPackageInstalledResult };\nexport type { OverlayProps } from './components/Overlay';\nexport type { SheetProps } from './components/Sheet';\nexport type { ButtonProps } from './components/Button';\nexport type { ShareSheetProps } from './components/ShareSheet';\nexport default RNShare;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["NativeRNShare","Overlay","Sheet","Button","ShareSheet","checkPermissions","Social","ShareAsset","isAndroid","isIOS","normalizeShareOpenOptions","normalizeSingleShareOptions","RNShare","FACEBOOK","getConstants","Facebook","FACEBOOK_STORIES","FACEBOOKSTORIES","FacebookStories","PAGESMANAGER","Pagesmanager","TWITTER","Twitter","WHATSAPP","Whatsapp","WHATSAPPBUSINESS","Whatsappbusiness","INSTAGRAM","Instagram","INSTAGRAM_STORIES","INSTAGRAMSTORIES","InstagramStories","GOOGLEPLUS","Googleplus","EMAIL","Email","PINTEREST","Pinterest","LINKEDIN","Linkedin","SMS","Sms","TELEGRAM","Telegram","MESSENGER","Messenger","SNAPCHAT","Snapchat","VIBER","Viber","open","options","result","success","failOnCancel","Error","shareSingle","social","appId","message","Boolean","isPackageInstalled","packageName","isInstalled"],"sources":["index.tsx"],"sourcesContent":["import NativeRNShare from '../codegenSpec/NativeRNShare';\n\nimport Overlay from './components/Overlay';\nimport Sheet from './components/Sheet';\nimport Button from './components/Button';\nimport ShareSheet from './components/ShareSheet';\nimport checkPermissions from './helpers/checkPermissions';\nimport {\n Social,\n IsPackageInstalledResult,\n ActivityType,\n ShareAsset,\n ShareOpenResult,\n ShareOptions,\n ShareSingleOptions,\n ShareSingleResult,\n} from './types';\nimport { isAndroid, isIOS } from './helpers/platform';\nimport { normalizeShareOpenOptions, normalizeSingleShareOptions } from './helpers/options';\n\nconst RNShare = {\n Button,\n ShareSheet,\n Overlay,\n Sheet,\n\n Social: {\n FACEBOOK: NativeRNShare.getConstants().FACEBOOK || Social.Facebook,\n FACEBOOK_STORIES: NativeRNShare.getConstants().FACEBOOKSTORIES || Social.FacebookStories,\n PAGESMANAGER: NativeRNShare.getConstants().PAGESMANAGER || Social.Pagesmanager,\n TWITTER: NativeRNShare.getConstants().TWITTER || Social.Twitter,\n WHATSAPP: NativeRNShare.getConstants().WHATSAPP || Social.Whatsapp,\n WHATSAPPBUSINESS: NativeRNShare.getConstants().WHATSAPPBUSINESS || Social.Whatsappbusiness,\n INSTAGRAM: NativeRNShare.getConstants().INSTAGRAM || Social.Instagram,\n INSTAGRAM_STORIES: NativeRNShare.getConstants().INSTAGRAMSTORIES || Social.InstagramStories,\n GOOGLEPLUS: NativeRNShare.getConstants().GOOGLEPLUS || Social.Googleplus,\n EMAIL: NativeRNShare.getConstants().EMAIL || Social.Email,\n PINTEREST: NativeRNShare.getConstants().PINTEREST || Social.Pinterest,\n LINKEDIN: NativeRNShare.getConstants().LINKEDIN || Social.Linkedin,\n SMS: NativeRNShare.getConstants().SMS || Social.Sms,\n TELEGRAM: NativeRNShare.getConstants().TELEGRAM || Social.Telegram,\n MESSENGER: NativeRNShare.getConstants().MESSENGER || Social.Messenger,\n SNAPCHAT: NativeRNShare.getConstants().SNAPCHAT || Social.Snapchat,\n VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,\n },\n\n async open(options: ShareOptions) {\n await checkPermissions(options);\n\n options = normalizeShareOpenOptions(options);\n\n const result: ShareOpenResult = await NativeRNShare.open(options);\n\n if (!result.success && options.failOnCancel === false) {\n throw new Error('User did not share');\n }\n\n return result;\n },\n\n async shareSingle(options: ShareSingleOptions) {\n if (!isAndroid() && !isIOS()) throw new Error('Not implemented');\n\n if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {\n throw new Error('To share to Instagram Stories you need to provide appId');\n }\n\n await checkPermissions(options);\n\n options = normalizeSingleShareOptions(options);\n\n const { success, message } = await NativeRNShare.shareSingle(options);\n\n const result: ShareSingleResult = {\n // Concern: Why do we need to covert success to boolean? A comment would be insightful\n success: Boolean(success),\n message,\n };\n\n return result;\n },\n\n async isPackageInstalled(packageName: string) {\n if (!isAndroid()) throw new Error('Not implemented');\n\n const isInstalled = await NativeRNShare.isPackageInstalled(packageName);\n\n const result: IsPackageInstalledResult = {\n isInstalled,\n message: 'Package is Installed',\n };\n\n return result;\n },\n} as const;\n\nexport { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };\nexport type { ShareSingleOptions, ShareOptions, ActivityType, IsPackageInstalledResult };\nexport type { OverlayProps } from './components/Overlay';\nexport type { SheetProps } from './components/Sheet';\nexport type { ButtonProps } from './components/Button';\nexport type { ShareSheetProps } from './components/ShareSheet';\nexport default RNShare;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function checkAndroidPermissionsForUrls(urls: string[]): Promise<void>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ShareOptions, ShareSingleOptions } from '../types';
|
|
2
|
+
export declare function normalizeShareOpenOptions({ ...options }: ShareOptions): {
|
|
3
|
+
message?: string | undefined;
|
|
4
|
+
title?: string | undefined;
|
|
5
|
+
url?: string | undefined;
|
|
6
|
+
urls?: string[] | undefined;
|
|
7
|
+
type?: string | undefined;
|
|
8
|
+
subject?: string | undefined;
|
|
9
|
+
email?: string | undefined;
|
|
10
|
+
recipient?: string | undefined;
|
|
11
|
+
excludedActivityTypes?: string[] | import("../types").ActivityType[] | undefined;
|
|
12
|
+
failOnCancel?: boolean | undefined;
|
|
13
|
+
showAppsToView?: boolean | undefined;
|
|
14
|
+
filename?: string | undefined;
|
|
15
|
+
filenames?: string[] | undefined;
|
|
16
|
+
saveToFiles?: boolean | undefined;
|
|
17
|
+
activityItemSources?: import("../types").ActivityItemSource[] | undefined;
|
|
18
|
+
isNewTask?: boolean | undefined;
|
|
19
|
+
};
|
|
20
|
+
export declare function normalizeSingleShareOptions({ ...options }: ShareSingleOptions): {
|
|
21
|
+
appId?: string | undefined;
|
|
22
|
+
urls?: string[] | undefined;
|
|
23
|
+
url?: string | undefined;
|
|
24
|
+
type?: string | undefined;
|
|
25
|
+
filename?: string | undefined;
|
|
26
|
+
message?: string | undefined;
|
|
27
|
+
title?: string | undefined;
|
|
28
|
+
subject?: string | undefined;
|
|
29
|
+
email?: string | undefined;
|
|
30
|
+
recipient?: string | undefined;
|
|
31
|
+
social: import("../types").Social.Facebook | import("../types").Social.Pagesmanager | import("../types").Social.Twitter | import("../types").Social.Whatsapp | import("../types").Social.Whatsappbusiness | import("../types").Social.Instagram | import("../types").Social.Googleplus | import("../types").Social.Email | import("../types").Social.Pinterest | import("../types").Social.Linkedin | import("../types").Social.Sms | import("../types").Social.Telegram | import("../types").Social.Snapchat | import("../types").Social.Messenger | import("../types").Social.Viber;
|
|
32
|
+
forceDialog?: boolean | undefined;
|
|
33
|
+
} | {
|
|
34
|
+
social: import("../types").Social.InstagramStories;
|
|
35
|
+
appId: string;
|
|
36
|
+
backgroundImage?: string | undefined;
|
|
37
|
+
stickerImage?: string | undefined;
|
|
38
|
+
backgroundBottomColor?: string | undefined;
|
|
39
|
+
backgroundTopColor?: string | undefined;
|
|
40
|
+
attributionURL?: string | undefined;
|
|
41
|
+
backgroundVideo?: string | undefined;
|
|
42
|
+
title?: string | undefined;
|
|
43
|
+
type?: string | undefined;
|
|
44
|
+
url?: string | undefined;
|
|
45
|
+
message?: string | undefined;
|
|
46
|
+
urls?: string[] | undefined;
|
|
47
|
+
filename?: string | undefined;
|
|
48
|
+
subject?: string | undefined;
|
|
49
|
+
email?: string | undefined;
|
|
50
|
+
recipient?: string | undefined;
|
|
51
|
+
forceDialog?: boolean | undefined;
|
|
52
|
+
} | {
|
|
53
|
+
social: import("../types").Social.FacebookStories;
|
|
54
|
+
appId: string;
|
|
55
|
+
backgroundImage?: string | undefined;
|
|
56
|
+
stickerImage?: string | undefined;
|
|
57
|
+
backgroundBottomColor?: string | undefined;
|
|
58
|
+
backgroundTopColor?: string | undefined;
|
|
59
|
+
attributionURL?: string | undefined;
|
|
60
|
+
backgroundVideo?: string | undefined;
|
|
61
|
+
title?: string | undefined;
|
|
62
|
+
type?: string | undefined;
|
|
63
|
+
url?: string | undefined;
|
|
64
|
+
message?: string | undefined;
|
|
65
|
+
urls?: string[] | undefined;
|
|
66
|
+
filename?: string | undefined;
|
|
67
|
+
subject?: string | undefined;
|
|
68
|
+
email?: string | undefined;
|
|
69
|
+
recipient?: string | undefined;
|
|
70
|
+
forceDialog?: boolean | undefined;
|
|
71
|
+
};
|
|
@@ -3,7 +3,7 @@ import Overlay from './components/Overlay';
|
|
|
3
3
|
import Sheet from './components/Sheet';
|
|
4
4
|
import Button from './components/Button';
|
|
5
5
|
import ShareSheet from './components/ShareSheet';
|
|
6
|
-
import { Social, IsPackageInstalledResult, ActivityType,
|
|
6
|
+
import { Social, IsPackageInstalledResult, ActivityType, ShareAsset, ShareOpenResult, ShareOptions, ShareSingleOptions, ShareSingleResult } from './types';
|
|
7
7
|
declare const RNShare: {
|
|
8
8
|
readonly Button: import("react").FC<import("./components/Button").ButtonProps>;
|
|
9
9
|
readonly ShareSheet: import("react").FC<import("react").PropsWithChildren<import("./components/ShareSheet").ShareSheetProps>>;
|
|
@@ -28,9 +28,9 @@ declare const RNShare: {
|
|
|
28
28
|
readonly SNAPCHAT: string;
|
|
29
29
|
readonly VIBER: string;
|
|
30
30
|
};
|
|
31
|
-
readonly open: (options: ShareOptions) => Promise<ShareOpenResult
|
|
32
|
-
readonly shareSingle: (options: ShareSingleOptions) => Promise<ShareSingleResult
|
|
33
|
-
readonly isPackageInstalled: (packageName: string) => Promise<IsPackageInstalledResult
|
|
31
|
+
readonly open: (options: ShareOptions) => Promise<ShareOpenResult>;
|
|
32
|
+
readonly shareSingle: (options: ShareSingleOptions) => Promise<ShareSingleResult>;
|
|
33
|
+
readonly isPackageInstalled: (packageName: string) => Promise<IsPackageInstalledResult>;
|
|
34
34
|
};
|
|
35
35
|
export { Overlay, Sheet, Button, ShareSheet, ShareAsset, Social };
|
|
36
36
|
export type { ShareSingleOptions, ShareOptions, ActivityType, IsPackageInstalledResult };
|
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PermissionsAndroid } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import NativeRNShare from '../../codegenSpec/NativeRNShare';
|
|
4
|
+
import { getAndroidVersion } from './platform';
|
|
5
|
+
|
|
6
|
+
export async function checkAndroidPermissionsForUrls(urls: string[]) {
|
|
7
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/871
|
|
8
|
+
if ((await Promise.all(urls.map((url) => NativeRNShare.isBase64File(url)))).includes(true)) {
|
|
9
|
+
await checkExternalStoragePermission();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async function checkExternalStoragePermission() {
|
|
14
|
+
const { WRITE_EXTERNAL_STORAGE } = PermissionsAndroid.PERMISSIONS;
|
|
15
|
+
|
|
16
|
+
const granted = await PermissionsAndroid.check(WRITE_EXTERNAL_STORAGE);
|
|
17
|
+
|
|
18
|
+
if (!granted) {
|
|
19
|
+
if (!isAndroidVersionAtLeastKitKat()) {
|
|
20
|
+
const result = await PermissionsAndroid.request(WRITE_EXTERNAL_STORAGE);
|
|
21
|
+
if (result !== PermissionsAndroid.RESULTS.GRANTED) {
|
|
22
|
+
throw new Error('Write Permission not available');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function isAndroidVersionAtLeastKitKat() {
|
|
29
|
+
return getAndroidVersion() >= 19;
|
|
30
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ShareOptions } from '../types';
|
|
2
|
+
import { checkAndroidPermissionsForUrls } from './android';
|
|
3
|
+
import { isAndroid } from './platform';
|
|
4
|
+
|
|
5
|
+
/** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */
|
|
6
|
+
export default async function checkPermissions({ url, urls }: Pick<ShareOptions, 'url' | 'urls'>) {
|
|
7
|
+
if (isAndroid()) {
|
|
8
|
+
if (url || urls) {
|
|
9
|
+
const normalizedUrls = urls ?? (url ? [url] : []);
|
|
10
|
+
await checkAndroidPermissionsForUrls(normalizedUrls);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ShareOptions, ShareSingleOptions } from '../types';
|
|
2
|
+
import { isIOS } from './platform';
|
|
3
|
+
|
|
4
|
+
export function normalizeShareOpenOptions({ ...options }: ShareOptions) {
|
|
5
|
+
if (isIOS()) {
|
|
6
|
+
// Backward compatibility with { Share } from react-native
|
|
7
|
+
if (options.url && !options.urls) {
|
|
8
|
+
options.urls = [options.url];
|
|
9
|
+
delete options.url;
|
|
10
|
+
|
|
11
|
+
// Concern: I could be wrong but there seems to be an implicit association between url and filename in the native code.
|
|
12
|
+
// I don't understand object-c but it looks like we're using urls index to look up a filename. What happens if the length of urls doesn't match the length of filenames? Maybe we can throw an error.
|
|
13
|
+
// Reference: https://github.com/react-native-share/react-native-share/pull/1396/files#diff-2d42a82ccc4ec42d9bfea630535ec2b757bd7a90b96d33d5d5433da17f4bdf79R208
|
|
14
|
+
if (options.filename && !options.filenames) {
|
|
15
|
+
options.filenames = [options.filename];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return options;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function normalizeSingleShareOptions({ ...options }: ShareSingleOptions) {
|
|
24
|
+
if (options.url) options.urls = [options.url];
|
|
25
|
+
return options;
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
export function isIOS() {
|
|
4
|
+
return 'ios' === Platform.OS;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function isAndroid() {
|
|
8
|
+
return 'android' === Platform.OS;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getAndroidVersion() {
|
|
12
|
+
const version = Platform.Version;
|
|
13
|
+
return typeof version === 'string' ? parseInt(version, 10) : version;
|
|
14
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Platform } from 'react-native';
|
|
2
|
-
|
|
3
1
|
import NativeRNShare from '../codegenSpec/NativeRNShare';
|
|
4
2
|
|
|
5
3
|
import Overlay from './components/Overlay';
|
|
6
4
|
import Sheet from './components/Sheet';
|
|
7
5
|
import Button from './components/Button';
|
|
8
6
|
import ShareSheet from './components/ShareSheet';
|
|
9
|
-
import
|
|
7
|
+
import checkPermissions from './helpers/checkPermissions';
|
|
10
8
|
import {
|
|
11
9
|
Social,
|
|
12
10
|
IsPackageInstalledResult,
|
|
13
11
|
ActivityType,
|
|
14
|
-
ShareOpenResult,
|
|
15
12
|
ShareAsset,
|
|
13
|
+
ShareOpenResult,
|
|
16
14
|
ShareOptions,
|
|
17
15
|
ShareSingleOptions,
|
|
18
16
|
ShareSingleResult,
|
|
19
17
|
} from './types';
|
|
18
|
+
import { isAndroid, isIOS } from './helpers/platform';
|
|
19
|
+
import { normalizeShareOpenOptions, normalizeSingleShareOptions } from './helpers/options';
|
|
20
20
|
|
|
21
21
|
const RNShare = {
|
|
22
22
|
Button,
|
|
@@ -44,88 +44,53 @@ const RNShare = {
|
|
|
44
44
|
VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,
|
|
45
45
|
},
|
|
46
46
|
|
|
47
|
-
open(options: ShareOptions)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (Platform.OS === 'ios' && options.url && !options.urls) {
|
|
52
|
-
// Backward compatibility with { Share } from react-native
|
|
53
|
-
const url = options.url;
|
|
54
|
-
delete options.url;
|
|
55
|
-
|
|
56
|
-
options.urls = [url];
|
|
57
|
-
|
|
58
|
-
if (options.filename && !options.filenames) {
|
|
59
|
-
options.filenames = [options.filename];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
NativeRNShare.open(options).then((ret: { success: boolean; message: string }) => {
|
|
63
|
-
if (ret.success) {
|
|
64
|
-
return resolve({
|
|
65
|
-
success: ret.success,
|
|
66
|
-
message: ret.message,
|
|
67
|
-
});
|
|
68
|
-
} else if (options.failOnCancel === false) {
|
|
69
|
-
return resolve({
|
|
70
|
-
dismissedAction: true,
|
|
71
|
-
success: ret.success,
|
|
72
|
-
message: ret.message,
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
reject(new Error('User did not share'));
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
})
|
|
79
|
-
.catch((e: unknown) => reject(e));
|
|
80
|
-
});
|
|
81
|
-
},
|
|
47
|
+
async open(options: ShareOptions) {
|
|
48
|
+
await checkPermissions(options);
|
|
49
|
+
|
|
50
|
+
options = normalizeShareOpenOptions(options);
|
|
82
51
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
.then(() => {
|
|
88
|
-
if (options.url) {
|
|
89
|
-
options.urls = [options.url];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
93
|
-
return reject({
|
|
94
|
-
success: false,
|
|
95
|
-
message: 'Instagram Story share requires an appId based on Meta policy.',
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
NativeRNShare.shareSingle(options)
|
|
99
|
-
.then((ret: { success: boolean; message: string }) => {
|
|
100
|
-
return resolve({
|
|
101
|
-
success: Boolean(ret.success),
|
|
102
|
-
message: ret.message,
|
|
103
|
-
});
|
|
104
|
-
})
|
|
105
|
-
.catch((e: unknown) => reject(e));
|
|
106
|
-
})
|
|
107
|
-
.catch((e: unknown) => reject(e));
|
|
108
|
-
});
|
|
109
|
-
} else {
|
|
110
|
-
throw new Error('Not implemented');
|
|
52
|
+
const result: ShareOpenResult = await NativeRNShare.open(options);
|
|
53
|
+
|
|
54
|
+
if (!result.success && options.failOnCancel === false) {
|
|
55
|
+
throw new Error('User did not share');
|
|
111
56
|
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
112
59
|
},
|
|
113
60
|
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return resolve({
|
|
120
|
-
isInstalled,
|
|
121
|
-
message: 'Package is Installed',
|
|
122
|
-
});
|
|
123
|
-
})
|
|
124
|
-
.catch((e: unknown) => reject(e));
|
|
125
|
-
});
|
|
126
|
-
} else {
|
|
127
|
-
throw new Error('Not implemented');
|
|
61
|
+
async shareSingle(options: ShareSingleOptions) {
|
|
62
|
+
if (!isAndroid() && !isIOS()) throw new Error('Not implemented');
|
|
63
|
+
|
|
64
|
+
if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
|
|
65
|
+
throw new Error('To share to Instagram Stories you need to provide appId');
|
|
128
66
|
}
|
|
67
|
+
|
|
68
|
+
await checkPermissions(options);
|
|
69
|
+
|
|
70
|
+
options = normalizeSingleShareOptions(options);
|
|
71
|
+
|
|
72
|
+
const { success, message } = await NativeRNShare.shareSingle(options);
|
|
73
|
+
|
|
74
|
+
const result: ShareSingleResult = {
|
|
75
|
+
// Concern: Why do we need to covert success to boolean? A comment would be insightful
|
|
76
|
+
success: Boolean(success),
|
|
77
|
+
message,
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return result;
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
async isPackageInstalled(packageName: string) {
|
|
84
|
+
if (!isAndroid()) throw new Error('Not implemented');
|
|
85
|
+
|
|
86
|
+
const isInstalled = await NativeRNShare.isPackageInstalled(packageName);
|
|
87
|
+
|
|
88
|
+
const result: IsPackageInstalledResult = {
|
|
89
|
+
isInstalled,
|
|
90
|
+
message: 'Package is Installed',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return result;
|
|
129
94
|
},
|
|
130
95
|
} as const;
|
|
131
96
|
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _reactNative = require("react-native");
|
|
8
|
-
var _NativeRNShare = _interopRequireDefault(require("../../codegenSpec/NativeRNShare"));
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
const ANDROID_KIT_KAT_SDK_VERSION = 19;
|
|
11
|
-
const androidPermissionRequestRequired = (typeof _reactNative.Platform.Version === 'string' ? parseInt(_reactNative.Platform.Version, 10) : _reactNative.Platform.Version) < ANDROID_KIT_KAT_SDK_VERSION;
|
|
12
|
-
const requireAndAskPermissions = async options => {
|
|
13
|
-
if ((options.url || options.urls) && _reactNative.Platform.OS === 'android') {
|
|
14
|
-
const urls = options.urls || (options.url ? [options.url] : []);
|
|
15
|
-
try {
|
|
16
|
-
const resultArr = await Promise.all(urls.map(url => new Promise((resolve, reject) => {
|
|
17
|
-
_NativeRNShare.default.isBase64File(url).then(isBase64 => {
|
|
18
|
-
resolve(isBase64);
|
|
19
|
-
}).catch(error => {
|
|
20
|
-
reject(error);
|
|
21
|
-
});
|
|
22
|
-
})));
|
|
23
|
-
const requirePermission = resultArr.includes(true);
|
|
24
|
-
if (!requirePermission) {
|
|
25
|
-
return Promise.resolve(true);
|
|
26
|
-
}
|
|
27
|
-
const hasPermission = await _reactNative.PermissionsAndroid.check(_reactNative.PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
|
|
28
|
-
if (hasPermission) {
|
|
29
|
-
return Promise.resolve(true);
|
|
30
|
-
}
|
|
31
|
-
if (androidPermissionRequestRequired) {
|
|
32
|
-
const result = await _reactNative.PermissionsAndroid.request(_reactNative.PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
|
|
33
|
-
if (result === _reactNative.PermissionsAndroid.RESULTS.GRANTED) {
|
|
34
|
-
return Promise.resolve(true);
|
|
35
|
-
}
|
|
36
|
-
throw new Error('Write Permission not available');
|
|
37
|
-
}
|
|
38
|
-
} catch (e) {
|
|
39
|
-
return Promise.reject(e);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return Promise.resolve(true);
|
|
43
|
-
};
|
|
44
|
-
var _default = requireAndAskPermissions;
|
|
45
|
-
exports.default = _default;
|
|
46
|
-
//# sourceMappingURL=requireAndAskPermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeRNShare","_interopRequireDefault","obj","__esModule","default","ANDROID_KIT_KAT_SDK_VERSION","androidPermissionRequestRequired","Platform","Version","parseInt","requireAndAskPermissions","options","url","urls","OS","resultArr","Promise","all","map","resolve","reject","NativeRNShare","isBase64File","then","isBase64","catch","error","requirePermission","includes","hasPermission","PermissionsAndroid","check","PERMISSIONS","WRITE_EXTERNAL_STORAGE","result","request","RESULTS","GRANTED","Error","e","_default","exports"],"sources":["requireAndAskPermissions.ts"],"sourcesContent":["import { Platform, PermissionsAndroid } from 'react-native';\n\nimport NativeRNShare from '../../codegenSpec/NativeRNShare';\n\nimport { ShareOptions } from '../types';\n\nconst ANDROID_KIT_KAT_SDK_VERSION = 19;\nconst androidPermissionRequestRequired =\n (typeof Platform.Version === 'string' ? parseInt(Platform.Version, 10) : Platform.Version) <\n ANDROID_KIT_KAT_SDK_VERSION;\n\nconst requireAndAskPermissions = async (\n options: Pick<ShareOptions, 'url' | 'urls'>,\n): Promise<boolean | never> => {\n if ((options.url || options.urls) && Platform.OS === 'android') {\n const urls: string[] = options.urls || (options.url ? [options.url] : []);\n try {\n const resultArr = await Promise.all(\n urls.map(\n (url) =>\n new Promise((resolve, reject) => {\n NativeRNShare.isBase64File(url)\n .then((isBase64: boolean) => {\n resolve(isBase64);\n })\n .catch((error: Error) => {\n reject(error);\n });\n }),\n ),\n );\n\n const requirePermission = resultArr.includes(true);\n if (!requirePermission) {\n return Promise.resolve(true);\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n );\n if (hasPermission) {\n return Promise.resolve(true);\n }\n\n if (androidPermissionRequestRequired) {\n const result = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n );\n if (result === PermissionsAndroid.RESULTS.GRANTED) {\n return Promise.resolve(true);\n }\n throw new Error('Write Permission not available');\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n return Promise.resolve(true);\n};\n\nexport default requireAndAskPermissions;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA4D,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAI5D,MAAMG,2BAA2B,GAAG,EAAE;AACtC,MAAMC,gCAAgC,GACpC,CAAC,OAAOC,qBAAQ,CAACC,OAAO,KAAK,QAAQ,GAAGC,QAAQ,CAACF,qBAAQ,CAACC,OAAO,EAAE,EAAE,CAAC,GAAGD,qBAAQ,CAACC,OAAO,IACzFH,2BAA2B;AAE7B,MAAMK,wBAAwB,GAAG,MAC/BC,OAA2C,IACd;EAC7B,IAAI,CAACA,OAAO,CAACC,GAAG,IAAID,OAAO,CAACE,IAAI,KAAKN,qBAAQ,CAACO,EAAE,KAAK,SAAS,EAAE;IAC9D,MAAMD,IAAc,GAAGF,OAAO,CAACE,IAAI,KAAKF,OAAO,CAACC,GAAG,GAAG,CAACD,OAAO,CAACC,GAAG,CAAC,GAAG,EAAE,CAAC;IACzE,IAAI;MACF,MAAMG,SAAS,GAAG,MAAMC,OAAO,CAACC,GAAG,CACjCJ,IAAI,CAACK,GAAG,CACLN,GAAG,IACF,IAAII,OAAO,CAAC,CAACG,OAAO,EAAEC,MAAM,KAAK;QAC/BC,sBAAa,CAACC,YAAY,CAACV,GAAG,CAAC,CAC5BW,IAAI,CAAEC,QAAiB,IAAK;UAC3BL,OAAO,CAACK,QAAQ,CAAC;QACnB,CAAC,CAAC,CACDC,KAAK,CAAEC,KAAY,IAAK;UACvBN,MAAM,CAACM,KAAK,CAAC;QACf,CAAC,CAAC;MACN,CAAC,CACL,CACF,CAAC;MAED,MAAMC,iBAAiB,GAAGZ,SAAS,CAACa,QAAQ,CAAC,IAAI,CAAC;MAClD,IAAI,CAACD,iBAAiB,EAAE;QACtB,OAAOX,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;MAC9B;MACA,MAAMU,aAAa,GAAG,MAAMC,+BAAkB,CAACC,KAAK,CAClDD,+BAAkB,CAACE,WAAW,CAACC,sBACjC,CAAC;MACD,IAAIJ,aAAa,EAAE;QACjB,OAAOb,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;MAC9B;MAEA,IAAIb,gCAAgC,EAAE;QACpC,MAAM4B,MAAM,GAAG,MAAMJ,+BAAkB,CAACK,OAAO,CAC7CL,+BAAkB,CAACE,WAAW,CAACC,sBACjC,CAAC;QACD,IAAIC,MAAM,KAAKJ,+BAAkB,CAACM,OAAO,CAACC,OAAO,EAAE;UACjD,OAAOrB,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;QAC9B;QACA,MAAM,IAAImB,KAAK,CAAC,gCAAgC,CAAC;MACnD;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,OAAOvB,OAAO,CAACI,MAAM,CAACmB,CAAC,CAAC;IAC1B;EACF;EACA,OAAOvB,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;AAC9B,CAAC;AAAC,IAAAqB,QAAA,GAEa9B,wBAAwB;AAAA+B,OAAA,CAAArC,OAAA,GAAAoC,QAAA"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Platform, PermissionsAndroid } from 'react-native';
|
|
2
|
-
import NativeRNShare from '../../codegenSpec/NativeRNShare';
|
|
3
|
-
const ANDROID_KIT_KAT_SDK_VERSION = 19;
|
|
4
|
-
const androidPermissionRequestRequired = (typeof Platform.Version === 'string' ? parseInt(Platform.Version, 10) : Platform.Version) < ANDROID_KIT_KAT_SDK_VERSION;
|
|
5
|
-
const requireAndAskPermissions = async options => {
|
|
6
|
-
if ((options.url || options.urls) && Platform.OS === 'android') {
|
|
7
|
-
const urls = options.urls || (options.url ? [options.url] : []);
|
|
8
|
-
try {
|
|
9
|
-
const resultArr = await Promise.all(urls.map(url => new Promise((resolve, reject) => {
|
|
10
|
-
NativeRNShare.isBase64File(url).then(isBase64 => {
|
|
11
|
-
resolve(isBase64);
|
|
12
|
-
}).catch(error => {
|
|
13
|
-
reject(error);
|
|
14
|
-
});
|
|
15
|
-
})));
|
|
16
|
-
const requirePermission = resultArr.includes(true);
|
|
17
|
-
if (!requirePermission) {
|
|
18
|
-
return Promise.resolve(true);
|
|
19
|
-
}
|
|
20
|
-
const hasPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
|
|
21
|
-
if (hasPermission) {
|
|
22
|
-
return Promise.resolve(true);
|
|
23
|
-
}
|
|
24
|
-
if (androidPermissionRequestRequired) {
|
|
25
|
-
const result = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
|
|
26
|
-
if (result === PermissionsAndroid.RESULTS.GRANTED) {
|
|
27
|
-
return Promise.resolve(true);
|
|
28
|
-
}
|
|
29
|
-
throw new Error('Write Permission not available');
|
|
30
|
-
}
|
|
31
|
-
} catch (e) {
|
|
32
|
-
return Promise.reject(e);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return Promise.resolve(true);
|
|
36
|
-
};
|
|
37
|
-
export default requireAndAskPermissions;
|
|
38
|
-
//# sourceMappingURL=requireAndAskPermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","PermissionsAndroid","NativeRNShare","ANDROID_KIT_KAT_SDK_VERSION","androidPermissionRequestRequired","Version","parseInt","requireAndAskPermissions","options","url","urls","OS","resultArr","Promise","all","map","resolve","reject","isBase64File","then","isBase64","catch","error","requirePermission","includes","hasPermission","check","PERMISSIONS","WRITE_EXTERNAL_STORAGE","result","request","RESULTS","GRANTED","Error","e"],"sources":["requireAndAskPermissions.ts"],"sourcesContent":["import { Platform, PermissionsAndroid } from 'react-native';\n\nimport NativeRNShare from '../../codegenSpec/NativeRNShare';\n\nimport { ShareOptions } from '../types';\n\nconst ANDROID_KIT_KAT_SDK_VERSION = 19;\nconst androidPermissionRequestRequired =\n (typeof Platform.Version === 'string' ? parseInt(Platform.Version, 10) : Platform.Version) <\n ANDROID_KIT_KAT_SDK_VERSION;\n\nconst requireAndAskPermissions = async (\n options: Pick<ShareOptions, 'url' | 'urls'>,\n): Promise<boolean | never> => {\n if ((options.url || options.urls) && Platform.OS === 'android') {\n const urls: string[] = options.urls || (options.url ? [options.url] : []);\n try {\n const resultArr = await Promise.all(\n urls.map(\n (url) =>\n new Promise((resolve, reject) => {\n NativeRNShare.isBase64File(url)\n .then((isBase64: boolean) => {\n resolve(isBase64);\n })\n .catch((error: Error) => {\n reject(error);\n });\n }),\n ),\n );\n\n const requirePermission = resultArr.includes(true);\n if (!requirePermission) {\n return Promise.resolve(true);\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n );\n if (hasPermission) {\n return Promise.resolve(true);\n }\n\n if (androidPermissionRequestRequired) {\n const result = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n );\n if (result === PermissionsAndroid.RESULTS.GRANTED) {\n return Promise.resolve(true);\n }\n throw new Error('Write Permission not available');\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n return Promise.resolve(true);\n};\n\nexport default requireAndAskPermissions;\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;AAE3D,OAAOC,aAAa,MAAM,iCAAiC;AAI3D,MAAMC,2BAA2B,GAAG,EAAE;AACtC,MAAMC,gCAAgC,GACpC,CAAC,OAAOJ,QAAQ,CAACK,OAAO,KAAK,QAAQ,GAAGC,QAAQ,CAACN,QAAQ,CAACK,OAAO,EAAE,EAAE,CAAC,GAAGL,QAAQ,CAACK,OAAO,IACzFF,2BAA2B;AAE7B,MAAMI,wBAAwB,GAAG,MAC/BC,OAA2C,IACd;EAC7B,IAAI,CAACA,OAAO,CAACC,GAAG,IAAID,OAAO,CAACE,IAAI,KAAKV,QAAQ,CAACW,EAAE,KAAK,SAAS,EAAE;IAC9D,MAAMD,IAAc,GAAGF,OAAO,CAACE,IAAI,KAAKF,OAAO,CAACC,GAAG,GAAG,CAACD,OAAO,CAACC,GAAG,CAAC,GAAG,EAAE,CAAC;IACzE,IAAI;MACF,MAAMG,SAAS,GAAG,MAAMC,OAAO,CAACC,GAAG,CACjCJ,IAAI,CAACK,GAAG,CACLN,GAAG,IACF,IAAII,OAAO,CAAC,CAACG,OAAO,EAAEC,MAAM,KAAK;QAC/Bf,aAAa,CAACgB,YAAY,CAACT,GAAG,CAAC,CAC5BU,IAAI,CAAEC,QAAiB,IAAK;UAC3BJ,OAAO,CAACI,QAAQ,CAAC;QACnB,CAAC,CAAC,CACDC,KAAK,CAAEC,KAAY,IAAK;UACvBL,MAAM,CAACK,KAAK,CAAC;QACf,CAAC,CAAC;MACN,CAAC,CACL,CACF,CAAC;MAED,MAAMC,iBAAiB,GAAGX,SAAS,CAACY,QAAQ,CAAC,IAAI,CAAC;MAClD,IAAI,CAACD,iBAAiB,EAAE;QACtB,OAAOV,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;MAC9B;MACA,MAAMS,aAAa,GAAG,MAAMxB,kBAAkB,CAACyB,KAAK,CAClDzB,kBAAkB,CAAC0B,WAAW,CAACC,sBACjC,CAAC;MACD,IAAIH,aAAa,EAAE;QACjB,OAAOZ,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;MAC9B;MAEA,IAAIZ,gCAAgC,EAAE;QACpC,MAAMyB,MAAM,GAAG,MAAM5B,kBAAkB,CAAC6B,OAAO,CAC7C7B,kBAAkB,CAAC0B,WAAW,CAACC,sBACjC,CAAC;QACD,IAAIC,MAAM,KAAK5B,kBAAkB,CAAC8B,OAAO,CAACC,OAAO,EAAE;UACjD,OAAOnB,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;QAC9B;QACA,MAAM,IAAIiB,KAAK,CAAC,gCAAgC,CAAC;MACnD;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,OAAOrB,OAAO,CAACI,MAAM,CAACiB,CAAC,CAAC;IAC1B;EACF;EACA,OAAOrB,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,eAAeT,wBAAwB"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Platform, PermissionsAndroid } from 'react-native';
|
|
2
|
-
|
|
3
|
-
import NativeRNShare from '../../codegenSpec/NativeRNShare';
|
|
4
|
-
|
|
5
|
-
import { ShareOptions } from '../types';
|
|
6
|
-
|
|
7
|
-
const ANDROID_KIT_KAT_SDK_VERSION = 19;
|
|
8
|
-
const androidPermissionRequestRequired =
|
|
9
|
-
(typeof Platform.Version === 'string' ? parseInt(Platform.Version, 10) : Platform.Version) <
|
|
10
|
-
ANDROID_KIT_KAT_SDK_VERSION;
|
|
11
|
-
|
|
12
|
-
const requireAndAskPermissions = async (
|
|
13
|
-
options: Pick<ShareOptions, 'url' | 'urls'>,
|
|
14
|
-
): Promise<boolean | never> => {
|
|
15
|
-
if ((options.url || options.urls) && Platform.OS === 'android') {
|
|
16
|
-
const urls: string[] = options.urls || (options.url ? [options.url] : []);
|
|
17
|
-
try {
|
|
18
|
-
const resultArr = await Promise.all(
|
|
19
|
-
urls.map(
|
|
20
|
-
(url) =>
|
|
21
|
-
new Promise((resolve, reject) => {
|
|
22
|
-
NativeRNShare.isBase64File(url)
|
|
23
|
-
.then((isBase64: boolean) => {
|
|
24
|
-
resolve(isBase64);
|
|
25
|
-
})
|
|
26
|
-
.catch((error: Error) => {
|
|
27
|
-
reject(error);
|
|
28
|
-
});
|
|
29
|
-
}),
|
|
30
|
-
),
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
const requirePermission = resultArr.includes(true);
|
|
34
|
-
if (!requirePermission) {
|
|
35
|
-
return Promise.resolve(true);
|
|
36
|
-
}
|
|
37
|
-
const hasPermission = await PermissionsAndroid.check(
|
|
38
|
-
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
|
|
39
|
-
);
|
|
40
|
-
if (hasPermission) {
|
|
41
|
-
return Promise.resolve(true);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (androidPermissionRequestRequired) {
|
|
45
|
-
const result = await PermissionsAndroid.request(
|
|
46
|
-
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
|
|
47
|
-
);
|
|
48
|
-
if (result === PermissionsAndroid.RESULTS.GRANTED) {
|
|
49
|
-
return Promise.resolve(true);
|
|
50
|
-
}
|
|
51
|
-
throw new Error('Write Permission not available');
|
|
52
|
-
}
|
|
53
|
-
} catch (e) {
|
|
54
|
-
return Promise.reject(e);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return Promise.resolve(true);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export default requireAndAskPermissions;
|