Skip to main content

Swipeable (iOS)

Set a slider item to either left or right on iOS.

Light Theme

Usage​

On the flatlist​

This component can be used in the FlatList component.

This component can be used in the list that has a rendering limit of up to 10 items. If you need to implement it in a dynamic list, use the FlatList component.

import React, { useState } from 'react';
import { Alert, FlatList, Platform, View } from 'react-native';

// React Native UI DevKit
import { Item, ISwipeableProps, Separator, Divider } from 'react-native-ui-devkit';

let lastOpened: number = -1;
const App = () => {
const [data, setData] = useState([
{ _id: 1, title: 'Item 1' },
{ _id: 2, title: 'Item 2' },
{ _id: 3, title: 'Item 3' }
]);

const closeLastOpened = (index: number) => {
lastOpened != index && data[lastOpened]?.ref?.closeActions();
lastOpened = index;
}

const _render = ({ item, index, separators }) => {
data[index].separators = separators;

const _item: ISwipeableProps = {
title: item.title,
separator: {
data: [data[index - 1], item],
index
},
swipeable: {
left: [
{
icon: { name: 'pin', type: 'material-community', color: '#fff', size: 22 },
backgroundColor: '#FF9500',
onPress: () => {
item.ref?.hideItem && item.ref?.hideItem(() => {
data.splice(index, 1);
setData([...data]);
}, 'left');
}
},
{
icon: { name: 'chatbubble-sharp', type: 'ionicons', color: '#fff', size: 22 },
backgroundColor: '#007AFF',
onPress: () => Alert.alert('Warning', 'Left Item 2'),
},
],
right: [
{
icon: { name: 'trash', type: 'ionicons', color: '#fff', size: 22 },
backgroundColor: '#FF3B30',
onPress: () => {
Alert.alert('Warning', 'Right Item 1', [
{
text: 'Cancel',
onPress: () => { }
},
{
text: 'Ok',
onPress: async () => {
item.ref?.hideItem && item.ref?.hideItem(() => {
data.splice(index, 1);
setData([...data]);
}, 'right');
}
}
]);
},

},
{
icon: { name: 'bell-off', type: 'material-community', color: '#fff', size: 22 },
backgroundColor: '#5856D6',
onPress: () => { Alert.alert('Warning', 'Right Item 2'); }
},
{
icon: { name: 'share-outline', type: 'ionicons', color: '#fff', size: 22 },
backgroundColor: '#32ADE6',
onPress: () => { Alert.alert('Warning', 'Right Item 3'); }
}
],
onBegan: () => {
closeLastOpened(index);
}
},
onPress: async () => { }
};

return (
<Item ref={(ref) => item.ref = ref} key={item._id} data={_item} index={index} count={data.length} />
)
}

return (
<View style={{ flex: 1 }}>
<FlatList
data={data}
renderItem={_render}
ItemSeparatorComponent={(props) => { return <Separator props={props} start={Platform.OS == 'ios' ? 15 : 20} /> }}
onScrollBeginDrag={() => { closeLastOpened(-1); }}
ListFooterComponent={<Divider />}
/>
</View >
);
}

export default App;

Props​

data​

This property receives an interface for configuring the swipeable.

Type: ISwipeableProps​

header (optional)​

Inserts a native header into the Item. For use on Android, set headerOnAndroid equal to true.

Type: string​

headerOnAndroid (optional)​

If you want to render the header on Android, set it to true.

Only supported Android.

Type: boolean​

headerToTitle (optional)​

If used, it will replace the item title with the header, if any.

Only supported Android.

Type: boolean​

Inserts a native footer into the Item. For use on Android, set footerOnAndroid equal to true.

Type: string​

footerOnAndroid (optional)​

If you want to render the footer on Android, set it to true.

Only supported Android.

Type: boolean​

tabletIpadMenuType (optional)​

Defines whether the item will have the characteristics of a Tablet or iPad navigation menu style item.

Supports Tablet and iPad only.

Type: boolean​

index (optional)​

Sets the index of an item. It can be used to join items together to form a list. Used in conjunction with count.

Only supported In the item.

Type: count​

count (optional)​

Defines when items have a certain list. Used in conjunction with index.

Only supported In the item.

Type: number​

style (optional)​

Set a custom style for the item.

Type: ViewStyle​

flex (optional)​

Defines the main view of the item with style flex 1.

Only supported In the item.

Type: boolean​

marginTop (optional)​

The marginTop is set by default according to each platform and version, to remove it simply set it to false.

Type: boolean​

separators (optional)​

To remove the item's native top and bottom separator, set it to false.

Only supported iOS < 15.

Type: boolean​

expanded (optional)​

If you want to expand the item, set it to true. On iOS < 15 is already set as default, so it has no effect.

Type: boolean​

Methods​

openLeftActions (iOS)​

Method responsible for opening the swipeable from left to right.

Type: async () => void​

openRightActions (iOS)​

Method responsible for opening the swipeable from right to left.

Type: async () => void​

closeActions (iOS)​

Method responsible for closing the swipeable both left and right.

