Skip to content

Commit

Permalink
[Glitch] Change design of modal loading and error screens in web UI
Browse files Browse the repository at this point in the history
Port 7f2cfcc to glitch-soc

Signed-off-by: Claire <[email protected]>
  • Loading branch information
Gargron authored and ClearlyClaire committed Dec 1, 2024
1 parent 605975c commit 017e2ff
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 181 deletions.
22 changes: 22 additions & 0 deletions app/javascript/flavours/glitch/components/gif.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { useHovering } from '@/hooks/useHovering';
import { autoPlayGif } from 'flavours/glitch/initial_state';

export const GIF: React.FC<{
src: string;
staticSrc: string;
className: string;
animate?: boolean;
}> = ({ src, staticSrc, className, animate = autoPlayGif }) => {
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);

return (
<img
className={className}
src={hovering || animate ? src : staticSrc}
alt=''
role='presentation'
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
/>
);
};

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { useCallback } from 'react';

import { FormattedMessage } from 'react-intl';

import { Button } from 'flavours/glitch/components/button';
import { GIF } from 'flavours/glitch/components/gif';
import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator';

export const ModalPlaceholder: React.FC<{
loading: boolean;
onClose: (arg0: string | undefined, arg1: boolean) => void;
onRetry?: () => void;
}> = ({ loading, onClose, onRetry }) => {
const handleClose = useCallback(() => {
onClose(undefined, false);
}, [onClose]);

const handleRetry = useCallback(() => {
if (onRetry) onRetry();
}, [onRetry]);

return (
<div className='modal-root__modal modal-placeholder' aria-busy={loading}>
{loading ? (
<LoadingIndicator />
) : (
<div className='modal-placeholder__error'>
<GIF
src='/oops.gif'
staticSrc='/oops.png'
className='modal-placeholder__error__image'
/>

<div className='modal-placeholder__error__message'>
<p>
<FormattedMessage
id='bundle_modal_error.message'
defaultMessage='Something went wrong while loading this screen.'
/>
</p>

<div className='modal-placeholder__error__message__actions'>
<Button onClick={handleRetry}>
<FormattedMessage
id='bundle_modal_error.retry'
defaultMessage='Try again'
/>
</Button>
<Button onClick={handleClose} className='button button-tertiary'>
<FormattedMessage
id='bundle_modal_error.close'
defaultMessage='Close'
/>
</Button>
</div>
</div>
</div>
)}
</div>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import BundleContainer from '../containers/bundle_container';
import ActionsModal from './actions_modal';
import AudioModal from './audio_modal';
import { BoostModal } from './boost_modal';
import BundleModalError from './bundle_modal_error';
import {
ConfirmationModal,
ConfirmDeleteStatusModal,
Expand All @@ -44,7 +43,7 @@ import { FavouriteModal } from './favourite_modal';
import FocalPointModal from './focal_point_modal';
import ImageModal from './image_modal';
import MediaModal from './media_modal';
import ModalLoading from './modal_loading';
import { ModalPlaceholder } from './modal_placeholder';
import VideoModal from './video_modal';

export const MODAL_COMPONENTS = {
Expand Down Expand Up @@ -109,14 +108,16 @@ export default class ModalRoot extends PureComponent {
this.setState({ backgroundColor: color });
};

renderLoading = modalId => () => {
return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
renderLoading = () => {
const { onClose } = this.props;

return <ModalPlaceholder loading onClose={onClose} />;
};

renderError = (props) => {
const { onClose } = this.props;

return <BundleModalError {...props} onClose={onClose} />;
return <ModalPlaceholder {...props} onClose={onClose} />;
};

handleClose = (ignoreFocus = false) => {
Expand All @@ -141,7 +142,7 @@ export default class ModalRoot extends PureComponent {
<Base backgroundColor={backgroundColor} onClose={props && props.noClose ? this.noop : this.handleClose} noEsc={props ? props.noEsc : false} ignoreFocus={ignoreFocus}>
{visible && (
<>
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
{(SpecificComponent) => {
const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined;
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={ref} />;
Expand Down
127 changes: 26 additions & 101 deletions app/javascript/flavours/glitch/styles/components.scss
Original file line number Diff line number Diff line change
Expand Up @@ -6306,119 +6306,44 @@ a.status-card {
}
}

.onboarding-modal,
.error-modal,
.embed-modal {
background: $ui-secondary-color;
color: $inverted-text-color;
border-radius: 8px;
overflow: hidden;
display: flex;
.modal-placeholder {
width: 588px;
min-height: 478px;
flex-direction: column;
}

.error-modal__body {
height: 80vh;
width: 80vw;
max-width: 520px;
max-height: 420px;
position: relative;
background: var(--modal-background-color);
backdrop-filter: var(--background-filter);
border: 1px solid var(--modal-border-color);
border-radius: 16px;

& > div {
position: absolute;
top: 0;
inset-inline-start: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 25px;
flex-direction: column;
align-items: center;
justify-content: center;
&__error {
padding: 24px;
display: flex;
opacity: 0;
user-select: text;
}
}

.error-modal__body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}

.onboarding-modal__paginator,
.error-modal__footer {
flex: 0 0 auto;
background: darken($ui-secondary-color, 8%);
display: flex;
padding: 25px;

& > div {
min-width: 33px;
}

.onboarding-modal__nav,
.error-modal__nav {
color: $lighter-text-color;
border: 0;
font-size: 14px;
font-weight: 500;
padding: 10px 25px;
line-height: inherit;
height: auto;
margin: -10px;
border-radius: 4px;
background-color: transparent;
align-items: center;
flex-direction: column;

&:hover,
&:focus,
&:active {
color: darken($lighter-text-color, 4%);
background-color: darken($ui-secondary-color, 16%);
&__image {
width: 70%;
max-width: 350px;
}

&.onboarding-modal__done,
&.onboarding-modal__next {
color: $inverted-text-color;
&__message {
text-align: center;
text-wrap: balance;
font-size: 14px;
line-height: 20px;
letter-spacing: 0.25px;

&:hover,
&:focus,
&:active {
color: lighten($inverted-text-color, 4%);
&__actions {
margin-top: 24px;
display: flex;
gap: 10px;
align-items: center;
justify-content: center;
}
}
}
}

.error-modal__footer {
justify-content: center;
}

.display-case {
text-align: center;
font-size: 15px;
margin-bottom: 15px;

&__label {
font-weight: 500;
color: $inverted-text-color;
margin-bottom: 5px;
text-transform: uppercase;
font-size: 12px;
}

&__case {
background: $ui-base-color;
color: $secondary-text-color;
font-weight: 500;
padding: 10px;
border-radius: 4px;
}
}

.safety-action-modal {
width: 600px;
flex-direction: column;
Expand Down

0 comments on commit 017e2ff

Please sign in to comment.