New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

react-native-infinite-pager

Package Overview
Dependencies
Maintainers
0
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-native-infinite-pager

A pager component that renders pages dynamically. Powered by reanimated.

  • 0.3.18
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
0
Created
Source

React Native Infinite Pager

An infinitely-swipeable horizontal and vertical pager component.
Fully native interactions powered by Reanimated 2 and React Native Gesture Handler

InfinitePager demo

Install

  1. Follow installation instructions for reanimated and react-native-gesture-handler
  2. npm install or yarn add react-native-infinite-pager
  3. import InfinitePager from 'react-native-infinite-pager'

Props

type PageProps = {
  index: number;
  focusAnim: Animated.DerivedValue<number>;
  isActive: boolean;
  pageWidthAnim: Animated.SharedValue<number>;
  pageAnim: Animated.SharedValue<number>;
}

type PageComponentType = (props: PageProps) => JSX.Element | null;

type AnyStyle = StyleProp<ViewStyle> | ReturnType<typeof useAnimatedStyle>;

type Props = {
  PageComponent?:
    | PageComponentType
    | React.MemoExoticComponent<PageComponentType>;
  renderPage?: PageComponentType
  pageCallbackNode?: Animated.SharedValue<number>;
  onPageChange?: (page: number) => void;
  pageBuffer?: number; 
  style?: AnyStyle;
  pageWrapperStyle?: AnyStyle;
  pageInterpolator?: typeof defaultPageInterpolator;
  minIndex?: number;
  maxIndex?: number;
  initialIndex?: number;
  simultaneousGestures?: (ComposedGesture | GestureType)[];
  gesturesDisabled?: boolean;
  animationConfig?: Partial<WithSpringConfig>;
  vertical?: boolean;
  flingVelocity?: number;
  preset?: Preset;
};
NameTypeDescription
PageComponentPageComponentTypeComponent to be rendered as each page (either PageComponent OR renderPage must be defined, but not both — choose the version that suits your use case).
renderPagePageComponentTypeFunction to be called to render each page.
onPageChange(page: number) => voidCallback invoked when the current page changes.
styleAnyStyleStyle of the pager container.
pageWrapperStyleAnyStyleStyle of the container that wraps each page.
pageCallbackNodeAnimated.SharedValue<number>SharedValue that represents the index of the current page.
pageBuffernumberNumber of pages to render on either side of the active page.
pageInterpolator(params: PageInterpolatorParams) => ReturnType<typeof useAnimatedStyle>Interpolator for custom page animations.
minIndexnumberMinimum page index for non-infinite behavior (optional).
maxIndexnumberMaximum page index for non-infinite behavior (optional).
initialIndexnumberIndex that the pager initializes at (optional).
simultaneousGestures(ComposedGesture | GestureType)[]Simultaneous RNGH gestures.
gesturesDisabledbooleanDisables pan gestures.
animationConfigPartial<WithSpringConfig>Customizes paging animations.
verticalbooleanSets page gesture to the vertical axis.
flingVelocitynumberDetermines sensitivity of a page-turning "fling" at the end of the gesture.
presetPresetUses a pre-configured page interpolator.

Imperative Api

type ImperativeApiOptions = {
  animated?: boolean;
};

export type InfinitePagerImperativeApi = {
  setPage: (index: number, options: ImperativeApiOptions) => void;
  incrementPage: (options: ImperativeApiOptions) => void;
  decrementPage: (options: ImperativeApiOptions) => void;
};
NameTypeDescription
incrementPage(options: ImperativeApiOptions) => voidGo to next page.
decrementPage(options: ImperativeApiOptions) => voidGo to previous page.
setPage(index: number, options: ImperativeApiOptions) => voidGo to page of given index.

Example

https://snack.expo.dev/@computerjazz/infinite-pager

import React from "react";
import { Text, View, StyleSheet, TouchableOpacity } from "react-native";
import InfinitePager from "react-native-infinite-pager";

const NUM_ITEMS = 50;

function getColor(i: number) {
  const multiplier = 255 / (NUM_ITEMS - 1);
  const colorVal = Math.abs(i) * multiplier;
  return `rgb(${colorVal}, ${Math.abs(128 - colorVal)}, ${255 - colorVal})`;
}

const Page = ({ index }: { index: number }) => {
  return (
    <View
      style={[
        styles.flex,
        {
          alignItems: "center",
          justifyContent: "center",
          backgroundColor: getColor(index),
        },
      ]}
    >
      <Text style={{ color: "white", fontSize: 80 }}>{index}</Text>
    </View>
  );
};

export default function App() {
  return (
    <View style={styles.flex}>
      <InfinitePager
        PageComponent={Page}
        style={styles.flex}
        pageWrapperStyle={styles.flex}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  flex: { flex: 1 },
});

Keywords

FAQs

Package last updated on 17 Aug 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc