Skip to content

oneclick-llc/react-native-sheet

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

react-native-bottom-sheet

Native implementation of Bottom sheet

React Native Bottom Sheet

Installation

"react-native-sheet": "sergeymild/react-native-sheet#6.1.10"

Usage

import {
    FittedSheet, 
    attachScrollViewToFittedSheet,
    FittedSheetRef,
    presentFittedSheet,
    dismissFittedSheetsAll,
    dismissFittedPresented,
} from 'react-native-sheet';
import { ScrollView, TouchableOpacity } from 'react-native';


const RenderSheetComponent: React.FC = () => {
  const [isLoading, setLoading] = useState(true)
  
  useEffect(() => {
    setTimeout(() => setLoading(false), 1000)
  }, []) 
  
  if (isLoading) {
    return <View style={{height: 200}}/>
  }
  
  return (
    // if scrollView creates dynamically in bottom sheet (for example after loading)
    // you have call attachScrollViewToFittedSheet to enable nestedScroll
    <ScrollView onLayout={() => attachScrollViewToFittedSheet("textSheet")}/>
  )
}

const App: React.FC = () => {
  const sheetRef = useRef<FittedSheetRef>(null);

  return (
    <>
      <TouchableOpacity 
        onPress={() => {
            // show also accept params which will be passed to render function
            sheetRef.current?.show()
            // or you can call just pass the name of sheet which want to show 
            // in this case there is no need to store ref on Sheet
            presentFittedSheet("textSheet")
        }}
        children={<Text children="Show sheet</"/>}
      />
      
      <TouchableOpacity 
        onPress={() => {
            // dismiss presented and all in queue sheets without animation
            dismissFittedSheetsAll()
            
            // dismiss top presented sheet
            dismissFittedPresented()
        }}
        children={<Text children="Dismiss sheet</"/>}
      />


      <FittedSheet
        // can be any string.
        // with this name sheet can be dismissed or presented via methods by passing that name
        // `presentFittedSheet`, `dismissFittedSheet`
        name="textSheet"
        ref={sheetRef}
        onSheetDismiss={(paramsPassedToHideMethod) => {
            // called when sheet completely hided
        }}
        params={{
          // if max min should be setted as max height
          applyMaxHeightToMinHeight: true | false,
          // allow to dismiss
          dismissable: false | true,
          // top left right corner sheet view radius
          topLeftRightCornerRadius: 20,
          // background color of sheet view
          backgroundColor: 'purple',
          // max allowed height of sheet view
          maxHeight: 600,
          // min height of sheet view
          minHeight: 600,
          // max allowed width in portrait view
          maxPortraitWidth: 300
          // max allowed width in landscape view
          maxLandscapeWidth: 300,
          // should status bar on android be either dark of light
          isSystemUILight: false
        }}
        >
          // data which was passed to .show() method or in presentFittedSheet methods
          {(data) => <RenderSheetComponent/>)}
        // if you do not need data you can omit render function and pass just component
        <RenderSheetComponent/>
      </FittedSheet>
    </>
  )
}

More examples

More detailed examples may be found in example project

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

About

Native implementation of Bottom Sheet pattern

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 30.3%
  • Swift 27.4%
  • TypeScript 17.2%
  • Kotlin 10.1%
  • C++ 8.9%
  • Objective-C++ 2.7%
  • Other 3.4%