/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @flow */ 'use strict'; const React = require('react'); const ReactNative = require('react-native'); const { ActionSheetIOS, StyleSheet, takeSnapshot, Text, View, Alert, } = ReactNative; const BUTTONS = ['Option 0', 'Option 1', 'Option 2', 'Delete', 'Cancel']; const DESTRUCTIVE_INDEX = 3; const CANCEL_INDEX = 4; type Props = $ReadOnly<{||}>; type State = {|clicked: string|}; class ActionSheetExample extends React.Component { state = { clicked: 'none', }; render() { return ( Click to show the ActionSheet Clicked button: {this.state.clicked} ); } showActionSheet = () => { ActionSheetIOS.showActionSheetWithOptions( { options: BUTTONS, cancelButtonIndex: CANCEL_INDEX, destructiveButtonIndex: DESTRUCTIVE_INDEX, }, buttonIndex => { this.setState({clicked: BUTTONS[buttonIndex]}); }, ); }; } class ActionSheetTintExample extends React.Component< $FlowFixMeProps, $FlowFixMeState, > { state = { clicked: 'none', }; render() { return ( Click to show the ActionSheet Clicked button: {this.state.clicked} ); } showActionSheet = () => { ActionSheetIOS.showActionSheetWithOptions( { options: BUTTONS, cancelButtonIndex: CANCEL_INDEX, destructiveButtonIndex: DESTRUCTIVE_INDEX, tintColor: 'green', }, buttonIndex => { this.setState({clicked: BUTTONS[buttonIndex]}); }, ); }; } class ActionSheetAnchorExample extends React.Component< $FlowFixMeProps, $FlowFixMeState, > { state = { clicked: 'none', }; anchorRef = React.createRef(); render() { return ( Click there to show the ActionSheet -> HERE Clicked button: {this.state.clicked} ); } showActionSheet = () => { ActionSheetIOS.showActionSheetWithOptions( { options: BUTTONS, cancelButtonIndex: CANCEL_INDEX, destructiveButtonIndex: DESTRUCTIVE_INDEX, anchor: this.anchorRef.current ? ReactNative.findNodeHandle(this.anchorRef.current) : undefined, }, buttonIndex => { this.setState({clicked: BUTTONS[buttonIndex]}); }, ); }; } class ShareActionSheetExample extends React.Component< $FlowFixMeProps, $FlowFixMeState, > { state = { text: '', }; render() { return ( Click to show the Share ActionSheet {this.state.text} ); } showShareActionSheet = () => { ActionSheetIOS.showShareActionSheetWithOptions( { url: this.props.url, message: 'message to go with the shared url', subject: 'a subject to go in the email heading', excludedActivityTypes: ['com.apple.UIKit.activity.PostToTwitter'], }, error => Alert.alert('Error', error), (completed, method) => { let text; if (completed) { text = `Shared via ${method}`; } else { text = "You didn't share"; } this.setState({text}); }, ); }; } class ShareScreenshotExample extends React.Component< $FlowFixMeProps, $FlowFixMeState, > { state = { text: '', }; render() { return ( Click to show the Share ActionSheet {this.state.text} ); } showShareActionSheet = () => { // Take the snapshot (returns a temp file uri) takeSnapshot('window') .then(uri => { // Share image data ActionSheetIOS.showShareActionSheetWithOptions( { url: uri, excludedActivityTypes: ['com.apple.UIKit.activity.PostToTwitter'], }, error => Alert.alert('Error', error), (completed, method) => { let text; if (completed) { text = `Shared via ${method}`; } else { text = "You didn't share"; } this.setState({text}); }, ); }) .catch(error => Alert.alert('Error', error)); }; } class ShareScreenshotAnchorExample extends React.Component< $FlowFixMeProps, $FlowFixMeState, > { state = { text: '', }; anchorRef = React.createRef(); render() { return ( Click to show the Share ActionSheet -> HERE {this.state.text} ); } showShareActionSheet = () => { // Take the snapshot (returns a temp file uri) takeSnapshot('window') .then(uri => { // Share image data ActionSheetIOS.showShareActionSheetWithOptions( { url: uri, excludedActivityTypes: ['com.apple.UIKit.activity.PostToTwitter'], anchor: this.anchorRef.current ? ReactNative.findNodeHandle(this.anchorRef.current) : undefined, }, error => Alert.alert('Error', error), (completed, method) => { let text; if (completed) { text = `Shared via ${method}`; } else { text = "You didn't share"; } this.setState({text}); }, ); }) .catch(error => Alert.alert('Error', error)); }; } const style = StyleSheet.create({ button: { marginBottom: 10, fontWeight: '500', }, anchorRow: { flex: 1, flexDirection: 'row', justifyContent: 'space-between', }, }); exports.title = 'ActionSheetIOS'; exports.description = "Interface to show iOS' action sheets"; exports.examples = [ { title: 'Show Action Sheet', render(): React.Element { return ; }, }, { title: 'Show Action Sheet with tinted buttons', render(): React.Element { return ; }, }, { title: 'Show Action Sheet with anchor', render(): React.Element { return ; }, }, { title: 'Show Share Action Sheet', render(): React.Element { return ; }, }, { title: 'Share Local Image', render(): React.Element { return ; }, }, { title: 'Share Screenshot', render(): React.Element { return ; }, }, { title: 'Share from Anchor', render(): React.Element { return ; }, }, ];