[add] Share API

Fix #958
This commit is contained in:
Nicolas Gallagher
2018-05-22 14:14:28 -07:00
parent 0ee3310290
commit 10407f3aa2
3 changed files with 64 additions and 0 deletions

View File

@@ -41,6 +41,7 @@ module.exports = {
SafeAreaView: true,
ScrollView: true,
SectionList: true,
Share: true,
Slider: true,
StatusBar: true,
StyleSheet: true,

View File

@@ -0,0 +1,60 @@
/**
* Copyright (c) 2018-present, Nicolas Gallagher.
* Copyright (c) 2016-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
import invariant from 'fbjs/lib/invariant';
type Content =
| { title?: string, message?: string, url: string }
| { title?: string, message: string, url?: string };
class Share {
static share(content: Content, options: Object = {}): Promise<Object> {
invariant(
typeof content === 'object' && content !== null,
'Content to share must be a valid object'
);
invariant(
typeof content.url === 'string' || typeof content.message === 'string',
'At least one of URL and message is required'
);
invariant(typeof options === 'object' && options !== null, 'Options must be a valid object');
invariant(
!content.title || typeof content.title === 'string',
'Invalid title: title should be a string.'
);
if (window.navigator.share !== undefined) {
return window.navigator.share({
title: content.title,
text: content.message,
url: content.url
});
} else {
return Promise.reject(new Error('Share is not supported in this browser'));
}
}
/**
* The content was successfully shared.
*/
static get sharedAction(): string {
return 'sharedAction';
}
/**
* The dialog has been dismissed.
* @platform ios
*/
static get dismissedAction(): string {
return 'dismissedAction';
}
}
export default Share;

View File

@@ -29,6 +29,7 @@ import NetInfo from './exports/NetInfo';
import PanResponder from './exports/PanResponder';
import PixelRatio from './exports/PixelRatio';
import Platform from './exports/Platform';
import Share from './exports/Share';
import StyleSheet from './exports/StyleSheet';
import UIManager from './exports/UIManager';
import Vibration from './exports/Vibration';
@@ -101,6 +102,7 @@ export {
PanResponder,
PixelRatio,
Platform,
Share,
StyleSheet,
UIManager,
Vibration,
@@ -172,6 +174,7 @@ const ReactNative = {
PanResponder,
PixelRatio,
Platform,
Share,
StyleSheet,
UIManager,
Vibration,