# react-native-floating-action Floating action button for React Native ## Expo example Open the following click on your phone: [Expo link](https://expo.io/@santomegonzalo/ReactNativeFloatingAction-Expo) or user your phone and scan the following QR: Use it on Expo ## Example of how Expo looks ## Installation ``` npm i react-native-floating-action --save ``` or ``` yarn add react-native-floating-action ``` ## Example Take a look into **example/ReactNativeFloatingAction-Expo** To execute the example using **Expo** run the following command: ```bash yarn run run:example ``` or open [Expo link](https://expo.io/@santomegonzalo/ReactNativeFloatingAction-Expo) from your mobile ## How to use it **First step:** import the component: ```javascript import { FloatingAction } from 'react-native-floating-action'; ``` **Second step:** define the buttons ```javascript const actions = [{ text: 'Accessibility', icon: require('./images/ic_accessibility_white.png'), name: 'bt_accessibility', position: 2 }, { text: 'Language', icon: require('./images/ic_language_white.png'), name: 'bt_language', position: 1 }, { text: 'Location', icon: require('./images/ic_room_white.png'), name: 'bt_room', position: 3 }, { text: 'Video', icon: require('./images/ic_videocam_white.png'), name: 'bt_videocam', position: 4 }]; ``` **Third step:** use it ```javascript Floating Action example { console.log(`selected button: ${name}`); } } /> ``` ### Open and hide it programatically There are some cases where you want to show or hide the component without pressing the main button: ```javascript { this.floatingAction = ref; }} actions={[...]} ... /> ``` and then: ```javascript this.floatingAction.animateButton(); ``` ## Configuration **FloatingAction** | Property | Type | Default | Description | |-------------------------|-----------------------|-----------------------|---------------------------------------------------------------------------------------------------------------------| | actions | array | [] | Actions to be show once user press the main button | | color | string | #1253bc | Color of the main button | | distanceToEdge | number | 30 | Distance from button to edge | | visible | boolean | true | Hide or Show the component using an animation | | overlayColor | string | rgba(68, 68, 68, 0.6) | Color of the background overlay | | position | string | right | Position to render the main button and actions, options: (**left**, **right**, **center**) | | overrideWithAction | string | false | Override the main action with the first action inside list actions, will not show other action | | floatingIcon | node | ReactElement | | Change the default plus icon using **require(pathToImage)** or **ReactElement** | | showBackground | boolean | true | **Show** or **Hide** background after open it | | openOnMount | boolean | false | Open component after mounting it, useful on some weird cases like tutorials | | actionsPaddingTopBottom | number | 8 | Change distance between actions | | onPressItem | function | | Function to be call as soon as the user select an option from actions. Will return the name of the action. | | onPressMain | function | | Function to be call as soon as use click main button and will return **true** or **false** depeneding of the state. | **Actions** | Property | Type | Default | Description | |-----------------------|--------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | color | string | #1253bc | Color of the action button | | icon | any | | Icon to be rendered inside the action, will accept an URL or React.Image. If we want to send an URL we need to send it in this way: icon: **{ uri: 'https://imageurl.com' }** if we want to send a React.Image we will use it in this way: **icon: require('path/image')** | | name | string | | Name of the icon, this name is used as parameter for **onPressItem** action | | text | string | | Text to show near to the button. (Only apply for **position = ['left', 'right']**) | | textBackground | string | #ffffff | Background color for Text container | | textColor | string | #444444 | Text color for every action | | textElevation | number | 5 | Elevation property (only android) | ## TODO - [x] first implementation - [x] example - [x] add colors configurations - [x] add more positions like left, center and right - [x] support hide or show the component with an animation - [x] change plus icon to be customizable - [x] use components as icon - [x] hide background - [x] open on mounting - [ ] allow user defined animations - [ ] use crazy animations