import React from "react";
import { Animated, StyleSheet, View } from "react-native";
import Indicator, { IndicatorProps } from "./indicator";
export type ActivityIndicatorProps = IndicatorProps & {
size?: number;
color?: string;
count?: number;
};
const ActivityIndicator = React.memo(
React.forwardRef(
(
{
size = 30,
count = 12,
color = "rgb(0, 0, 0)",
...rest
}: ActivityIndicatorProps,
ref: any
): JSX.Element => {
const _renderComponent = React.useCallback(
({
index,
count,
progress,
}: {
index: number;
count: number;
progress: Animated.Value;
}) => {
let angle = (index * 360) / count;
let layerStyle = {
transform: [
{
rotate: angle + "deg",
},
],
};
let inputRange = Array.from(
new Array(count + 1),
(item, index) => index / count
);
let outputRange = Array.from(new Array(count), (item, index) =>
Math.max(1.0 - index * (1 / (count - 1)), 0)
);
for (let j = 0; j < index; j++) {
outputRange.unshift(outputRange.pop() as number);
}
outputRange.unshift(...outputRange.slice(-1));
let barStyle = {
width: size / 10,
height: size / 4,
borderRadius: size / 20,
backgroundColor: color,
opacity: progress.interpolate({ inputRange, outputRange }),
};
return (
);
},
[size, color]
);
const { style, ...props } = rest;
return (
);
}
)
);
export default ActivityIndicator;