Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zimbra-admin-api-js
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Public
zimbra-admin-api-js
Commits
ef343900
Commit
ef343900
authored
Apr 14, 2016
by
Elias Nahum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Login page & message_bar component
parent
d13ae580
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
210 additions
and
58 deletions
+210
-58
login.jsx
src/components/login/login.jsx
+73
-22
login_email.jsx
src/components/login/login_email.jsx
+2
-23
message_bar.jsx
src/components/message_bar.jsx
+107
-0
not_logged_in.jsx
src/components/not_logged_in.jsx
+3
-9
_flash_alert.scss
src/sass/components/_flash_alert.scss
+16
-0
_module.scss
src/sass/components/_module.scss
+1
-0
_variables.scss
src/sass/utils/_variables.scss
+6
-0
client.jsx
src/utils/client.jsx
+2
-4
No files found.
src/components/login/login.jsx
View file @
ef343900
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
// See LICENSE.txt for license information.
import
$
from
'jquery'
;
import
React
from
'react'
;
import
{
browserHistory
}
from
'react-router'
;
import
*
as
Client
from
'../../utils/client.jsx'
;
import
*
as
Client
from
'../../utils/client.jsx'
;
import
LoginEmail
from
'./login_email.jsx'
;
import
LoginEmail
from
'./login_email.jsx'
;
import
MessageBar
from
'../message_bar.jsx'
;
import
{
browserHistory
,
Link
}
from
'react-router'
;
import
React
from
'react'
;
export
default
class
Login
extends
React
.
Component
{
export
default
class
Login
extends
React
.
Component
{
constructor
(
props
)
{
constructor
(
props
)
{
...
@@ -18,19 +19,37 @@ export default class Login extends React.Component {
...
@@ -18,19 +19,37 @@ export default class Login extends React.Component {
doneCheckLogin
:
false
doneCheckLogin
:
false
};
};
}
}
componentWillUmount
()
{
$
(
'body'
).
removeClass
(
'blank'
);
}
componentDidMount
()
{
componentDidMount
()
{
Client
.
isLoggedIn
((
data
)
=>
{
Client
.
isLoggedIn
((
data
)
=>
{
if
(
data
&&
data
.
logged_in
)
{
if
(
data
&&
data
.
logged_in
)
{
browserHistory
.
push
(
'/accounts'
);
browserHistory
.
push
(
'/accounts'
);
}
else
{
}
else
{
$
(
'body'
).
addClass
(
'blank'
);
this
.
setState
({
doneCheckLogin
:
true
});
//eslint-disable-line react/no-did-mount-set-state
this
.
setState
({
doneCheckLogin
:
true
});
//eslint-disable-line react/no-did-mount-set-state
}
}
});
});
}
}
submit
(
username
,
password
)
{
submit
(
email
,
password
)
{
var
state
=
this
.
state
;
if
(
!
email
)
{
state
.
loginError
=
'El correo electrónico es obligatorio'
;
this
.
setState
(
state
);
return
;
}
if
(
!
password
)
{
state
.
loginError
=
'La contraseña es obligatoria'
;
this
.
setState
(
state
);
return
;
}
this
.
setState
({
loginError
:
null
});
this
.
setState
({
loginError
:
null
});
Client
.
login
(
username
,
password
,
Client
.
login
(
email
,
password
,
()
=>
{
()
=>
{
browserHistory
.
push
(
'/accounts'
);
browserHistory
.
push
(
'/accounts'
);
},
},
...
@@ -44,24 +63,56 @@ export default class Login extends React.Component {
...
@@ -44,24 +63,56 @@ export default class Login extends React.Component {
return
<
div
/>;
return
<
div
/>;
}
}
let
loginError
;
if
(
this
.
state
.
loginError
)
{
loginError
=
(
<
MessageBar
message=
{
this
.
state
.
loginError
}
type=
'error'
position=
'relative'
canClose=
{
false
}
/>
);
}
else
{
loginError
=
(
<
MessageBar
message=
'Necesitas iniciar sesión o registrarte para continuar.'
type=
'error'
position=
'relative'
canClose=
{
false
}
/>
);
}
return
(
return
(
<
div
>
<
div
className=
'login-container'
>
<
div
className=
'signup-header'
>
<
div
className=
'row'
>
<
Link
to=
'/'
>
<
div
className=
'col-md-12'
>
<
span
className=
'fa fa-chevron-left'
/>
<
div
className=
'hpanel'
>
{
'Volver'
}
{
loginError
}
</
Link
>
<
div
className=
'panel-body'
style=
{
{
paddingLeft
:
'80px'
,
paddingRight
:
'80px'
,
paddingBottom
:
'60px'
}
}
>
<
h2
className=
'text-center'
style=
{
{
marginBottom
:
'50px'
}
}
>
{
'Ingreso a ZBox Manager'
}
</
h2
>
<
LoginEmail
submit=
{
this
.
submit
}
loginError=
{
this
.
state
.
loginError
}
/>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
'col-sm-12'
>
<
div
className=
'row'
>
<
div
className=
''
>
<
div
className=
'col-md-12 text-center'
>
<
h5
className=
'margin--less'
>
{
'Iniciar Sesión'
}
</
h5
>
{
'ZBox Manager : Administra tu Correo en la nube, seguro y facil de usar'
}
<
h2
className=
''
>
<
br
/>
{
'ZBox Manager'
}
{
'Copyright © 2016 ZBox Spa. Todos los derechos reservados'
}
</
h2
>
<
LoginEmail
submit=
{
this
.
submit
}
loginError=
{
this
.
state
.
loginError
}
/>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
...
...
src/components/login/login_email.jsx
View file @
ef343900
...
@@ -18,41 +18,20 @@ export default class LoginEmail extends React.Component {
...
@@ -18,41 +18,20 @@ export default class LoginEmail extends React.Component {
}
}
handleSubmit
(
e
)
{
handleSubmit
(
e
)
{
e
.
preventDefault
();
e
.
preventDefault
();
var
state
=
{};
const
email
=
this
.
refs
.
email
.
value
.
trim
();
const
email
=
this
.
refs
.
email
.
value
.
trim
();
if
(
!
email
)
{
state
.
loginError
=
'El correo electrónico es obligatorio'
;
this
.
setState
(
state
);
return
;
}
const
password
=
this
.
refs
.
password
.
value
.
trim
();
const
password
=
this
.
refs
.
password
.
value
.
trim
();
if
(
!
password
)
{
state
.
loginError
=
'La contraseña es obligatoria'
;
this
.
setState
(
state
);
return
;
}
state
.
loginError
=
''
;
this
.
setState
(
state
);
this
.
props
.
submit
(
email
,
password
);
this
.
props
.
submit
(
email
,
password
);
}
}
render
()
{
render
()
{
let
loginError
;
let
errorClass
=
''
;
let
errorClass
=
''
;
if
(
this
.
state
.
loginError
)
{
if
(
this
.
state
.
loginError
)
{
loginError
=
<
label
className=
'control-label'
>
{
this
.
state
.
loginError
}
</
label
>;
errorClass
=
' has-error'
;
errorClass
=
' has-error'
;
}
}
return
(
return
(
<
form
onSubmit=
{
this
.
handleSubmit
}
>
<
form
onSubmit=
{
this
.
handleSubmit
}
>
<
div
className=
'signup__email-container'
>
<
div
className=
'signup__email-container'
>
<
div
className=
{
'form-group'
+
errorClass
}
>
{
loginError
}
</
div
>
<
div
className=
{
'form-group'
+
errorClass
}
>
<
div
className=
{
'form-group'
+
errorClass
}
>
<
input
<
input
autoFocus=
{
true
}
autoFocus=
{
true
}
...
@@ -78,9 +57,9 @@ export default class LoginEmail extends React.Component {
...
@@ -78,9 +57,9 @@ export default class LoginEmail extends React.Component {
<
div
className=
'form-group'
>
<
div
className=
'form-group'
>
<
button
<
button
type=
'submit'
type=
'submit'
className=
'btn btn-
primary
'
className=
'btn btn-
success btn-block
'
>
>
{
'In
iciar Sesión
'
}
{
'In
gresar
'
}
</
button
>
</
button
>
</
div
>
</
div
>
</
div
>
</
div
>
...
...
src/components/message_bar.jsx
0 → 100644
View file @
ef343900
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
import
$
from
'jquery'
;
import
React
from
'react'
;
export
default
class
MessageBar
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
fadeOut
=
this
.
fadeOut
.
bind
(
this
);
this
.
handleClose
=
this
.
handleClose
.
bind
(
this
);
}
componentWillMount
()
{
if
(
this
.
props
.
message
)
{
this
.
setState
({
message
:
this
.
props
.
message
});
}
}
componentWillReceiveProps
(
newProps
)
{
this
.
setState
({
message
:
newProps
.
message
});
}
componentDidMount
()
{
this
.
fadeOut
(
this
.
props
.
autocloseInSecs
*
1000
);
}
componentDidUpdate
()
{
this
.
fadeOut
(
this
.
props
.
autocloseInSecs
*
1000
);
}
fadeOut
(
time
)
{
const
self
=
this
;
if
(
self
.
state
.
message
&&
self
.
props
.
autoclose
)
{
$
(
'div.flash'
).
delay
(
time
).
fadeOut
(
1000
,
()
=>
{
self
.
handleClose
();
});
}
}
handleClose
()
{
this
.
setState
({
message
:
null
});
}
render
()
{
const
message
=
this
.
state
.
message
;
if
(
message
)
{
let
dismissible
;
let
closeButton
;
if
(
this
.
props
.
canClose
)
{
dismissible
=
'alert-dismissible'
;
closeButton
=
(
<
button
type=
'button'
className=
'close'
data
-
dismiss=
'alert'
aria
-
label=
'Close'
onClick=
{
()
=>
this
.
handleClose
(
500
)
}
>
<
span
aria
-
hidden=
'true'
style=
{
{
color
:
'#fff'
}
}
>
{
'x'
}
</
span
>
</
button
>
);
}
const
alertClass
=
`alert flash-
${
this
.
props
.
type
}
${
dismissible
}
`
;
let
icon
;
switch
(
this
.
props
.
type
)
{
case
'error'
:
icon
=
(<
i
className=
'fa fa fa-exclamation-circle'
></
i
>);
break
;
}
return
(
<
div
className=
'flash'
style=
{
{
position
:
this
.
props
.
position
,
display
:
'block'
}
}
>
<
div
className=
{
alertClass
}
role=
'alert'
>
{
closeButton
}
{
icon
}
{
message
}
</
div
>
</
div
>
);
}
return
<
div
/>;
}
}
MessageBar
.
defaultProps
=
{
message
:
null
,
type
:
'error'
,
position
:
'relative'
,
canClose
:
true
,
autoclose
:
false
,
autocloseInSecs
:
10
};
MessageBar
.
propTypes
=
{
message
:
React
.
PropTypes
.
string
.
isRequired
,
type
:
React
.
PropTypes
.
oneOf
([
'success'
,
'error'
,
'warning'
]),
position
:
React
.
PropTypes
.
oneOf
([
'absolute'
,
'fixed'
,
'relative'
,
'static'
,
'inherit'
]),
canClose
:
React
.
PropTypes
.
bool
,
autoclose
:
React
.
PropTypes
.
bool
,
autocloseInSecs
:
React
.
PropTypes
.
number
};
src/components/not_logged_in.jsx
View file @
ef343900
...
@@ -7,21 +7,15 @@ import React from 'react';
...
@@ -7,21 +7,15 @@ import React from 'react';
export
default
class
NotLoggedIn
extends
React
.
Component
{
export
default
class
NotLoggedIn
extends
React
.
Component
{
componentDidMount
()
{
componentDidMount
()
{
$
(
'body'
).
a
ttr
(
'class'
,
'sticky'
);
$
(
'body'
).
a
ddClass
(
'sticky'
);
$
(
'#root'
).
a
ttr
(
'class'
,
'container-fluid'
);
$
(
'#root'
).
a
ddClass
(
'container-fluid'
);
}
}
componentWillUnmount
()
{
componentWillUnmount
()
{
$
(
'body'
).
attr
(
'class'
,
''
);
$
(
'body'
).
attr
(
'class'
,
''
);
$
(
'#root'
).
attr
(
'class'
,
''
);
$
(
'#root'
).
attr
(
'class'
,
''
);
}
}
render
()
{
render
()
{
return
(
return
this
.
props
.
children
;
<
div
className=
'inner-wrap'
>
<
div
className=
'row content'
>
{
this
.
props
.
children
}
</
div
>
</
div
>
);
}
}
}
}
...
...
src/sass/components/_flash_alert.scss
0 → 100644
View file @
ef343900
.flash
{
.flash-error
{
background
:
$bg-error-color
;
color
:
$flash-error-color
;
}
.flash-success
{
background
:
$bg-success-color
;
color
:
$white
;
}
.flash-warning
{
background
:
$bg-warning-color
;
color
:
$white
;
}
}
src/sass/components/_module.scss
View file @
ef343900
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
@import
'buttons'
;
@import
'buttons'
;
@import
'contact'
;
@import
'contact'
;
@import
'dropdown'
;
@import
'dropdown'
;
@import
'flash_alert'
;
@import
'fonts'
;
@import
'fonts'
;
@import
'grid'
;
@import
'grid'
;
@import
'icheck'
;
@import
'icheck'
;
...
...
src/sass/utils/_variables.scss
View file @
ef343900
...
@@ -70,3 +70,9 @@ $ui-sortable-placeholder-border-color: #cecece;
...
@@ -70,3 +70,9 @@ $ui-sortable-placeholder-border-color: #cecece;
$filter-body-panel-bg
:
#fafcfd
;
$filter-body-panel-bg
:
#fafcfd
;
$filter-body-panel-shadow
:
rgba
(
0
,
0
,
0
,
.175
);
$filter-body-panel-shadow
:
rgba
(
0
,
0
,
0
,
.175
);
$code-mirror-border-color
:
#eee
;
$code-mirror-border-color
:
#eee
;
//Flash alerts
$bg-success-color
:
#74d348
;
$bg-error-color
:
#f2dede
;
$bg-warning-color
:
#e67e22
;
$flash-error-color
:
#a94442
;
src/utils/client.jsx
View file @
ef343900
...
@@ -4,7 +4,8 @@
...
@@ -4,7 +4,8 @@
import
$
from
'jquery'
;
import
$
from
'jquery'
;
import
jszimbra
from
'js-zimbra'
;
import
jszimbra
from
'js-zimbra'
;
import
*
as
Utils
from
'./utils.jsx'
;
import
*
as
Utils
from
'./utils.jsx'
;
import
Domain
from
'../zimbra/domain.jsx'
;
// import Domain from '../zimbra/domain.jsx';
let
domain
;
let
domain
;
...
@@ -61,9 +62,6 @@ export function login(username, secret, success, error) {
...
@@ -61,9 +62,6 @@ export function login(username, secret, success, error) {
return
error
(
e
);
return
error
(
e
);
}
}
// aqui deberiamos inicializar todas las apis
domain
=
new
Domain
(
zimbra
);
Utils
.
setCookie
(
'token'
,
zimbra
.
token
,
3
);
Utils
.
setCookie
(
'token'
,
zimbra
.
token
,
3
);
return
success
(
zimbra
);
return
success
(
zimbra
);
});
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment