checkpoint

pull/134/head
Alex Kern 1 year ago
parent def5707932
commit 9f1317496c
No known key found for this signature in database
GPG Key ID: EF051FACCACBEE25

@ -1,37 +0,0 @@
import React from 'react'
import ErrorStore from '../stores/ErrorStore'
import Spinner from './Spinner'
export default class ErrorPage extends React.Component {
constructor() {
super()
this.state = ErrorStore.getState()
this._onChange = () => {
this.setState(ErrorStore.getState())
}
}
componentDidMount() {
ErrorStore.listen(this._onChange)
}
componentWillUnmount() {
ErrorStore.unlisten(this._onChange)
}
render() {
return (
<div className="page">
<Spinner dir="up" />
<h1 className="with-subtitle">FilePizza</h1>
<p className="subtitle">
<strong>{this.state.status}:</strong> {this.state.message}
</p>
{this.state.stack ? <pre>{this.state.stack}</pre> : null}
</div>
)
}
}

@ -1,43 +0,0 @@
import React from 'react'
import classnames from 'classnames'
function formatProgress(dec) {
return `${(dec * 100).toPrecision(3)}%`
}
export default class ProgressBar extends React.Component {
render() {
const failed = this.props.value < 0
const inProgress = this.props.value < 1 && this.props.value >= 0
const classes = classnames('progress-bar', {
'progress-bar-failed': failed,
'progress-bar-in-progress': inProgress,
'progress-bar-small': this.props.small,
})
const formatted = formatProgress(this.props.value)
return (
<div className={classes}>
{failed ? (
<div className="progress-bar-text">Failed</div>
) : inProgress ? (
<div className="progress-bar-inner" style={{ width: formatted }}>
<div className="progress-bar-text">{formatted}</div>
</div>
) : (
<div className="progress-bar-text">Delivered</div>
)}
</div>
)
}
}
ProgressBar.propTypes = {
value: React.PropTypes.number.isRequired,
small: React.PropTypes.bool,
}
ProgressBar.defaultProps = {
small: false,
}

@ -1,41 +0,0 @@
import React from 'react'
import classnames from 'classnames'
import { formatSize } from '../util'
export default class Spinner extends React.Component {
render() {
const classes = classnames('spinner', {
'spinner-animated': this.props.animated,
})
return (
<div className={classes}>
<img
alt={this.props.name || this.props.dir}
src={`/images/${this.props.dir}.png`}
className="spinner-image"
/>
{this.props.name === null ? null : (
<div className="spinner-name">{this.props.name}</div>
)}
{this.props.size === null ? null : (
<div className="spinner-size">{formatSize(this.props.size)}</div>
)}
</div>
)
}
}
Spinner.propTypes = {
dir: React.PropTypes.oneOf(['up', 'down']).isRequired,
name: React.PropTypes.string,
size: React.PropTypes.number,
animated: React.PropTypes.bool,
}
Spinner.defaultProps = {
name: null,
size: null,
animated: false,
}

@ -1,35 +0,0 @@
import React from 'react'
import QRCode from 'react-qr'
export default class Tempalink extends React.Component {
constructor() {
super()
this.onClick = this.onClick.bind(this)
}
onClick(e) {
e.target.setSelectionRange(0, 9999)
}
render() {
const url = `${window.location.origin}/${this.props.token}`
const shortUrl = `${window.location.origin}/download/${this.props.shortToken}`
return (
<div className="tempalink">
<div className="qr">
<QRCode text={url} />
</div>
<div className="urls">
<div className="long-url">
<input onClick={this.onClick} readOnly type="text" value={url} />
</div>
<div className="short-url">
or, for short: <span>{shortUrl}</span>
</div>
</div>
</div>
)
}
}

@ -33,12 +33,10 @@
"react": "^18.2.0",
"react-device-detect": "^1.17.0",
"react-dom": "^18.2.0",
"react-qr": "0.0.2",
"react-qr-code": "^1.1.1",
"streamsaver": "^2.0.6",
"tailwindcss": "^3.4.10",
"twilio": "^2.11.1",
"use-http": "^1.0.28",
"web-streams-polyfill": "^3.3.3",
"webrtcsupport": "^2.2.0",
"zod": "^3.23.8"

@ -17,12 +17,6 @@ dependencies:
express:
specifier: ^4.19.2
version: 4.19.2
fp-ts:
specifier: ^2.16.9
version: 2.16.9
io-ts:
specifier: ^2.2.21
version: 2.2.21(fp-ts@2.16.9)
ioredis:
specifier: ^4.28.5
version: 4.28.5
@ -4782,10 +4776,6 @@ packages:
engines: {node: '>= 0.6'}
dev: false
/fp-ts@2.16.9:
resolution: {integrity: sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==}
dev: false
/fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
dev: false
@ -5307,14 +5297,6 @@ packages:
loose-envify: 1.4.0
dev: false
/io-ts@2.2.21(fp-ts@2.16.9):
resolution: {integrity: sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==}
peerDependencies:
fp-ts: ^2.5.0
dependencies:
fp-ts: 2.16.9
dev: false
/ioredis@4.28.5:
resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==}
engines: {node: '>=6'}

Loading…
Cancel
Save