import React from "react";
import { Animated, StyleSheet, View } from "react-native";
import Indicator, { IndicatorProps } from "./indicator";
export type PulseIndicatorProps = IndicatorProps & {
size?: number;
color?: string;
};
/** A component used to provide a visual cue that an action is either processing, awaiting a course of change or a result. */
const PulseIndicator = React.memo(
React.forwardRef(
(
{ size = 30, color = "rgb(0, 0, 0)", ...rest }: PulseIndicatorProps,
ref: any
): JSX.Element => {
const _renderComponent = React.useCallback(
({
index,
count,
progress,
}: {
index: number;
count: number;
progress: Animated.Value;
}) => {
let pulseStyle = {
height: size,
width: size,
borderRadius: size / 2,
backgroundColor: color,
transform: [
{
scale: progress.interpolate({
inputRange: [0, 0.67, 1],
outputRange: index ? [0.4, 0.6, 0.4] : [0.4, 0.6, 1.0],
}),
},
],
opacity: progress.interpolate({
inputRange: [0, 0.67, 1],
outputRange: index ? [1.0, 1.0, 1.0] : [0.5, 0.5, 0.0],
}),
};
return (
);
},
[size, color]
);
const { style, ...props } = rest;
return (
);
}
)
);
export default PulseIndicator;