Type: async () => void​

hideItem (iOS)​

Method responsible for creating the transaction to hide the item after executing the swipeable.

Type: (async () => void, side: 'left' | 'right') => void​

Interface​

ISwipeableProps​

This interface receives parameter data and values for swipeable configuration.

Type: object​

  • icon

    Defines the icon to be used on the item.

    Type: icon​
  • title

    Defines the title to be used on the item.

    Type: string​
  • description

    Defines the description to be used on the item. The behavior of this property follows the native standard for each platform, Android / iOS.

    Type: string​
  • subdescription iOS

    Similar to description rendering on Android.

    Type: string​
  • component

    Defines a custom component in place of the item.

    Type: ReactNode​
  • disabled

    Disable the item.

    Type: boolean​
  • loading

    Sets the item as loading and disables it. If the item is of type action, collapsible, switch, checkbox or radio, it will be replaced with an activity indicator.

    Type: boolean​
  • padding

    The item padding comes by default according to each platform, if you want to remove the padding just change it to false.

    Type: boolean​
  • badge

    Defines a small circle that displays a number or text and will be displayed on the right side of the item.

    Type: badge​
  • color

    Sets the color of the item title and description.
    The color in the description is only compatible with Android.

    Type: color​
  • separator

    Sets the separator properties of the above item.

    Type: separator​
  • style

    Set a custom style for the item on the list.

    Type: ViewStyle​
  • swipeable iOS

    Configure up to 3 actions on the left side and up to 3 actions on the right side.

    Type: swipeable​
  • onPress

    Performing an action when clicking the button.

    Type: async () => void​
  • onLongPress

    Performing an action by holding down the button.

    Type: async () => void​

Type Definitions​

icon​

Defines the icon to be used on the item.

Type: object​

{
name: string, // Defines the icon name.
type: "antdesign" | "entypo" | "evilicons" | "feather" | "font-awesome" | "font-awesome5" | "font-awesome5pro" | "fontisto" | "foundation" | "ionicons" | "material-community" | "material" | "octicons" | "simplelineicons" | "zocial" | "sfsymbol", // Sets the icon type.
size: number, // Sets the icon size.
color: string, // Sets the icon color.
backgroundColor: string, // Sets the background color of the icon.
component: ReactNode // Defines a custom component in place of the icon.
}

badge​

Defines a small circle that displays a number or text and will be displayed on the right side of the item.

Type: object​

{
value: string, // Determines the value to be printed inside the badge.
// Setting text and badge colors
color: {
text: string, // Sets the text color
badge: string // Sets the badge color
}
}

color​

Sets the color of the item title and description.
The color in the description is only compatible with Android.

Type: object​

{
title: string, // Sets the color of the item title.
description: string // Sets the color of the item description. Only supported Android.
}

separator​

Sets the separator properties of the above item.

Type: object​

{
start: number, // Defines where the separator will start.
index: number, // Used in conjunction with FlatList, it receives the index of the item in question.
data: [{}, {}] // Used in conjunction with FlatList, it receives an array of 2 items. The first item must be the previous item in the FlatList, and the second item must be the Item in question.
}

swipeable​

onfigure up to 3 actions on the left side and up to 3 actions on the right side.

Type: object​

{
// Set up to 3 actions on the left side for swiping.
left: [{
// Defines the icon to be used on the swipeable.
icon: {
name: string, // Defines the icon name.
type: "antdesign" | "entypo" | "evilicons" | "feather" | "font-awesome" | "font-awesome5" | "font-awesome5pro" | "fontisto" | "foundation" | "ionicons" | "material-community" | "material" | "octicons" | "simplelineicons" | "zocial" | "sfsymbol", // Sets the icon type.
size: number, // Sets the icon size.
color: string, // Sets the icon color.
component: ReactNode // Defines a custom component in place of the icon.
},
backgroundColor: string, // Sets the background color of the swipeable.
closeOnPress: boolean, // Sets the slider to close when clicked.
onPress: async () => void // Performing an action when clicking the swipeable. @returns void
}],
// Set up to 3 actions on the right side for swiping.
right: [{
// Defines the icon to be used on the swipeable.
icon: {
name: string, // Defines the icon name.
type: "antdesign" | "entypo" | "evilicons" | "feather" | "font-awesome" | "font-awesome5" | "font-awesome5pro" | "fontisto" | "foundation" | "ionicons" | "material-community" | "material" | "octicons" | "simplelineicons" | "zocial" | "sfsymbol", // Sets the icon type.
size: number, // Sets the icon size.
color: string, // Sets the icon color.
component: ReactNode // Defines a custom component in place of the icon.
},
backgroundColor: string, // Sets the background color of the swipeable.
closeOnPress: boolean, // Sets the slider to close when clicked.
onPress: async () => void // Performing an action when clicking the swipeable. @returns void
}],
byMethod: boolean, // Determines whether sliding can only occur through the openLeftActions or
heightEffect: number, // Sets the height of the effect,
onBegan: async () => void // Performing an action when clicking the swipeable item. @returns void
}