Merge branch 'nb/individual-progress'

nb/hide-http
Neeraj Baid 11 years ago
commit c7b266f797

@ -9,8 +9,11 @@ export default class ProgressBar extends React.Component {
render() { render() {
const failed = this.props.value < 0; const failed = this.props.value < 0;
const inProgress = this.props.value < 1 && this.props.value > 0;
const classes = classnames('progress-bar', { const classes = classnames('progress-bar', {
'progress-bar-failed': failed 'progress-bar-failed': failed,
'progress-bar-in-progress': inProgress,
'progress-bar-small': this.props.small
}) })
const formatted = formatProgress(this.props.value) const formatted = formatProgress(this.props.value)
@ -18,17 +21,23 @@ export default class ProgressBar extends React.Component {
return <div className={classes}> return <div className={classes}>
{failed {failed
? <div className="progress-bar-text">Failed</div> ? <div className="progress-bar-text">Failed</div>
: <div : inProgress ? <div
className="progress-bar-inner" className="progress-bar-inner"
style={{width: formatted}}> style={{width: formatted}}>
<div className="progress-bar-text"> <div className="progress-bar-text">
{formatted} {formatted}
</div> </div>
</div>} </div>
: <div className="progress-bar-text">Done</div>}
</div> </div>
} }
} }
ProgressBar.propTypes = { ProgressBar.propTypes = {
value: React.PropTypes.number.isRequired value: React.PropTypes.number.isRequired,
small: React.PropTypes.boolean
}
ProgressBar.defaultProps = {
small: false
} }

@ -1,5 +1,6 @@
import Spinner from './Spinner' import Spinner from './Spinner'
import DropZone from './DropZone' import DropZone from './DropZone'
import ProgressBar from './ProgressBar'
import React from 'react' import React from 'react'
import Tempalink from './Tempalink' import Tempalink from './Tempalink'
import UploadActions from '../actions/UploadActions' import UploadActions from '../actions/UploadActions'
@ -59,17 +60,20 @@ export default class UploadPage extends React.Component {
</div> </div>
case 'uploading': case 'uploading':
var keys = Object.keys(this.state.peerProgress)
keys.reverse()
return <div className="page"> return <div className="page">
<Spinner dir="up" animated {...this.state.file} /> <Spinner dir="up" animated {...this.state.file} />
<Tempalink token={this.state.token} />
<p>Send someone this link to download.</p> <p>Send someone this link to download.</p>
<p>This link will work as long as this page is open.</p> <p>This link will work as long as this page is open.</p>
<Tempalink token={this.state.token} />
{keys.length > 0 ? <p>People Downloading Your File</p> : <p></p>}
<div className="data"> <div className="data">
<div className="datum"><strong>In Progress:</strong> {this.state.inProgress}</div> { keys.map((key) => {
<div className="datum"><strong>Completed:</strong> {this.state.completed}</div> return <ProgressBar value={this.state.peerProgress[key]} small />
})}
</div> </div>
</div> </div>

@ -12,9 +12,7 @@ export default alt.createStore(class UploadStore {
this.status = 'ready' this.status = 'ready'
this.token = null this.token = null
this.file = null this.file = null
this.peerProgress = {}
this.inProgress = 0
this.completed = 0
} }
onUploadFile(file) { onUploadFile(file) {
@ -49,22 +47,24 @@ export default alt.createStore(class UploadStore {
let packet = this.file.getChunk(i) let packet = this.file.getChunk(i)
conn.send(packet) conn.send(packet)
i++ i++
this.peerProgress[peerID] = i/totalChunks
} }
conn.on('open', () => { conn.on('open', () => {
this.setState({ inProgress: this.inProgress + 1 })
sendNextChunk() sendNextChunk()
this.setState({ peerProgress: this.peerProgress })
}) })
conn.on('data', (data) => { conn.on('data', (data) => {
if (data === 'more') sendNextChunk() if (data === 'more') sendNextChunk()
this.setState({ peerProgress: this.peerProgress })
}) })
conn.on('close', () => { conn.on('close', () => {
this.setState({ if (this.peerProgress[peerID] < 1) {
inProgress: this.inProgress - 1, this.peerProgress[peerID] = -1
completed: this.completed + (i === totalChunks ? 1 : 0) }
}) this.setState({ peerProgress: this.peerProgress })
}) })
} }

@ -6,6 +6,7 @@ light-blue = #40C0CB
light-gray = #EEE light-gray = #EEE
light-green = #AEE239 light-green = #AEE239
light-red = #E23430 light-red = #E23430
light-yellow = #FFE476
red = #C40D08 red = #C40D08
@keyframes rotate { @keyframes rotate {
@ -171,7 +172,7 @@ p {
.progress-bar { .progress-bar {
height: 60px height: 60px
overflow: hidden overflow: hidden
background: beige background: green
.progress-bar-inner { .progress-bar-inner {
float: left float: left
@ -182,10 +183,9 @@ p {
} }
.progress-bar-text { .progress-bar-text {
float: right
font: 14px/60px "Quicksand", sans-serif font: 14px/60px "Quicksand", sans-serif
color: white color: white
margin-right: 5px text-align: center
text-transform: uppercase text-transform: uppercase
} }
@ -194,9 +194,32 @@ p {
box-shadow: inset 0 1px 1px light-red, 0 1px 1px light-gray box-shadow: inset 0 1px 1px light-red, 0 1px 1px light-gray
.progress-bar-text { .progress-bar-text {
float: none
text-align: center text-align: center
margin-right: 0 }
}
&.progress-bar-in-progress {
background: beige
.progress-bar-inner {
background: #FFCC00
box-shadow: inset 0 1px 1px light-yellow
}
.progress-bar-text {
color: black
float: right
margin-right: 5px
}
}
&.progress-bar-small {
height: 30px
width: 50%
margin: 8px auto
border-radius: 5px
.progress-bar-text {
line-height: 30px
} }
} }
} }

Loading…
Cancel
Save