Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Status bar error state improvements #3299

Merged
merged 8 commits into from Nov 15, 2021
11 changes: 0 additions & 11 deletions examples/dev/Dashboard.html
Expand Up @@ -16,24 +16,13 @@
margin: auto;
}

button,
input {
color: green;
font-size: 30px;
text-align: right;
border: 2px solid purple;
}

Murderlon marked this conversation as resolved.
Show resolved Hide resolved
/* css to make sure that Dashboard's css overrides page css */
ul {
margin: 60px;
}
li {
margin: 60px;
}
a {
color: purple;
}
</style>
</head>

Expand Down
17 changes: 10 additions & 7 deletions packages/@uppy/dashboard/src/components/FileItem/FileInfo/index.js
Expand Up @@ -91,22 +91,25 @@ const ErrorButton = ({ file, onClick }) => {
}

module.exports = function FileInfo (props) {
const { file } = props
return (
<div
className="uppy-Dashboard-Item-fileInfo"
data-uppy-file-source={props.file.source}
data-uppy-file-source={file.source}
>
{renderFileName(props)}
<div className="uppy-Dashboard-Item-status">
{renderAuthor(props)}
{renderFileSize(props)}
{ReSelectButton(props)}
<div className="uppy-Dashboard-Item-fileName">
{renderFileName(props)}
<ErrorButton
file={props.file}
file={file}
// eslint-disable-next-line no-alert
onClick={() => alert(props.file.error)} // TODO: move to a custom alert implementation
/>
</div>
<div className="uppy-Dashboard-Item-status">
{renderAuthor(props)}
{renderFileSize(props)}
{ReSelectButton(props)}
</div>
</div>
)
}
Expand Up @@ -17,6 +17,15 @@
}
}

.uppy-Dashboard-Item-fileName {
display: flex;
align-items: baseline;

button {
margin-left: 5px;
}
}

