mirror of
https://github.com/status-im/react-native.git
synced 2025-01-14 19:44:13 +00:00
0c5b390178
Summary: Previously type Options had excludeActivityTypes property, but in RCTActionSheetManager.m and docs this property is named excludedActivityTypes. <!-- Thank you for sending the PR! We appreciate you spending the time to work on these changes. Help us understand your motivation by explaining why you decided to make this change. You can learn more about contributing to React Native here: http://facebook.github.io/react-native/docs/contributing.html Happy contributing! --> Want to fix error in flow types Actually, it seems there aren't any need for test plan for this PR. Just fix a mistyping error. Closes https://github.com/facebook/react-native/pull/15881 Differential Revision: D5813539 Pulled By: ericnakagawa fbshipit-source-id: 7d1269d4c177f920869bf6554f14af6db7a741ee
119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
/**
|
|
* Copyright (c) 2016-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @providesModule Share
|
|
* @flow
|
|
*/
|
|
'use strict';
|
|
|
|
const Platform = require('Platform');
|
|
|
|
const invariant = require('fbjs/lib/invariant');
|
|
const processColor = require('processColor');
|
|
|
|
const {
|
|
ActionSheetManager,
|
|
ShareModule
|
|
} = require('NativeModules');
|
|
|
|
type Content = { title?: string, message: string } | { title?: string, url: string };
|
|
type Options = { dialogTitle?: string, excludedActivityTypes?: Array<string>, tintColor?: string };
|
|
|
|
class Share {
|
|
|
|
/**
|
|
* Open a dialog to share text content.
|
|
*
|
|
* In iOS, Returns a Promise which will be invoked an object containing `action`, `activityType`.
|
|
* If the user dismissed the dialog, the Promise will still be resolved with action being `Share.dismissedAction`
|
|
* and all the other keys being undefined.
|
|
*
|
|
* In Android, Returns a Promise which always be resolved with action being `Share.sharedAction`.
|
|
*
|
|
* ### Content
|
|
*
|
|
* - `message` - a message to share
|
|
* - `title` - title of the message
|
|
*
|
|
* #### iOS
|
|
*
|
|
* - `url` - an URL to share
|
|
*
|
|
* At least one of URL and message is required.
|
|
*
|
|
* ### Options
|
|
*
|
|
* #### iOS
|
|
*
|
|
* - `excludedActivityTypes`
|
|
* - `tintColor`
|
|
*
|
|
* #### Android
|
|
*
|
|
* - `dialogTitle`
|
|
*
|
|
*/
|
|
static share(content: Content, options: Options = {}): 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'
|
|
);
|
|
|
|
if (Platform.OS === 'android') {
|
|
invariant(
|
|
!content.title || typeof content.title === 'string',
|
|
'Invalid title: title should be a string.'
|
|
);
|
|
return ShareModule.share(content, options.dialogTitle);
|
|
} else if (Platform.OS === 'ios') {
|
|
return new Promise((resolve, reject) => {
|
|
ActionSheetManager.showShareActionSheetWithOptions(
|
|
{...content, ...options, tintColor: processColor(options.tintColor)},
|
|
(error) => reject(error),
|
|
(success, activityType) => {
|
|
if (success) {
|
|
resolve({
|
|
'action': 'sharedAction',
|
|
'activityType': activityType
|
|
});
|
|
} else {
|
|
resolve({
|
|
'action': 'dismissedAction'
|
|
});
|
|
}
|
|
}
|
|
);
|
|
});
|
|
} else {
|
|
return Promise.reject(new Error('Unsupported platform'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The content was successfully shared.
|
|
*/
|
|
static get sharedAction() { return 'sharedAction'; }
|
|
|
|
/**
|
|
* The dialog has been dismissed.
|
|
* @platform ios
|
|
*/
|
|
static get dismissedAction() { return 'dismissedAction'; }
|
|
|
|
}
|
|
|
|
module.exports = Share;
|