mirror of
https://github.com/zhigang1992/react-native-web.git
synced 2026-01-12 22:51:09 +08:00
@@ -41,6 +41,7 @@ module.exports = {
|
||||
SafeAreaView: true,
|
||||
ScrollView: true,
|
||||
SectionList: true,
|
||||
Share: true,
|
||||
Slider: true,
|
||||
StatusBar: true,
|
||||
StyleSheet: true,
|
||||
|
||||
60
packages/react-native-web/src/exports/Share/index.js
vendored
Normal file
60
packages/react-native-web/src/exports/Share/index.js
vendored
Normal 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;
|
||||
3
packages/react-native-web/src/index.js
vendored
3
packages/react-native-web/src/index.js
vendored
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user