Skip to content

Commit 446d5be

Browse files
committed
Show proper spinners
1 parent 5a31771 commit 446d5be

File tree

6 files changed

+31
-73
lines changed

6 files changed

+31
-73
lines changed

resources/scripts/components/auth/LoginCheckpointContainer.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Actions, useStoreActions } from 'easy-peasy';
77
import { StaticContext } from 'react-router';
88
import FlashMessageRender from '@/components/FlashMessageRender';
99
import { ApplicationStore } from '@/state';
10+
import Spinner from '@/components/elements/Spinner';
1011

1112
export default ({ history, location: { state } }: RouteComponentProps<{}, StaticContext, { token?: string }>) => {
1213
const [ code, setCode ] = useState('');
@@ -71,7 +72,7 @@ export default ({ history, location: { state } }: RouteComponentProps<{}, Static
7172
disabled={isLoading || code.length !== 6}
7273
>
7374
{isLoading ?
74-
<span className={'spinner white'}>&nbsp;</span>
75+
<Spinner size={'tiny'} className={'mx-auto'}/>
7576
:
7677
'Continue'
7778
}

resources/scripts/components/auth/LoginContainer.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Field from '@/components/elements/Field';
1111
import { httpErrorToHuman } from '@/api/http';
1212
import { FlashMessage } from '@/state/flashes';
1313
import ReCAPTCHA from 'react-google-recaptcha';
14+
import Spinner from '@/components/elements/Spinner';
1415

1516
type OwnProps = RouteComponentProps & {
1617
clearFlashes: ActionCreator<void>;
@@ -63,7 +64,7 @@ const LoginContainer = ({ isSubmitting, setFieldValue, values, submitForm, handl
6364
className={'btn btn-primary btn-jumbo'}
6465
>
6566
{isSubmitting ?
66-
<span className={'spinner white'}>&nbsp;</span>
67+
<Spinner size={'tiny'} className={'mx-auto'}/>
6768
:
6869
'Login'
6970
}

resources/scripts/components/auth/ResetPasswordContainer.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import LoginFormContainer from '@/components/auth/LoginFormContainer';
88
import FlashMessageRender from '@/components/FlashMessageRender';
99
import { Actions, useStoreActions } from 'easy-peasy';
1010
import { ApplicationStore } from '@/state';
11+
import Spinner from '@/components/elements/Spinner';
1112

1213
type Props = Readonly<RouteComponentProps<{ token: string }> & {}>;
1314

@@ -89,7 +90,7 @@ export default (props: Props) => {
8990
disabled={isLoading || !canSubmit()}
9091
>
9192
{isLoading ?
92-
<span className={'spinner white'}>&nbsp;</span>
93+
<Spinner size={'tiny'} className={'mx-auto'}/>
9394
:
9495
'Reset Password'
9596
}

resources/scripts/components/elements/Spinner.tsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,27 @@ import classNames from 'classnames';
33

44
export type SpinnerSize = 'large' | 'normal' | 'tiny';
55

6-
export default ({ size, centered }: { size?: SpinnerSize; centered?: boolean }) => (
6+
interface Props {
7+
size?: SpinnerSize;
8+
centered?: boolean;
9+
className?: string;
10+
}
11+
12+
export default ({ size, centered, className }: Props) => (
713
centered ?
8-
<div className={classNames('flex justify-center', { 'm-20': size === 'large', 'm-6': size !== 'large' })}>
9-
<div className={classNames('spinner-circle spinner-white', {
10-
'spinner-lg': size === 'large',
11-
'spinner-sm': size === 'tiny',
12-
})}/>
14+
<div className={classNames(`flex justify-center ${className}`, { 'm-20': size === 'large', 'm-6': size !== 'large' })}>
15+
<div
16+
className={classNames('spinner-circle spinner-white', {
17+
'spinner-lg': size === 'large',
18+
'spinner-sm': size === 'tiny',
19+
})}
20+
/>
1321
</div>
1422
:
15-
<div className={classNames('spinner-circle spinner-white', {
16-
'spinner-lg': size === 'large',
17-
'spinner-sm': size === 'tiny',
18-
})}/>
23+
<div
24+
className={classNames(`spinner-circle spinner-white ${className}`, {
25+
'spinner-lg': size === 'large',
26+
'spinner-sm': size === 'tiny',
27+
})}
28+
/>
1929
);

resources/styles/components/forms.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
textarea, select, input, button {
2-
outline: none;
2+
@apply .outline-none;
3+
}
4+
5+
button:focus, button:focus-visible {
6+
@apply .outline-none;
37
}
48

59
input[type=number]::-webkit-outer-spin-button,

resources/styles/components/spinners.css

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,3 @@
1-
.spinner {
2-
@apply .h-4 .relative .bg-transparent;
3-
pointer-events: none;
4-
5-
&.spinner-xl {
6-
@apply .h-16;
7-
}
8-
9-
&:after {
10-
@apply .border-2 .border-neutral-400 .absolute .block .h-4 .w-4 .rounded-full;
11-
animation: spinners--spin 500ms infinite linear;
12-
border-top-color: transparent !important;
13-
border-right-color: transparent !important;
14-
content: '';
15-
left: calc(50% - (1em / 2));
16-
}
17-
18-
&.spinner-relative:after {
19-
@apply .relative;
20-
}
21-
22-
&.spinner-xl:after {
23-
@apply .h-16 .w-16;
24-
left: calc(50% - (4rem / 2));
25-
}
26-
27-
/**
28-
* Speeds
29-
*/
30-
&.spin-slow:after {
31-
animation: spinners--spin 1200ms infinite linear;
32-
}
33-
34-
/**
35-
* Spinner Colors
36-
*/
37-
&.blue:after, &.text-blue:after {
38-
@apply .border-primary-500;
39-
}
40-
41-
&.white:after, &.text-white:after {
42-
@apply .border-white;
43-
}
44-
45-
&.spinner-thick:after {
46-
@apply .border-4;
47-
}
48-
}
49-
50-
@keyframes spinners--spin {
51-
from {
52-
transform: rotate(0deg);
53-
}
54-
55-
to {
56-
transform: rotate(360deg);
57-
}
58-
}
59-
601
.spinner-circle {
612
@apply .w-8 .h-8;
623
border: 3px solid hsla(211, 12%, 43%, 0.2);

0 commit comments

Comments
 (0)