.uppy-Dashboard-Item-author {
color: $gray-600;
vertical-align: bottom;
Expand Down
11 changes: 6 additions & 5 deletions packages/@uppy/dashboard/src/components/FileItem/index.scss
Expand Up @@ -143,21 +143,22 @@

.uppy-Dashboard-Item-errorDetails {
position: relative;
top: -1px;
top: 0;
display: inline-block;
width: 12px;
height: 12px;
width: 13px;
height: 13px;
color: $white;
font-weight: 600;
font-size: 8px;
font-size: 10px;
line-height: 12px;
text-align: center;
vertical-align: middle;
background-color: $gray-500;
border-radius: 50%;
border: none;
cursor: help;
appearance: none;
inset-inline-start: 6px;
inset-inline-start: 2px;
}

.uppy-Dashboard-Item-errorDetails::after {
Expand Down
32 changes: 18 additions & 14 deletions packages/@uppy/status-bar/src/Components.js
Expand Up @@ -247,7 +247,7 @@ function ProgressDetails (props) {
)
}

function UnknownProgressDetails (props) {
function FileUploadCount (props) {
const { i18n, complete, numUploads } = props

return (
Expand Down Expand Up @@ -328,7 +328,7 @@ function ProgressBarUploading (props) {
)
}
return (
<UnknownProgressDetails
<FileUploadCount
i18n={i18n}
complete={complete}
numUploads={numUploads}
Expand Down Expand Up @@ -389,7 +389,7 @@ function ProgressBarComplete (props) {
}

function ProgressBarError (props) {
const { error, i18n } = props
const { error, i18n, complete, numUploads } = props

function displayErrorAlert () {
const errorMessage = `${i18n('uploadFailed')} \n\n ${error}`
Expand All @@ -403,7 +403,7 @@ function ProgressBarError (props) {
role="alert"
title={i18n('uploadFailed')}
>
<div className="uppy-StatusBar-status">
<div className="uppy-StatusBar-status uppy-StatusBar-status--error">
<div className="uppy-StatusBar-statusPrimary">
<svg
aria-hidden="true"
Expand All @@ -415,19 +415,23 @@ function ProgressBarError (props) {
>
<path d="M4.278 5.5L0 1.222 1.222 0 5.5 4.278 9.778 0 11 1.222 6.722 5.5 11 9.778 9.778 11 5.5 6.722 1.222 11 0 9.778z" />
</svg>

{i18n('uploadFailed')}

<button
className="uppy-StatusBar-details"
aria-label={i18n('showErrorDetails')}
data-microtip-position="top-right"
data-microtip-size="medium"
onClick={displayErrorAlert}
type="button"
>
?
</button>
</div>

<FileUploadCount i18n={i18n} complete={complete} numUploads={numUploads} />
</div>
<button
className="uppy-StatusBar-details"
aria-label={error}
data-microtip-position="top-right"
data-microtip-size="medium"
onClick={displayErrorAlert}
type="button"
>
?
</button>
</div>
)
}
Expand Down
27 changes: 13 additions & 14 deletions packages/@uppy/status-bar/src/StatusBar.js
Expand Up @@ -133,16 +133,12 @@ function StatusBar (props) {
&& !hideUploadButton

const showCancelBtn
= !hideCancelButton
&& uploadState !== STATE_WAITING
&& uploadState !== STATE_COMPLETE
= !hideCancelButton && uploadState !== STATE_WAITING && uploadState !== STATE_COMPLETE

const showPauseResumeBtn
= resumableUploads
&& !hidePauseResumeButton
&& uploadState === STATE_UPLOADING
= resumableUploads && !hidePauseResumeButton && uploadState === STATE_UPLOADING

const showRetryBtn = error && !hideRetryButton
const showRetryBtn = error && !isAllComplete && !hideRetryButton

const showDoneBtn = doneButtonHandler && uploadState === STATE_COMPLETE

Expand Down Expand Up @@ -174,15 +170,18 @@ function StatusBar (props) {
switch (uploadState) {
case STATE_PREPROCESSING:
case STATE_POSTPROCESSING:
return (
<ProgressBarProcessing
progress={calculateProcessingProgress(files)}
/>
)
return <ProgressBarProcessing progress={calculateProcessingProgress(files)} />
case STATE_COMPLETE:
return <ProgressBarComplete i18n={i18n} />
case STATE_ERROR:
return <ProgressBarError error={error} i18n={i18n} />
return (
<ProgressBarError
error={error}
i18n={i18n}
numUploads={numUploads}
complete={complete}
/>
)
case STATE_UPLOADING:
return (
<ProgressBarUploading
Expand All @@ -208,7 +207,7 @@ function StatusBar (props) {
})()}

<div className="uppy-StatusBar-actions">
{(recoveredState || showUploadBtn) ? (
{recoveredState || showUploadBtn ? (
<UploadBtn
newFiles={newFiles}
isUploadStarted={isUploadStarted}
Expand Down
7 changes: 4 additions & 3 deletions packages/@uppy/status-bar/src/index.js
Expand Up @@ -28,6 +28,7 @@ module.exports = class StatusBar extends UIPlugin {
paused: 'Paused',
retry: 'Retry',
retryUpload: 'Retry upload',
showErrorDetails: 'Show error details',
cancel: 'Cancel',
pause: 'Pause',
resume: 'Resume',
Expand Down Expand Up @@ -131,7 +132,7 @@ module.exports = class StatusBar extends UIPlugin {
return StatusBarUI({
error,
uploadState: getUploadingState(
isAllErrored,
error,
isAllComplete,
recoveredState,
state.files || {}
Expand Down Expand Up @@ -210,8 +211,8 @@ function getTotalETA (files) {
return Math.round((totalBytesRemaining / totalSpeed) * 10) / 10
}

function getUploadingState (isAllErrored, isAllComplete, recoveredState, files) {
if (isAllErrored) {
function getUploadingState (error, isAllComplete, recoveredState, files) {
if (error && !isAllComplete) {
return statusBarStates.STATE_ERROR
}

Expand Down
13 changes: 13 additions & 0 deletions packages/@uppy/status-bar/src/style.scss
Expand Up @@ -124,6 +124,18 @@
font-weight: normal;
line-height: 1.4;
padding-inline-end: 0.3em;

&.uppy-StatusBar-status--error .uppy-StatusBar-statusPrimary {
display: flex;
align-items: center;

button.uppy-StatusBar-details {
margin-left: 6px;
}
}
&.uppy-StatusBar-status--error .uppy-StatusBar-statusSecondary {
margin-left: 18px;
}
}

.uppy-StatusBar-statusPrimary {
Expand Down Expand Up @@ -399,6 +411,7 @@
vertical-align: middle;
background-color: $gray-500;
border-radius: 50%;
border: none;
cursor: help;
appearance: none;
inset-inline-start: 2px;
Expand Down