import React, { memo, useMemo } from 'react' import { ActivityIndicator, ActivityIndicatorProps } from 'react-native' import { BricksLoader, BricksLoaderType } from './BricksLoader' import { BubblesLoader, BubblesLoaderType } from './BubblesLoader' import { CircleLoader, CircleLoaderType } from './CircleLoader' import { DiskLoader, DiskLoaderType } from './DiskLoader' type LoaderType = | { type: 'circle' isFlipped?: boolean color?: string size?: number thickness?: number } | { type: 'bubbles' color?: string size?: number } | { type: 'bricks' size?: number colors?: [string, string, string] containerSize?: number color?: string } | { type: 'disk' circleColor?: string containerColor?: string size?: number } | { type: 'default' color?: string size?: string | number } export const Loader = memo( ({ type, ...props }: LoaderType): JSX.Element => { const renderLoader = useMemo((): JSX.Element => { if (type === 'circle') { return } else if (type === 'bubbles') { return } else if (type === 'bricks') { return } else if (type === 'disk') { return } else { return } }, [type, props]) return renderLoader }, (prevProps, nextProps) => { return prevProps.type === nextProps.type && prevProps.size === nextProps.size } ) Loader.displayName = 'Loader'