react-native-share 9.1.1 → 9.2.1

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.
Files changed (38) hide show
  1. package/RNShare.podspec +2 -0
  2. package/lib/commonjs/helpers/android.js +34 -0
  3. package/lib/commonjs/helpers/android.js.map +1 -0
  4. package/lib/commonjs/helpers/checkPermissions.js +22 -0
  5. package/lib/commonjs/helpers/checkPermissions.js.map +1 -0
  6. package/lib/commonjs/helpers/options.js +36 -0
  7. package/lib/commonjs/helpers/options.js.map +1 -0
  8. package/lib/commonjs/helpers/platform.js +20 -0
  9. package/lib/commonjs/helpers/platform.js.map +1 -0
  10. package/lib/commonjs/index.js +35 -68
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/module/helpers/android.js +27 -0
  13. package/lib/module/helpers/android.js.map +1 -0
  14. package/lib/module/helpers/checkPermissions.js +17 -0
  15. package/lib/module/helpers/checkPermissions.js.map +1 -0
  16. package/lib/module/helpers/options.js +29 -0
  17. package/lib/module/helpers/options.js.map +1 -0
  18. package/lib/module/helpers/platform.js +12 -0
  19. package/lib/module/helpers/platform.js.map +1 -0
  20. package/lib/module/index.js +35 -68
  21. package/lib/module/index.js.map +1 -1
  22. package/lib/typescript/src/helpers/android.d.ts +1 -0
  23. package/lib/typescript/src/helpers/checkPermissions.d.ts +3 -0
  24. package/lib/typescript/src/helpers/options.d.ts +71 -0
  25. package/lib/typescript/src/helpers/platform.d.ts +3 -0
  26. package/lib/typescript/src/index.d.ts +4 -4
  27. package/package.json +1 -1
  28. package/src/helpers/android.ts +30 -0
  29. package/src/helpers/checkPermissions.ts +13 -0
  30. package/src/helpers/options.ts +26 -0
  31. package/src/helpers/platform.ts +14 -0
  32. package/src/index.tsx +46 -83
  33. package/lib/commonjs/helpers/requireAndAskPermissions.js +0 -46
  34. package/lib/commonjs/helpers/requireAndAskPermissions.js.map +0 -1
  35. package/lib/module/helpers/requireAndAskPermissions.js +0 -38
  36. package/lib/module/helpers/requireAndAskPermissions.js.map +0 -1
  37. package/lib/typescript/src/helpers/requireAndAskPermissions.d.ts +0 -3
  38. package/src/helpers/requireAndAskPermissions.ts +0 -60
package/RNShare.podspec CHANGED
@@ -2,6 +2,8 @@ require "json"
2
2
 
3
3
  package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
4
 
5
+ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
6
+
5
7
  Pod::Spec.new do |s|
6
8
  s.name = "RNShare"
7
9
  s.version = package["version"]
