2.0.1 • Published 12 months ago

@lunacap/bottom-sheet-modal v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

React Native Bottom Sheet Modal Library

A simple, easy to use and performant bottom sheet library for react-native.

Installation

Install by running

npm install @lunacap/bottom-sheet-modal

yarn add @lunacap/bottom-sheet-modal

In the libraries dependencies, react-native-reanimated and react-native-safe-area-context packages are utilized so if they are not installed in your project you need to install these packages and add their native components as well.

Usage

The modal utilizes states for displaying. It can be connected to redux or you can use local states.

The BottomSheetProps type is the definition for the visible modal and the BottomSheetModalProps type is the definiton for the container component.

This library allows you to stack two bottom sheets on top of each other.

const App = () => {
  const bottomSheetRef = useRef<BottomSheetModalRef>(null);
  return (
    <View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
      <Button
        title={'Open First Bottom Sheet'}
        onPress={() => {
          bottomSheetRef.current?.expandFirst();
        }}
      />
      <BottomSheetModal
        ref={bottomSheetRef}
        firstPaperProps={{
          header: (
            <View
              style={{
                width: '100%',
                paddingHorizontal: 12,
                paddingVertical: 16,
                backgroundColor: 'black',
                borderTopLeftRadius: 16,
                borderTopRightRadius: 16,
              }}>
              <Text style={{fontSize: 16, lineHeight: 24, color: 'white'}}>
                Header First
              </Text>
            </View>
          ),
          children: (
            <View
              style={{
                width: '100%',
                height: 300,
                backgroundColor: 'black',
              }}>
              <Button
                title={'OPEN SECOND'}
                onPress={() => {
                  bottomSheetRef.current?.expandSecond();
                }}
              />
            </View>
          ),
        }}
        secondPaperProps={{
          children: (
            <View
              style={{
                backgroundColor: 'yellow',
                borderRadius: 16,
                width: '100%',
                height: 200,
              }}>
              <Button
                title={'Disable overlay'}
                onPress={() => bottomSheetRef.current?.disableOverlay()}
              />
            </View>
          ),
        }}
      />
    </View>
  );
};

BottomSheetModal Component Props

Prop NameTypeRequiredDescription
firstPaperPropsBottomSheetPaperPropsConfiguration for the primary bottom sheet
secondPaperPropsBottomSheetPaperProps-Configuration for the secondary (stacked) bottom sheet
onOverlayPress() => void-Callback function triggered when the overlay is pressed
overlayReact.ReactNode-Custom overlay component to replace the default overlay
isOverlayDisabledboolean-When true, disables overlay interaction

BottomSheetPaperProps

Prop NameTypeRequiredDescription
childrenReact.ReactNodeContent to be rendered inside the bottom sheet
headerReact.ReactNode-Custom header component rendered at the top of the sheet

BottomSheetModalRef Methods

Method NameParametersDescription
expandFirst(target?: number)Opens the first bottom sheet. Optional target position can be specified
expandSecond(target?: number)Opens the second bottom sheet. Optional target position can be specified
collapseFirst-Closes the first bottom sheet
collapseSecond-Closes the second bottom sheet
enableOverlay-Enables overlay interaction
disableOverlay-Disables overlay interaction

Properties Available Through Ref

Property NameTypeDescription
paperStateBottomSheetPaperStateCurrent state of the bottom sheet papers
overlayStatebooleanCurrent state of the overlay (enabled/disabled)
2.0.1

12 months ago

2.0.0

12 months ago

1.1.0

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago