Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
thalia
ThaliApp
Commits
85c19ca2
Commit
85c19ca2
authored
Feb 08, 2017
by
Wietse Kuipers
Browse files
Revert "No more local state"
This reverts commit
a502b3a7
.
parent
a502b3a7
Changes
6
Hide whitespace changes
Inline
Side-by-side
app/actions/ThaliAppActions.js
View file @
85c19ca2
import
*
as
types
from
'
./actionTypes
'
;
export
function
enterUsername
(
username
)
{
export
function
login
(
username
,
password
)
{
return
{
type
:
types
.
ENTER_USERNAME
,
type
:
types
.
LOGIN
,
username
,
};
}
export
function
enterPassword
(
password
)
{
return
{
type
:
types
.
ENTER_PASSWORD
,
password
,
};
}
export
function
login
()
{
return
{
type
:
types
.
LOGIN
,
};
}
app/actions/actionTypes.js
View file @
85c19ca2
export
const
LOGIN
=
'
LOGIN
'
;
export
const
ENTER_USERNAME
=
'
ENTER_USERNAME
'
;
export
const
ENTER_PASSWORD
=
'
ENTER_PASSWORD
'
;
app/components/Login.js
View file @
85c19ca2
import
React
from
'
react
'
;
import
React
,
{
Component
}
from
'
react
'
;
import
{
View
,
TextInput
,
Button
,
Text
}
from
'
react-native
'
;
const
Login
=
(
props
)
=>
{
const
{
enterPassword
,
loginError
,
login
}
=
props
;
return
(
<
View
>
<
TextInput
placeholder
=
"
Username
"
/>
<
TextInput
placeholder
=
"
Password
"
secureTextEntry
onChangeText
=
{
enterPassword
}
/
>
<
Button
title
=
"
Log in
"
onPress
=
{
login
}
/
>
<
Text
>
{
loginError
?
'
Login faal
'
:
''
}
<
/Text
>
<
/View
>
);
};
export
default
class
Login
extends
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
username
:
''
,
password
:
''
,
};
this
.
login
=
props
.
login
;
}
onPress
()
{
return
this
.
login
.
bind
(
null
,
this
.
state
.
username
,
this
.
state
.
password
);
}
render
()
{
const
{
loginError
}
=
this
.
props
;
return
(
<
View
>
<
TextInput
placeholder
=
"
Username
"
onChangeText
=
{
username
=>
this
.
setState
({
username
})}
/
>
<
TextInput
placeholder
=
"
Password
"
secureTextEntry
onChangeText
=
{
password
=>
this
.
setState
({
password
})}
/
>
<
Button
title
=
"
Log in
"
onPress
=
{
this
.
onPress
()}
/
>
<
Text
>
{
loginError
?
'
Login faal
'
:
''
}
<
/Text
>
<
/View
>
);
}
}
Login
.
propTypes
=
{
login
:
React
.
PropTypes
.
func
.
isRequired
,
enterPassword
:
React
.
PropTypes
.
func
.
isRequired
,
loginError
:
React
.
PropTypes
.
bool
.
isRequired
,
};
export
default
Login
;
app/containers/ThaliApp.js
View file @
85c19ca2
import
React
from
'
react
'
;
// import { Navigator } from 'react-native';
// import { bindActionCreators } from 'redux';
import
{
bindActionCreators
}
from
'
redux
'
;
import
{
connect
}
from
'
react-redux
'
;
import
Login
from
'
../components/Login
'
;
import
*
as
ThaliAppActions
from
'
../actions/ThaliAppActions
'
;
const
ThaliApp
=
props
=>
(
<
Login
{...
props
}
/
>
const
ThaliApp
=
(
props
)
=>
{
const
{
state
,
actions
}
=
props
;
return
(
<
Login
loggedIn
=
{
state
.
loggedIn
}
loginError
=
{
state
.
loginError
}
{...
actions
}
/
>
);
};
ThaliApp
.
propTypes
=
{
login
:
React
.
PropTypes
.
func
.
isRequired
,
loggedIn
:
React
.
PropTypes
.
bool
.
isRequired
,
loginError
:
React
.
PropTypes
.
bool
.
isRequired
,
state
:
React
.
PropTypes
.
objectOf
(
React
.
PropTypes
.
oneOfType
([
React
.
PropTypes
.
string
,
React
.
PropTypes
.
bool
,
React
.
PropTypes
.
number
,
])).
isRequired
,
actions
:
React
.
PropTypes
.
objectOf
(
React
.
PropTypes
.
func
).
isRequired
,
};
const
mapStateToProps
=
state
=>
({
loggedIn
:
state
.
login
.
loggedIn
,
loginError
:
state
.
login
.
loginError
,
});
const
mapDispatchToProps
=
dispatch
=>
({
login
:
()
=>
dispatch
(
ThaliAppActions
.
login
()),
enterPassword
:
password
=>
dispatch
(
ThaliAppActions
.
enterPassword
(
password
)),
});
export
default
connect
(
mapStateToProps
,
mapDispatchToProps
,
state
=>
(
{
state
:
state
.
login
}
),
dispatch
=>
(
{
actions
:
bindActionCreators
(
ThaliAppActions
,
dispatch
)
}
),
)(
ThaliApp
);
app/containers/app.js
View file @
85c19ca2
...
...
@@ -2,6 +2,7 @@ import React from 'react';
import
{
createStore
,
applyMiddleware
,
combineReducers
}
from
'
redux
'
;
import
{
Provider
}
from
'
react-redux
'
;
import
thunk
from
'
redux-thunk
'
;
import
*
as
reducers
from
'
../reducers
'
;
import
ThaliApp
from
'
./ThaliApp
'
;
...
...
@@ -9,4 +10,5 @@ const createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
const
reducer
=
combineReducers
(
reducers
);
const
store
=
createStoreWithMiddleware
(
reducer
);
const
Main
=
()
=>
<
Provider
store
=
{
store
}
><
ThaliApp
/><
/Provider>
;
export
default
Main
;
app/reducers/login.js
View file @
85c19ca2
...
...
@@ -3,22 +3,16 @@ import * as types from '../actions/actionTypes';
const
initialState
=
{
loggedIn
:
false
,
loginError
:
false
,
username
:
''
,
password
:
''
,
};
export
default
function
typ
in
g
(
state
=
initialState
,
action
=
{})
{
export
default
function
log
in
(
state
=
initialState
,
action
=
{})
{
switch
(
action
.
type
)
{
case
types
.
ENTER_USERNAME
:
return
{
...
state
,
username
:
action
.
username
};
case
types
.
ENTER_PASSWORD
:
return
{
...
state
,
password
:
action
.
password
};
case
types
.
LOGIN
:
if
(
state
.
password
===
'
42
'
)
{
if
(
action
.
password
===
'
42
'
)
{
return
{
...
state
,
loginError
:
false
,
loggedIn
:
true
};
}
return
{
...
state
,
loginError
:
true
};
default
:
return
state
;
return
{
...
state
}
;
}
}
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