@@ -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"}
@@ -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 _requireAndAskPermissions = _interopRequireDefault(require("./helpers/requireAndAskPermissions"));
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
- return new Promise((resolve, reject) => {
78
- (0, _requireAndAskPermissions.default)(options).then(() => {
79
- if (_reactNative.Platform.OS === 'ios' && options.url && !options.urls) {
80
- // Backward compatibility with { Share } from react-native
81
- const url = options.url;
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
- }).catch(e => reject(e));
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
- isPackageInstalled(packageName) {
133
- if (_reactNative.Platform.OS === 'android') {
134
- return new Promise((resolve, reject) => {
135
- _NativeRNShare.default.isPackageInstalled(packageName).then(isInstalled => {
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)\n .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 .catch((e: unknown) => reject(e));\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"}
@@ -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 requireAndAskPermissions from './helpers/requireAndAskPermissions';
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
- return new Promise((resolve, reject) => {
35
- requireAndAskPermissions(options).then(() => {
36
- if (Platform.OS === 'ios' && options.url && !options.urls) {
37
- // Backward compatibility with { Share } from react-native
38
- const url = options.url;
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
- }).catch(e => reject(e));
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
- isPackageInstalled(packageName) {
90
- if (Platform.OS === 'android') {
91
- return new Promise((resolve, reject) => {
92
- NativeRNShare.isPackageInstalled(packageName).then(isInstalled => {
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 };
@@ -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)\n .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 .catch((e: unknown) => reject(e));\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,3 @@
1
+ import { ShareOptions } from '../types';
2
+ /** Check if the passed in options require platform permission. If an error isn't thrown, no permission is required */
3
+ export default function checkPermissions({ url, urls }: Pick<ShareOptions, 'url' | 'urls'>): 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
+ };
@@ -0,0 +1,3 @@
1
+ export declare function isIOS(): boolean;
2
+ export declare function isAndroid(): boolean;
3
+ export declare function getAndroidVersion(): number;
@@ -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, ShareOpenResult, ShareAsset, ShareOptions, ShareSingleOptions, ShareSingleResult } from './types';
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 | never>;
32
- readonly shareSingle: (options: ShareSingleOptions) => Promise<ShareSingleResult | never>;
33
- readonly isPackageInstalled: (packageName: string) => Promise<IsPackageInstalledResult | never>;
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-share",
3
3
  "description": "Social share, sending simple data to other apps.",
4
- "version": "9.1.1",
4
+ "version": "9.2.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/react-native-community/react-native-share.git"
@@ -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 requireAndAskPermissions from './helpers/requireAndAskPermissions';
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,90 +44,53 @@ const RNShare = {
44
44
  VIBER: NativeRNShare.getConstants().VIBER || Social.Viber,
45
45
  },
46
46
 
47
- open(options: ShareOptions): Promise<ShareOpenResult | never> {
48
- return new Promise((resolve, reject) => {
49
- requireAndAskPermissions(options)
50
- .then(() => {
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)
63
- .then((ret: { success: boolean; message: string }) => {
64
- if (ret.success) {
65
- return resolve({
66
- success: ret.success,
67
- message: ret.message,
68
- });
69
- } else if (options.failOnCancel === false) {
70
- return resolve({
71
- dismissedAction: true,
72
- success: ret.success,
73
- message: ret.message,
74
- });
75
- } else {
76
- reject(new Error('User did not share'));
77
- }
78
- })
79
- .catch((e: unknown) => reject(e));
80
- })
81
- .catch((e: unknown) => reject(e));
82
- });
83
- },
47
+ async open(options: ShareOptions) {
48
+ await checkPermissions(options);
49
+
50
+ options = normalizeShareOpenOptions(options);
84
51
 
85
- shareSingle(options: ShareSingleOptions): Promise<ShareSingleResult | never> {
86
- if (Platform.OS === 'ios' || Platform.OS === 'android') {
87
- return new Promise((resolve, reject) => {
88
- requireAndAskPermissions(options)
89
- .then(() => {
90
- if (options.url) {
91
- options.urls = [options.url];
92
- }
93
-
94
- if (options.social === RNShare.Social.INSTAGRAM_STORIES && !options.appId) {
95
- return reject({
96
- success: false,
97
- message: 'Instagram Story share requires an appId based on Meta policy.',
98
- });
99
- }
100
- NativeRNShare.shareSingle(options)
101
- .then((ret: { success: boolean; message: string }) => {
102
- return resolve({
103
- success: Boolean(ret.success),
104
- message: ret.message,
105
- });
106
- })
107
- .catch((e: unknown) => reject(e));
108
- })
109
- .catch((e: unknown) => reject(e));
110
- });
111
- } else {
112
- 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');
113
56
  }
57
+
58
+ return result;
114
59
  },
115
60
 
116
- isPackageInstalled(packageName: string): Promise<IsPackageInstalledResult | never> {
117
- if (Platform.OS === 'android') {
118
- return new Promise((resolve, reject) => {
119
- NativeRNShare.isPackageInstalled(packageName)
120
- .then((isInstalled: boolean) => {
121
- return resolve({
122
- isInstalled,
123
- message: 'Package is Installed',
124
- });
125
- })
126
- .catch((e: unknown) => reject(e));
127
- });
128
- } else {
129
- 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');
130
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;
131
94
  },
132
95
  } as const;
133
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,3 +0,0 @@
1
- import { ShareOptions } from '../types';
2
- declare const requireAndAskPermissions: (options: Pick<ShareOptions, 'url' | 'urls'>) => Promise<boolean | never>;
3
- export default requireAndAskPermissions;
@@ -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;