-
Notifications
You must be signed in to change notification settings - Fork 643
/
index.tsx
137 lines (129 loc) · 3.97 KB
/
index.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import {
Box,
BoxProps,
Button,
FormGroup,
H2,
H5,
Illustration,
Input,
Label,
MadeWithLove,
MessageBox,
Text,
} from '@adminjs/design-system'
import { styled } from '@adminjs/design-system/styled-components'
import React from 'react'
import { useSelector } from 'react-redux'
import { allowOverride } from '../../hoc/allow-override.js'
import { useTranslation } from '../../hooks/index.js'
import { ReduxState } from '../../store/store.js'
import { LoginTemplateAttributes } from '../../login-template.js'
const Wrapper = styled(Box)<BoxProps>`
align-items: center;
justify-content: center;
flex-direction: column;
height: 100%;
`
const StyledLogo = styled.img`
max-width: 200px;
margin: ${({ theme }) => theme.space.md} 0;
`
const IllustrationsWrapper = styled(Box)<BoxProps>`
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
& svg [stroke='#3B3552'] {
stroke: rgba(255, 255, 255, 0.5);
}
& svg [fill='#3040D6'] {
fill: rgba(255, 255, 255, 1);
}
`
export type LoginProps = {
message?: string
action: string
}
export const Login: React.FC = () => {
const props = (window as any).__APP_STATE__ as LoginTemplateAttributes
const { action, errorMessage: message } = props
const { translateComponent, translateMessage } = useTranslation()
const branding = useSelector((state: ReduxState) => state.branding)
return (
<Wrapper flex variant="grey" className="login__Wrapper">
<Box bg="white" height="440px" flex boxShadow="login" width={[1, 2 / 3, 'auto']}>
<Box
bg="primary100"
color="white"
p="x3"
width="380px"
flexGrow={0}
display={['none', 'none', 'block']}
position="relative"
>
<H2 fontWeight="lighter">{translateComponent('Login.welcomeHeader')}</H2>
<Text fontWeight="lighter" mt="default">
{translateComponent('Login.welcomeMessage')}
</Text>
<IllustrationsWrapper p="xxl">
<Box display="inline" mr="default">
<Illustration variant="Planet" width={82} height={91} />
</Box>
<Box display="inline">
<Illustration variant="Astronaut" width={82} height={91} />
</Box>
<Box display="inline" position="relative" top="-20px">
<Illustration variant="FlagInCog" width={82} height={91} />
</Box>
</IllustrationsWrapper>
</Box>
<Box
as="form"
action={action}
method="POST"
p="x3"
flexGrow={1}
width={['100%', '100%', '480px']}
>
<H5 marginBottom="xxl">
{branding.logo ? (
<StyledLogo src={branding.logo} alt={branding.companyName} />
) : (
branding.companyName
)}
</H5>
{message && (
<MessageBox
my="lg"
message={message.split(' ').length > 1 ? message : translateMessage(message)}
variant="danger"
/>
)}
<FormGroup>
<Label required>{translateComponent('Login.properties.email')}</Label>
<Input name="email" placeholder={translateComponent('Login.properties.email')} />
</FormGroup>
<FormGroup>
<Label required>{translateComponent('Login.properties.password')}</Label>
<Input
type="password"
name="password"
placeholder={translateComponent('Login.properties.password')}
autoComplete="new-password"
/>
</FormGroup>
<Text mt="xl" textAlign="center">
<Button variant="contained">{translateComponent('Login.loginButton')}</Button>
</Text>
</Box>
</Box>
{branding.withMadeWithLove ? (
<Box mt="xxl">
<MadeWithLove />
</Box>
) : null}
</Wrapper>
)
}
export default allowOverride(Login, 'Login')