Eu tenho o seguinte código para mui v5 CircularProgress como ser capaz de mostrar 3 valores diferentes ao mesmo tempo?
export const StatusCircle: React.FC<Props> = ({ a, b, c }) => {
return (
<StyledBox>
<StyledCircularProgress size={50} thickness={4} variant='determinate' sx={{ color: 'red' }} value={a} />
<StyledCircularProgress size={50} thickness={4} variant='determinate' sx={{ color: 'green' }} value={b} />
<StyledCircularProgress size={50} thickness={4} variant='determinate' sx={{ color: 'yellow }} value={c} />
</StyledBox>
);
};
Primeiro, empilhe todos os três
CircularProgress
componentes uns sobre os outros. Para conseguir isso, defina a posição de cada um comoabsolute
, e dê ao elemento wrapper uma posição derelative
.Por padrão,
CircularProgress
tem uma rotação aplicada a ele que o faz começar de cima. Para o segundo e terceiroCircularProgress
, queremos que eles comecem onde o primeiro terminou. Para fazer isso, precisamos modificar a rotação do segundo e terceiroCircularProgress
componentes.Essa propriedade de rotação é adicionada diretamente ao estilo do elemento, não às suas classes. Portanto, você pode substituí-lo usando estilo embutido.
Para determinar onde a próxima cor deve começar, calcule a porcentagem de progresso colorida. Por exemplo, digamos que a primeira cor cobre 20% do progresso. Precisamos converter essa porcentagem em graus para corresponder ao layout circular. Se considerarmos 360 graus em um círculo completo, 20% corresponde a 72 graus. No entanto, devido à rotação padrão, precisamos ajustar esse valor. A subtração de 90 graus representa o ponto inicial, resultando em -18 graus para a segunda cor.
Para a terceira cor, aplicamos uma técnica semelhante, mas desta vez precisamos somar os valores da primeira e da segunda cor. Essa combinação nos dá o ponto de partida para colorir a terceira seção do progresso.
Estamos tendo problemas com cálculos de frações para decimais em JavaScript, é por isso que usamos
toFixed(2)
.