|
1 | | -import React, { FC, useEffect, useMemo, useState } from "react"; |
| 1 | +import React, { FC, useMemo } from "react"; |
2 | 2 | import classNames from "classnames"; |
3 | 3 |
|
4 | 4 | // Components |
@@ -81,47 +81,42 @@ const ProgressBar: FC<IProgressBarProps> = ({ |
81 | 81 | infoText, |
82 | 82 | label |
83 | 83 | }) => { |
84 | | - const [progressBarStatus, setProgressBarStatus] = useState<IProgressBarProps["status"] | "success">(status); |
85 | | - |
86 | 84 | const isDeterminate = type === "determinate"; |
87 | | - const isTypeRest = progressBarStatus === "rest"; |
| 85 | + const isTypeRest = status === "rest"; |
88 | 86 | const isPercentLowerThanMax = percent !== undefined && percent < 100; |
89 | | - const error = status === "error"; |
| 87 | + const isError = status === "error"; |
| 88 | + const isSuccess = percent === 100; |
| 89 | + const effectiveType = isError ? "determinate" : type; |
| 90 | + const isRestOrWarning = status === "rest" || status === "warning"; |
90 | 91 |
|
91 | 92 | const processedPercent = useMemo(() => { |
92 | 93 | let result = percent || 0; |
93 | 94 |
|
94 | | - if (result < 0 && !error) result = 0; |
95 | | - if (result >= 100 || error) result = 100; |
| 95 | + if (result < 0 && !isError) result = 0; |
| 96 | + if (result >= 100 || isError) result = 100; |
96 | 97 |
|
97 | 98 | return `${result}%`; |
98 | | - }, [percent, error]); |
99 | | - |
100 | | - useEffect(() => { |
101 | | - if (error) { |
102 | | - setProgressBarStatus("error"); |
103 | | - return; |
104 | | - } |
105 | | - |
106 | | - if (percent !== undefined && !error) { |
107 | | - if (percent >= 100 && progressBarStatus !== "success" && isDeterminate) { |
108 | | - setProgressBarStatus("success"); |
109 | | - } else if ((!isTypeRest && isPercentLowerThanMax && isDeterminate) || !isDeterminate) { |
110 | | - setProgressBarStatus("rest"); |
111 | | - } |
112 | | - } |
113 | | - }, [error, isTypeRest, status, percent, isDeterminate]); |
| 99 | + }, [percent, isError]); |
114 | 100 |
|
115 | 101 | return ( |
116 | 102 | <div |
117 | 103 | className={classNames( |
118 | | - `progressBar progressBar_type_${error ? "determinate" : type} progressBar_size_${size} progressBar_status_${progressBarStatus}`, |
119 | | - className |
| 104 | + "progressBar", |
| 105 | + `progressBar_type_${effectiveType}`, |
| 106 | + `progressBar_size_${size}`, |
| 107 | + className, |
| 108 | + { |
| 109 | + progressBar_status_error: isError, |
| 110 | + progressBar_status_success: isSuccess, |
| 111 | + progressBar_status_rest: isRestOrWarning |
| 112 | + } |
120 | 113 | )} |
121 | 114 | > |
122 | 115 | <Label text={label} size={helperTextAndLabelSizeMap[size]} infoText={infoText} /> |
123 | 116 | <div className="progressBar__track"> |
124 | | - {(isDeterminate || error) && <div className="progressBar__fill" style={{ width: processedPercent }} />} |
| 117 | + {(isDeterminate || isError) && ( |
| 118 | + <div className="progressBar__fill" style={{ width: processedPercent }} /> |
| 119 | + )} |
125 | 120 | <div className="progressBar__loadingBar" /> |
126 | 121 | </div> |
127 | 122 | <div className="progressBar__info"> |
|
0 commit comments