@ticmakers-react-native/onboarding
Version:
TIC Makers - React Native Onboarding
617 lines (523 loc) • 12.7 kB
TypeScript
import * as React from 'react'
import { Animated, FlatListProps } from 'react-native'
import { IImageProps, TypeImageSource } from '@ticmakers-react-native/image'
import { TypeComponent, TypeStyle } from '@ticmakers-react-native/core'
import { IPaginationProps, TypePaginationPosition } from './../../index'
/**
* Type to define the status bar styles
*/
export type TypeOnboardingStatusBarStyle = 'default' | 'light-content' | 'dark-content' | undefined
/**
* Interface to define the properties of a page
* @interface IOnboardingPage
*/
export interface IOnboardingPage {
/**
* A background color. The color of the font and dots adapts to the background color
* @type {string}
* @default white
*/
backgroundColor?: string
/**
* A background image for the page
* @type {TypeImageSource}
*/
backgroundImage?: TypeImageSource
/**
* A React Component or Element to show the page
* @type {TypeComponent}
*/
Component?: TypeComponent
/**
* Set a custom style to the container of the page
* @type {TypeStyle}
*/
containerStyle?: TypeStyle
/**
* A React-Native component to display at the header of the page
* @type {TypeComponent}
*/
header?: TypeComponent
/**
* Apply a custom style to the header
* @type {TypeStyle}
*/
headerStyle?: TypeStyle
/**
* A React-Native component to display at the top of the page
* @type {TypeComponent}
*/
image?: TypeComponent | IImageProps
/**
* Apply a custom style to the image
* @type {TypeStyle}
*/
imageStyle?: TypeStyle
/**
* A string OR a React-Native component
* @type {string}
*/
title?: string
/**
* Modify styles of a specific page's title
* @type {TypeStyle}
*/
titleStyle?: TypeStyle
/**
* A string OR a React-Native component
* @type {string}
*/
subtitle?: string
/**
* Modify styles of a specific page's subtitle
* @type {TypeStyle}
*/
subtitleStyle?: TypeStyle
}
/**
* Interface to define the props of the Onboarding component
* @interface IOnboardingProps
*/
export interface IOnboardingProps {
/**
* A React-Native component to replace the done button
* @type {TypeComponent}
*/
DoneComponent?: TypeComponent
/**
* A React-Native component to replace the pagination dot
* @type {TypeComponent}
*/
DotComponent?: TypeComponent
/**
* A React-Native component to replace the next button
* @type {TypeComponent}
*/
NextComponent?: TypeComponent
/**
* A React-Native component to replace the previous button
* @type {TypeComponent}
*/
PrevComponent?: TypeComponent
/**
* A React-Native component to replace the skip button
* @type {TypeComponent}
*/
SkipComponent?: TypeComponent
/**
* Font scaling can cause troubles with high-resolution screens. You may want to disable it
* @type {boolean}
* @default true
*/
allowFontScalingButtons?: boolean
/**
* Font scaling can cause troubles with high-resolution screens. You may want to disable it
* @type {boolean}
* @default true
*/
allowFontScalingText?: boolean
/**
* A React-Animated value to define background animation
* @type {(Animated.Value | Animated.ValueXY)}
*/
backgroundColorAnim?: Animated.Value | Animated.ValueXY
/**
* A number for the height of the bottom bar
* @type {number}
* @default 60
*/
bottomBarHeight?: number
/**
* A bool flag indicating whether the bottom bar should be highlighted
* @type {boolean}
* @default true
*/
bottomBarHighlight?: boolean
/**
* Set a custom style to the bottom bar (pagination style)
* @type {TypeStyle}
*/
bottomBarStyle?: TypeStyle
/**
* Override the default container styles
* @type {object}
*/
containerStyle?: object
/**
* A bool flag indicating whether the status bar should change with the background color
* @type {boolean}
* @default true
*/
controlStatusBar?: boolean
/**
* A number to define what is the current page
* @type {number}
* @default 0
*/
currentPage?: number
/**
* Use 3 pages by default
* @type {boolean}
* @default false
*/
defaultPages?: boolean
/**
* Define a text to show in done button
* @type {string}
*/
doneLabel?: string
/**
* Define the position where the done button will be displayed
* @type {TypePaginationPosition}
* @default right
*/
donePosition?: TypePaginationPosition
/**
* Apply a custom style to the done button
* @type {TypeStyle}
*/
doneStyle?: TypeStyle
/**
* Apply a custom color to the pagination Dot selected
* @type {string}
*/
dotColorSelected?: string
/**
* Apply a custom style to the pagination Dot selected
* @type {TypeStyle}
*/
dotSelectedStyle?: TypeStyle
/**
* Apply a custom color to all pagination Dot
* @type {string}
*/
dotsColor?: string
/**
* Define the position where the pagination dots will be displayed
* @type {TypePaginationPosition}
* @default center
*/
dotsPosition?: TypePaginationPosition
/**
* Apply a size to the pagination dots
* @type {number}
*/
dotsSize?: number
/**
* Apply a custom style to the pagination dots
* @type {TypeStyle}
*/
dotsStyle?: TypeStyle
/**
* Additional props for the <FlatList> which holds all the pages
* @type {object}
*/
flatlistProps?: object
/**
* Apply a custom style to the header container
* @type {TypeStyle}
*/
headerContainerStyle?: TypeStyle
/**
* Define a custom height to the pages
* @type {number}
*/
height?: number
/**
* Set true for hide the done button
* @type {boolean}
* @default false
*/
hideDone?: boolean
/**
* Set true for hide the pagination dots
* @type {boolean}
* @default false
*/
hideDots?: boolean
/**
* Set true to hide the next button
* @type {boolean}
* @default false
*/
hideNext?: boolean
/**
* Set true to hide the skip button
* @type {boolean}
* @default false
*/
hideSkip?: boolean
/**
* Override the default image container styles
* @type {object}
*/
imageContainerStyle?: object
/**
* A text to show in the next button
* @type {string}
* @default Next
*/
nextLabel?: string
/**
* Define the position where the next button will be displayed
* @type {TypePaginationPosition}
* @default right
*/
nextPosition?: TypePaginationPosition
/**
* Apply a custom style to the next button
* @type {TypeStyle}
*/
nextStyle?: TypeStyle
/**
* A function that receives the page index as a parameter on page change
* @type {Function}
*/
onChangePage?: (index: number) => any
/**
* A callback that is fired after the Onboarding is completed
* @type {Function}
*/
onDone?: () => any
/**
* A callback that is fired if the Onboarding is skipped
* @type {Function}
*/
onSkip?: () => any
/**
* A array of pages to show in the component
* @type {IOnboardingPage[]}
*/
pages: IOnboardingPage[]
/**
* Define additional props for the pagination
* @type {IPaginationProps}
*/
paginationProps?: IPaginationProps
/**
* Define a text to show in previous button
* @type {string}
*/
prevLabel?: string
/**
* Define the position where the previous button will be displayed
* @type {TypePaginationPosition}
* @default left
*/
prevPosition?: TypePaginationPosition
/**
* Apply a custom style to the previous button
* @type {TypeStyle}
*/
prevStyle?: TypeStyle
/**
* A number to define what is the previous page
* @type {number}
*/
previousPage?: number
/**
* A text to show in the skip button
* @type {string}
* @default Skip
*/
skipLabel?: string
/**
* Define the position where the next button will be displayed
* @type {TypePaginationPosition}
* @default left
*/
skipPosition?: TypePaginationPosition
/**
* Apply a custom style to the skip button
* @type {TypeStyle}
*/
skipStyle?: TypeStyle
/**
* Index number of the page that will be displayed when the skip button is pressed
* @type {number}
*/
skipToPage?: number
/**
* Define a custom status bar style
* @type {TypeOnboardingStatusBarStyle}
* @default default
*/
statusBarStyle?: TypeOnboardingStatusBarStyle
/**
* Override the default subtitle styles
* @type {object}
*/
subtitleStyle?: object
/**
* Override the default title styles
* @type {object}
*/
titleStyle?: object
/**
* The duration in milliseconds for the animation of the background color for the page transition
* @type {number}
* @default 500
*/
transitionAnimationDuration?: number
/**
* Use to show the previous button
* @type {boolean}
*/
usePrevious?: boolean
/**
* Define a custom width to the pages
* @type {number}
*/
width?: number
}
/**
* Interface to define the state of the Onboarding component
* @interface IOnboardingState
*/
export interface IOnboardingState {
/**
* A React-Animated value to define background animation
* @type {(Animated.Value | Animated.ValueXY)}
*/
backgroundColorAnim: Animated.Value | Animated.ValueXY
/**
* A number to define what is the current page
* @type {number}
* @default 0
*/
currentPage: number
/**
* Define a custom height to the pages
* @type {number}
*/
height: number
/**
* A number to define what is the previous page
* @type {number}
*/
previousPage: number
/**
* Define a custom width to the pages
* @type {number}
*/
width: number
}
/**
* Class to define the component Onboarding
* @class Onboarding
* @extends {React.Component<IOnboardingProps, IOnboardingProps>}
*/
declare class Onboarding extends React.Component<IOnboardingProps, IOnboardingProps> {
/**
* The reference to the FlatList component
* @type {FlatList}
*/
public flatList?: any
/**
* Hotfix to swipe the pages
* @type {{ itemVisiblePercentThreshold: number }}
*/
public itemVisibleHotfix?: {
itemVisiblePercentThreshold: number,
}
/**
* Method that fire when the component is updated
* @returns {void}
*/
public componentDidUpdate(): void
/**
* Method that renders the component
* @returns {Element}
*/
public render(): TypeComponent
/**
* Method that define 3 pages by default
* @returns {IOnboardingPage[]}
*/
public defaultPages(): IOnboardingPage[]
/**
* Method that renders the page in the component
* @returns {TypeComponent}
*/
public renderPage(data?: any): TypeComponent
/**
* Method to get the current page
* @returns {(IOnboardingPage | undefined)}
*/
public getCurrentPage(): IOnboardingPage | undefined
/**
* Method to get the previous page
* @returns {(IOnboardingPage | undefined)}
*/
public getPreviousPage(): IOnboardingPage | undefined
/**
* Method to advance to the next page
* @returns {void}
*/
public goNext(): void
/**
* Method to back to the previous page
* @returns {void}
*/
public goPrev(): void
/**
* Method that fire when the button Done is pressed
* @private
* @returns {void}
*/
private _onDone(): void
/**
* Method that fire when the button Skip is pressed
* @private
* @returns {void}
*/
private _onSkip(): void
/**
* Method that fire when a pages change, this returns the current index page
* @private
* @param {number} [index] The current index page
* @returns {void}
*/
private _onChangePage(index: number): void
/**
* Method thar fire when a page is swiped
* @private
* @param {object} data Event of the flatlist change
* @returns {void}
*/
private _onSwipePageChange(data: any): void
/**
* Method that fire when the layout is changed
* @private
* @returns {void}
*/
private _onLayout(): void
/**
* Method that changes to the last page
* @private
* @returns {void}
*/
private _skipToLastPage(): void
/**
* Method that process the props of the component
* @private
* @returns {IOnboardingProps}
*/
private _processProps(): IOnboardingProps
/**
* Method that process the props for the FlatList
* @private
* @returns {FlatListProps<{}>}
*/
private _flatlistProps(): FlatListProps<{}>
/**
* Method that process the props for the pagination
* @private
* @returns {IPaginationProps}
*/
private _paginationProps(): IPaginationProps
}
/**
* Export default
*/
export default Onboarding