Skip to content

Commit b31848d

Browse files
authored
Merge pull request #27 from filecoin-project/bp/progress-component
[UXIT-3443] Progress bar component
2 parents 42be31b + d68d121 commit b31848d

File tree

4 files changed

+32
-28
lines changed

4 files changed

+32
-28
lines changed

src/components/ui/card.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type CardContentProps = {
1616
}
1717

1818
function CardWrapper({ children }: CardWrapperProps) {
19-
return <div className="bg-zinc-900 p-6 rounded-lg">{children}</div>
19+
return <div className="bg-zinc-900 p-6 rounded-lg space-y-6">{children}</div>
2020
}
2121

2222
function CardHeader({ title, status }: CardHeaderProps) {

src/components/ui/progress-bar.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
type ProgressBarProps = {
2+
progress: number
3+
}
4+
5+
function ProgressBar({ progress }: ProgressBarProps) {
6+
if (progress < 0 || progress > 100) {
7+
console.error('ProgressBar: progress must be between 0 and 100, received:', progress)
8+
}
9+
10+
return (
11+
<div className="flex items-center">
12+
<div className="flex-1 h-1.5 bg-brand-100 rounded-full overflow-hidden">
13+
<div
14+
className="bg-brand-50 h-full rounded-full transition-all duration-300"
15+
style={{ width: `${progress}%` }}
16+
/>
17+
</div>
18+
</div>
19+
)
20+
}
21+
22+
export { ProgressBar }

src/components/upload/upload-progress.css

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,7 @@
149149
color: white;
150150
}
151151

152-
.step-content {
153-
flex: 1;
154-
min-width: 0;
155-
}
152+
156153

157154
.step-header {
158155
display: flex;

src/components/upload/upload-progress.tsx

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useCallback } from 'react'
22
import './upload-progress.css'
33
import { CardHeader, CardWrapper } from '../ui/card.tsx'
4+
import { ProgressBar } from '../ui/progress-bar.tsx'
45

56
export interface UploadProgress {
67
step: 'creating-car' | 'uploading-car' | 'checking-readiness' | 'announcing-cids' | 'finalizing-transaction'
@@ -133,17 +134,10 @@ export default function UploadProgress({
133134
{/* Combined first stage: creating-car + checking-readiness + uploading-car */}
134135
{progress.find((p) => p.step === 'creating-car') && (
135136
<CardWrapper>
136-
<div className="step-content">
137-
<CardHeader status={getCombinedFirstStageStatus()} title={getStepLabel('creating-car')} />
138-
{getCombinedFirstStageStatus() === 'in-progress' && (
139-
<div className="progress-bar-container">
140-
<div className="progress-bar">
141-
<div className="progress-fill" style={{ width: `${getCombinedFirstStageProgress()}%` }} />
142-
</div>
143-
<span className="progress-text">{getCombinedFirstStageProgress()}%</span>
144-
</div>
145-
)}
146-
</div>
137+
<CardHeader status={getCombinedFirstStageStatus()} title={getStepLabel('creating-car')} />
138+
{getCombinedFirstStageStatus() === 'in-progress' && (
139+
<ProgressBar progress={getCombinedFirstStageProgress()} />
140+
)}
147141
</CardWrapper>
148142
)}
149143

@@ -156,18 +150,9 @@ export default function UploadProgress({
156150
.map((step) => {
157151
return (
158152
<CardWrapper key={step.step}>
159-
<div className="step-content">
160-
<CardHeader status={step.status} title={getStepLabel(step.step)} />
161-
{step.status === 'in-progress' && (
162-
<div className="progress-bar-container">
163-
<div className="progress-bar">
164-
<div className="progress-fill" style={{ width: `${step.progress}%` }} />
165-
</div>
166-
<span className="progress-text">{step.progress}%</span>
167-
</div>
168-
)}
169-
{step.error && <div className="error-message">{step.error}</div>}
170-
</div>
153+
<CardHeader status={step.status} title={getStepLabel(step.step)} />
154+
{step.status === 'in-progress' && <ProgressBar progress={step.progress} />}
155+
{step.error && <div className="error-message">{step.error}</div>}
171156
</CardWrapper>
172157
)
173158
})}

0 commit comments

Comments
 (0)