Merge pull request from TheGrits/patch-3

Fix gh-678: Retain Search Term
This commit is contained in:
Matthew Taylor 2016-12-12 22:52:38 -05:00 committed by GitHub
commit cbd983baf8
4 changed files with 44 additions and 4 deletions
src
components/navigation/www
redux
views/search

View file

@ -36,7 +36,8 @@ var Navigation = React.createClass({
},
getDefaultProps: function () {
return {
session: {}
session: {},
searchTerm: ''
};
},
componentDidMount: function () {
@ -221,6 +222,7 @@ var Navigation = React.createClass({
<Form onSubmit={this.onSearchSubmit}>
<Button type="submit" className="btn-search" />
<Input type="text"
value={this.props.searchTerm}
aria-label={formatMessage({id: 'general.search'})}
placeholder={formatMessage({id: 'general.search'})}
name="q" />
@ -345,7 +347,8 @@ var Navigation = React.createClass({
var mapStateToProps = function (state) {
return {
session: state.session,
permissions: state.permissions
permissions: state.permissions,
searchTerm: state.navigation
};
};

24
src/redux/navigation.js Normal file
View file

@ -0,0 +1,24 @@
var keyMirror = require('keymirror');
var Types = keyMirror({
SET_SEARCH_TERM: null
});
module.exports.navigationReducer = function (state, action) {
if(typeof state === 'undefined') {
state = '';
}
switch (action.type) {
case Types.SET_SEARCH_TERM:
return action.searchTerm;
default:
return state;
}
};
module.exports.setSearchTerm = function (searchTerm) {
return {
type: Types.SET_SEARCH_TERM,
searchTerm: searchTerm
};
};

View file

@ -4,12 +4,14 @@ var scheduleReducer = require('./conference-schedule.js').scheduleReducer;
var detailsReducer = require('./conference-details.js').detailsReducer;
var permissionsReducer = require('./permissions.js').permissionsReducer;
var sessionReducer = require('./session.js').sessionReducer;
var navigationReducer = require('./navigation.js').navigationReducer;
var appReducer = combineReducers({
session: sessionReducer,
permissions: permissionsReducer,
conferenceSchedule: scheduleReducer,
conferenceDetails: detailsReducer
conferenceDetails: detailsReducer,
navigation: navigationReducer
});
module.exports = appReducer;

View file

@ -1,6 +1,7 @@
var injectIntl = require('react-intl').injectIntl;
var FormattedMessage = require('react-intl').FormattedMessage;
var React = require('react');
var connect = require('react-redux').connect;
var render = require('../../lib/render.jsx');
var api = require('../../lib/api');
@ -12,6 +13,7 @@ var Input = require('../../components/forms/input.jsx');
var Button = require('../../components/forms/button.jsx');
var Tabs = require('../../components/tabs/tabs.jsx');
var Grid = require('../../components/grid/grid.jsx');
var navigationActions = require('../../redux/navigation.js');
require('./search.scss');
@ -53,6 +55,7 @@ var Search = injectIntl(React.createClass({
},
componentDidMount: function () {
this.getSearchMore();
this.props.dispatch(navigationActions.setSearchTerm(this.props.searchTerm));
},
getSearchMore: function () {
var termText = '';
@ -138,4 +141,12 @@ var Search = injectIntl(React.createClass({
}
}));
render(<Page><Search /></Page>, document.getElementById('app'));
var mapStateToProps = function (state) {
return {
navigation: state.searchTerm
};
};
var ConnectedSearch = connect(mapStateToProps)(Search);
render(<Page><ConnectedSearch /></Page>, document.getElementById('app'));