diff --git a/Accordion.js b/Accordion.js
index 2752d61..3371254 100644
--- a/Accordion.js
+++ b/Accordion.js
@@ -24,10 +24,12 @@ export default class Accordion extends Component {
underlayColor: PropTypes.string,
touchableComponent: PropTypes.func,
touchableProps: PropTypes.object,
+ disabled: PropTypes.bool,
};
static defaultProps = {
underlayColor: 'black',
+ disabled: false,
touchableComponent: TouchableHighlight,
};
@@ -52,14 +54,16 @@ export default class Accordion extends Component {
}
_toggleSection(section) {
- const activeSection =
- this.state.activeSection === section ? false : section;
+ if (!this.props.disabled) {
+ const activeSection =
+ this.state.activeSection === section ? false : section;
- if (this.props.activeSection === undefined) {
- this.setState({ activeSection });
- }
- if (this.props.onChange) {
- this.props.onChange(activeSection);
+ if (this.props.activeSection === undefined) {
+ this.setState({ activeSection });
+ }
+ if (this.props.onChange) {
+ this.props.onChange(activeSection);
+ }
}
}
@@ -78,7 +82,7 @@ export default class Accordion extends Component {
return (
- {this.props.sections.map((section, key) =>
+ {this.props.sections.map((section, key) => (
this._toggleSection(key)}
@@ -102,7 +106,7 @@ export default class Accordion extends Component {
)}
- )}
+ ))}
);
}
diff --git a/README.md b/README.md
index 7130b9c..b094fd9 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
# react-native-collapsible
-*Animated collapsible component for React Native using the Animated API*
+
+_Animated collapsible component for React Native using the Animated API_
Pure JavaScript, supports dynamic content heights and components that is aware of its `collapsed` state (good for toggling arrows etc).
@@ -15,56 +16,57 @@ npm install --save react-native-collapsible
import Collapsible from 'react-native-collapsible';
-
+;
```
## Properties
-| Prop | Description | Default |
-|---|---|---|
-|**`align`**|Alignment of the content when transitioning, can be `top`, `center` or `bottom`|`top`|
-|**`collapsed`**|Whether to show the child components or not|`true`|
-|**`collapsedHeight`**|Which height should the component collapse to|`0`|
-|**`duration`**|Duration of transition in milliseconds|`300`|
-|**`easing`**|Function or function name from [`Easing`](https://github.com/facebook/react-native/blob/master/Libraries/Animated/src/Easing.js) (or [`tween-functions`](https://github.com/chenglou/tween-functions) if < RN 0.8). Collapsible will try to combine `Easing` functions for you if you name them like `tween-functions`. |`easeOutCubic`|
+| Prop | Description | Default |
+| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
+| **`align`** | Alignment of the content when transitioning, can be `top`, `center` or `bottom` | `top` |
+| **`collapsed`** | Whether to show the child components or not | `true` |
+| **`collapsedHeight`** | Which height should the component collapse to | `0` |
+| **`duration`** | Duration of transition in milliseconds | `300` |
+| **`easing`** | Function or function name from [`Easing`](https://github.com/facebook/react-native/blob/master/Libraries/Animated/src/Easing.js) (or [`tween-functions`](https://github.com/chenglou/tween-functions) if < RN 0.8). Collapsible will try to combine `Easing` functions for you if you name them like `tween-functions`. | `easeOutCubic` |
## Accordion Usage
-This is a convenience component for a common use case, see demo below.
+This is a convenience component for a common use case, see demo below.
```js
import Accordion from 'react-native-collapsible/Accordion';
-
+/>;
```
## Properties
-| Prop | Description |
-|---|---|
-|**`sections`**|An array of sections passed to the render methods|
-|**`renderHeader(content, index, isActive)`**|A function that should return a renderable representing the header|
-|**`renderContent(content, index, isActive)`**|A function that should return a renderable representing the content|
-|**`onChange(index)`**|An optional function that is called when currently active section is changed, `index === false` when collapsed|
-|**`initiallyActiveSection`**|Set which index in the `sections` array is initially open. Defaults to none. |
-|**`activeSection`**|Control which index in the `sections` array is currently open. Defaults to none. If false, closes all sections.|
-|**`underlayColor`**|The color of the underlay that will show through when tapping on headers. Defaults to black. |
-|**`touchableComponent`**| The touchable component used in the Accordion. Defaults to `TouchableHighlight` |
-|**`touchableProps`**| Properties for the `touchableComponent` |
-|**`align`**|See `Collapsible`|
-|**`duration`**|See `Collapsible`|
-|**`easing`**|See `Collapsible`|
+| Prop | Description |
+| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
+| **`sections`** | An array of sections passed to the render methods |
+| **`renderHeader(content, index, isActive)`** | A function that should return a renderable representing the header |
+| **`renderContent(content, index, isActive)`** | A function that should return a renderable representing the content |
+| **`onChange(index)`** | An optional function that is called when currently active section is changed, `index === false` when collapsed |
+| **`initiallyActiveSection`** | Set which index in the `sections` array is initially open. Defaults to none. |
+| **`activeSection`** | Control which index in the `sections` array is currently open. Defaults to none. If false, closes all sections. |
+| **`underlayColor`** | The color of the underlay that will show through when tapping on headers. Defaults to black. |
+| **`touchableComponent`** | The touchable component used in the Accordion. Defaults to `TouchableHighlight` |
+| **`touchableProps`** | Properties for the `touchableComponent` |
+| **`disabled`** | Set whether the user can interact with the Accordion |
+| **`align`** | See `Collapsible` |
+| **`duration`** | See `Collapsible` |
+| **`easing`** | See `Collapsible` |
## Demo
![demo](https://cloud.githubusercontent.com/assets/378279/8047315/0237ca2c-0e44-11e5-9a16-1da052406eb0.gif)
-## Example
+## Example
-Check full example in the `Example` folder.
+Check full example in the `Example` folder.
```js
import React, { Component } from 'react-native';
@@ -73,11 +75,11 @@ import Accordion from 'react-native-collapsible/Accordion';
const SECTIONS = [
{
title: 'First',
- content: 'Lorem ipsum...',
+ content: 'Lorem ipsum...'
},
{
title: 'Second',
- content: 'Lorem ipsum...',
+ content: 'Lorem ipsum...'
}
];
@@ -112,9 +114,10 @@ class AccordionView extends Component {
### Transition backgrounds
-If you combine with the [`react-native-animatable`](https://github.com/oblador/react-native-animatable) library you can easily transition the background color between the active and inactive state or add animations.
+If you combine with the [`react-native-animatable`](https://github.com/oblador/react-native-animatable) library you can easily transition the background color between the active and inactive state or add animations.
Lets augment the example above with:
+
```js
import * as Animatable from 'react-native-animatable';
@@ -152,13 +155,14 @@ import * as Animatable from 'react-native-animatable';
(...)
```
-To produce this (slowed down for visibility):
+To produce this (slowed down for visibility):
![accordion-demo](https://cloud.githubusercontent.com/assets/378279/10767769/2ddfe234-7cb4-11e5-8ef1-c0f8c67ead58.gif)
## Contributing
+
Interested in contributing to this repo? Have a look at our [Contributing Guide](https://github.com/oblador/react-native-collapsible/blob/master/.github/CONTRIBUTING.MD)
## License
-[MIT License](http://opensource.org/licenses/mit-license.html). © Joel Arvidsson 2015
+[MIT License](http://opensource.org/licenses/mit-license.html). © Joel Arvidsson 2015