diff --git a/package.json b/package.json index 1d40b69..6c829e8 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "preact-compat": "^3.16.0", "react": "^15.5.4", "react-dom": "^15.5.4", - "react-router-dom": "^4.1.2" + "react-router-dom": "^4.1.2", + "redux": "^3.7.2" }, "devDependencies": { "babel-core": "^6.24.1", diff --git a/src/components/Project/Project.jsx b/src/components/Project/Project.jsx index 0be737b..43e4ea2 100644 --- a/src/components/Project/Project.jsx +++ b/src/components/Project/Project.jsx @@ -4,6 +4,7 @@ import GeoPattern from 'geopattern' import Tag from '../Tag/Tag' import styles from './Project.css' import ProjectLinks from '../ProjectLinks/ProjectLinks' +import store from '../../lib/state' export default class Project extends Component { constructor(props) { @@ -20,7 +21,10 @@ export default class Project extends Component { desClick(event) { let query = document.getElementById('search').value; - window.location.href = '#/' + this.props.id + '?' + query; + store.dispatch({type: 'PUT', data: { + search: query + }}); + window.location.href = '#/' + this.props.id; } render() { diff --git a/src/lib/state.js b/src/lib/state.js new file mode 100644 index 0000000..8872a70 --- /dev/null +++ b/src/lib/state.js @@ -0,0 +1,14 @@ +import {createStore} from 'redux' + +let manager = (state = {}, action) => { + switch (action.type) { + case 'PUT': + return action.data; + default: + return state; + } +}; + +let store = createStore(manager); + +export {store as default}; diff --git a/src/screens/App/App.jsx b/src/screens/App/App.jsx index 1ddb026..9e082bb 100644 --- a/src/screens/App/App.jsx +++ b/src/screens/App/App.jsx @@ -7,6 +7,7 @@ import styles from './App.css' import lib from '../../lib/utils' import projects from '../../data/projects' +import store from '../../lib/state' export default class App extends Component { @@ -19,9 +20,16 @@ export default class App extends Component { } componentDidMount() { + // use query param let searchText = this.props.location.search.substring(1); if (searchText) { // optimize, only needed when search has something lib.setSearch(searchText); + return; + } + // use internal state + let st = store.getState(); + if (st.search !== undefined && st.search){ + lib.setSearch(st.search); } } diff --git a/src/screens/ProjectDetail/ProjectDetail.jsx b/src/screens/ProjectDetail/ProjectDetail.jsx index 9f8c104..976bf24 100644 --- a/src/screens/ProjectDetail/ProjectDetail.jsx +++ b/src/screens/ProjectDetail/ProjectDetail.jsx @@ -31,7 +31,7 @@ export default class ProjectDetail extends Component { return (