Compare commits

...
11 Commits
Author SHA1 Message Date
semantic-release-bot b95117a8cd chore(release): 3.7.0 [skip ci]
# [3.7.0](https://github.com/expo/react-native-action-sheet/compare/v3.6.0...v3.7.0) (2020-05-06)

### Features

* adds `useModal` prop wrap action sheet in a modal ([9ed955d](https://github.com/expo/react-native-action-sheet/commit/9ed955dbba7259cbcf5e31ef3d4ed091ae4a3145)), closes [#169](https://github.com/expo/react-native-action-sheet/issues/169)
2020-05-06 08:27:32 -05:00
Broda Noel 9ed955dbba feat: adds useModal prop wrap action sheet in a modal
Fixes #169
2020-05-06 08:07:46 -05:00
Brad Bumbalough d85c167b55 chore: run git release after npm 2020-03-30 08:34:04 -05:00
Brad Bumbalough 128a48f2ff chore: commit package.json 2020-03-30 08:32:46 -05:00
semantic-release-bot fe8c66dd0b chore(release): 3.6.0 [skip ci]
# [3.6.0](https://github.com/expo/react-native-action-sheet/compare/v3.5.0...v3.6.0) (2020-03-30)

### Bug Fixes

* Android 'Super expression must either be null or a function' ([37156da](https://github.com/expo/react-native-action-sheet/commit/37156dacf114aa5146da153db9ee00c1aea8eaca))

### Features

* Add accessibility label to Action options ([#158](https://github.com/expo/react-native-action-sheet/issues/158)) ([bc3c27d](https://github.com/expo/react-native-action-sheet/commit/bc3c27d767a5657032b73f70aa1aacfea0481f66))
2020-03-30 08:29:47 -05:00
David Smith bc3c27d767 feat: Add accessibility label to Action options (#158)
* Add accessibility Label to Action options

* Commit Build

* Revert "Commit Build"

This reverts commit 9d891a6d3a.
2020-03-30 08:11:06 -05:00
Brad Bumbalough 33c7d9301c Merge pull request #160 from jdmunro/clarify-docs
Clarify setup documentation
2020-03-30 08:10:30 -05:00
Brad Bumbalough b20bf029ee Merge pull request #162 from Mitch528/fix-android
Fix Android 'Super expression must either be null or a function'
2020-03-30 08:09:36 -05:00
Mitchell Kutchuk 37156dacf1 fix: Android 'Super expression must either be null or a function' 2020-03-26 16:26:39 -07:00
James Munro 0d98570861 Update README.md 2020-03-14 16:06:11 +00:00
dependabot[bot] 6fe293d4e2 Bump acorn from 6.2.0 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.2.0 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.2.0...6.4.1)

Signed-off-by: dependabot[bot] <[email protected]>
2020-03-13 16:27:46 -07:00
11 changed files with 121 additions and 35 deletions

No files matched your search

+6 -3
View File
@@ -9,13 +9,16 @@
"changelogTitle": "# Changelog"
}
],
"@semantic-release/npm",
[
"@semantic-release/git",
{
"assets": ["CHANGELOG.md", "package.json"]
"assets": [
"CHANGELOG.md",
"package.json"
]
}
],
"@semantic-release/npm",
"@semantic-release/github"
]
}
}
+19
View File
@@ -1,5 +1,24 @@
# Changelog
# [3.7.0](https://github.com/expo/react-native-action-sheet/compare/v3.6.0...v3.7.0) (2020-05-06)
### Features
* adds `useModal` prop wrap action sheet in a modal ([9ed955d](https://github.com/expo/react-native-action-sheet/commit/9ed955dbba7259cbcf5e31ef3d4ed091ae4a3145)), closes [#169](https://github.com/expo/react-native-action-sheet/issues/169)
# [3.6.0](https://github.com/expo/react-native-action-sheet/compare/v3.5.0...v3.6.0) (2020-03-30)
### Bug Fixes
* Android 'Super expression must either be null or a function' ([37156da](https://github.com/expo/react-native-action-sheet/commit/37156dacf114aa5146da153db9ee00c1aea8eaca))
### Features
* Add accessibility label to Action options ([#158](https://github.com/expo/react-native-action-sheet/issues/158)) ([bc3c27d](https://github.com/expo/react-native-action-sheet/commit/bc3c27d767a5657032b73f70aa1aacfea0481f66))
# [3.5.0](https://github.com/expo/react-native-action-sheet/compare/v3.4.1...v3.5.0) (2020-02-04)
+23 -19
View File
@@ -23,7 +23,24 @@ $ yarn add @expo/react-native-action-sheet
## A basic ActionSheet Setup
### 1. Connect your component which uses showActionSheetWithOptions.
### 1. Wrap your top-level component with `<ActionSheetProvider />`
```es6
import { ActionSheetProvider } from '@expo/react-native-action-sheet'
class AppContainer extends React.Component {
render() {
return (
<ActionSheetProvider>
<ConnectedApp />
</ActionSheetProvider>
);
}
}
```
### 2. Connect your component which uses showActionSheetWithOptions.
```es6
import { connectActionSheet } from '@expo/react-native-action-sheet'
@@ -69,23 +86,6 @@ export default function App () {
}
```
### 2. Wrap your top-level component with `<ActionSheetProvider />`
```es6
import { ActionSheetProvider } from '@expo/react-native-action-sheet'
class AppContainer extends React.Component {
render() {
return (
<ActionSheetProvider>
<ConnectedApp />
</ActionSheetProvider>
);
}
}
```
## Options
The goal of this library is to mimic the native iOS and Android ActionSheets as closely as possible.
@@ -102,7 +102,7 @@ The same options available on React Native's [ActionSheetIOS](https://facebook.g
| -----------------| -------| -------- | ------- |
| anchor | number | No | |
#### `anchor` (optional)
#### `anchor` (optional)
iPad only option that allows for docking the action sheet to a node. See [ShowActionSheetButton.tsx](/example/ShowActionSheetButton.tsx) for an example on how to implement this.
### Android/Web-Only Props
@@ -120,6 +120,7 @@ The below props allow modification of the Android ActionSheet. They have no effe
| showSeparators | boolean | No | false |
| containerStyle | ViewStyle | No | |
| separatorStyle | ViewStyle | No | |
| useModal | boolean | No | false |
#### `icons` (optional)
@@ -146,6 +147,9 @@ Apply any view style props to the container rather than use the default look (e.
#### `separatorStyle`: (optional)
Modify the look of the separators rather than use the default look.
#### `useModal`: (optional)
Wrap the ActionSheet with a Modal, in order to show in front of other Modals that were already opened ([issue reference](https://github.com/expo/react-native-action-sheet/issues/164)).
## Try it out
Try it in Expo: https://expo.io/@community/react-native-action-sheet-example
+39 -2
View File
@@ -1,9 +1,16 @@
import * as React from 'react';
import { StyleSheet, Text, View, ScrollView, SafeAreaView } from 'react-native';
import {
Modal,
StyleSheet,
Text,
View,
ScrollView,
SafeAreaView,
TouchableOpacity,
} from 'react-native';
import {
ActionSheetProvider,
connectActionSheet,
ActionSheetOptions,
ActionSheetProps,
} from '@expo/react-native-action-sheet';
import ShowActionSheetButton from './ShowActionSheetButton';
@@ -12,11 +19,13 @@ type Props = ActionSheetProps;
interface State {
selectedIndex: number | null;
isModalOpen: boolean;
}
class App extends React.Component<Props, State> {
state: State = {
selectedIndex: null,
isModalOpen: false,
};
_updateSelectionText = (selectedIndex: number) => {
@@ -36,6 +45,10 @@ class App extends React.Component<Props, State> {
return <Text style={styles.sectionHeaderText}>{text}</Text>;
};
_toggleModal = () => {
this.setState({ isModalOpen: !this.state.isModalOpen });
};
_renderButtons() {
const { showActionSheetWithOptions } = this.props;
return (
@@ -117,6 +130,26 @@ class App extends React.Component<Props, State> {
onSelection={this._updateSelectionText}
showActionSheetWithOptions={showActionSheetWithOptions}
/>
{this._renderSectionHeader('Special Cases')}
<TouchableOpacity onPress={this._toggleModal}>
<Text style={styles.link}>Open Modal</Text>
</TouchableOpacity>
{this.state.isModalOpen && (
<Modal>
<View style={{ flex: 1, padding: 30 }}>
<ShowActionSheetButton
useModal
title="Options Only"
onSelection={this._updateSelectionText}
showActionSheetWithOptions={showActionSheetWithOptions}
/>
<TouchableOpacity onPress={this._toggleModal}>
<Text style={styles.link}>Close Modal</Text>
</TouchableOpacity>
</View>
</Modal>
)}
</View>
);
}
@@ -184,4 +217,8 @@ const styles = StyleSheet.create({
fontSize: 16,
marginTop: 20,
},
link: {
fontSize: 15,
textDecorationLine: 'underline',
},
});
+6 -1
View File
@@ -8,7 +8,7 @@ const icon = (name: string) => <MaterialIcons key={name} name={name} size={24} /
interface Props {
title: string;
showActionSheetWithOptions: (
optons: ActionSheetOptions,
options: ActionSheetOptions,
callback: (buttonIndex: number) => void
) => void;
onSelection: (index: number) => void;
@@ -18,6 +18,7 @@ interface Props {
withSeparators?: boolean;
withCustomStyles?: boolean;
withAnchor?: boolean;
useModal?: boolean;
}
// A custom button that shows examples of different share sheet configurations
@@ -30,6 +31,7 @@ export default class ShowActionSheetButton extends React.PureComponent<Props> {
withCustomStyles: false,
withAnchor: false,
onSelection: null,
useModal: false,
};
_anchorRef = React.createRef<Button>();
@@ -44,6 +46,7 @@ export default class ShowActionSheetButton extends React.PureComponent<Props> {
withCustomStyles,
onSelection,
showActionSheetWithOptions,
useModal,
} = this.props;
// Same interface as https://facebook.github.io/react-native/docs/actionsheetios.html
@@ -110,6 +113,8 @@ export default class ShowActionSheetButton extends React.PureComponent<Props> {
messageTextStyle,
// Android only,
containerStyle,
// Android only,
useModal,
},
(buttonIndex: number) => {
// Do something here depending on the button index selected
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@expo/react-native-action-sheet",
"version": "3.3.0",
"version": "3.7.0",
"description": "A cross-platform ActionSheet for React Native",
"react-native": "lib/module/index.js",
"types": "lib/typescript/index.d.ts",
+2 -1
View File
@@ -101,7 +101,8 @@ export default class ActionGroup extends React.Component<Props> {
pressInDelay={0}
background={nativeFeedbackBackground}
onPress={() => onSelect(i)}
style={styles.button}>
style={styles.button}
accessibilityLabel={options[i]}>
{this._renderIconElement(iconSource, color)}
<Text style={[styles.text, textStyle, { color }]}>{options[i]}</Text>
</TouchableNativeFeedbackSafe>
@@ -8,10 +8,14 @@ import {
} from 'react-native';
// This TouchableOpacity has the same staic method of TouchableNativeFeedback
class CustomTouchableOpacity extends TouchableOpacity {
class CustomTouchableOpacity extends React.Component {
static SelectableBackground = () => ({});
static SelectableBackgroundBorderless = () => ({});
static Ripple = (color: string, borderless?: boolean) => ({});
render() {
return <TouchableOpacity {...this.props}>{this.props.children}</TouchableOpacity>;
}
}
const TouchableComponent = Platform.select({
+16 -4
View File
@@ -3,6 +3,7 @@ import {
Animated,
BackHandler,
Easing,
Modal,
StyleSheet,
TouchableWithoutFeedback,
View,
@@ -53,7 +54,8 @@ export default class ActionSheet extends React.Component<Props, State> {
(this._actionSheetHeight = nativeEvent.layout.height);
render() {
const { isVisible, overlayOpacity } = this.state;
const { isVisible, overlayOpacity, options } = this.state;
const useModal = options ? options.useModal === true : false;
const overlay = isVisible ? (
<Animated.View
style={[
@@ -71,8 +73,18 @@ export default class ActionSheet extends React.Component<Props, State> {
flex: 1,
}}>
{React.Children.only(this.props.children)}
{overlay}
{isVisible ? this._renderSheet() : null}
{isVisible && !useModal && (
<React.Fragment>
{overlay}
{this._renderSheet()}
</React.Fragment>
)}
{isVisible && useModal && (
<Modal animationType="none" transparent={true} onRequestClose={this._selectCancelButton}>
{overlay}
{this._renderSheet()}
</Modal>
)}
</View>
);
}
@@ -143,7 +155,7 @@ export default class ActionSheet extends React.Component<Props, State> {
}
showActionSheetWithOptions = (options: ActionSheetOptions, onSelect: (i: number) => void) => {
const { isVisible, isAnimating, overlayOpacity, sheetOpacity } = this.state;
const { isVisible, overlayOpacity, sheetOpacity } = this.state;
if (isVisible) {
this._deferNextShow = this.showActionSheetWithOptions.bind(this, options, onSelect);
+1
View File
@@ -26,4 +26,5 @@ export interface ActionSheetOptions extends ActionSheetIOSOptions {
showSeparators?: boolean;
containerStyle?: ViewStyle;
separatorStyle?: ViewStyle;
useModal?: boolean;
}
+3 -3
View File
@@ -1067,9 +1067,9 @@ acorn-jsx@^5.0.0:
integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
acorn@^6.0.7:
version "6.2.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==
version "6.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
agent-base@4, agent-base@^4.3.0:
version "4.3.0"