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 (
- + {project.name}
diff --git a/webpack.prod.js b/webpack.prod.js index 239e212..dfcbae2 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -4,7 +4,7 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { entry: { app: './src/index.jsx', - vendor: ['react', 'react-dom', 'geopattern', 'react-router-dom'] + vendor: ['react', 'react-dom', 'geopattern', 'react-router-dom', 'redux'] }, module: { loaders: [{ diff --git a/yarn.lock b/yarn.lock index 6a72331..24c9588 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2106,6 +2106,10 @@ loader-utils@^1.0.2: emojis-list "^2.0.0" json5 "^0.5.0" +lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -2118,7 +2122,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.14.0, lodash@^4.17.2, lodash@^4.2.0: +lodash@^4.14.0, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3018,6 +3022,15 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" @@ -3454,6 +3467,10 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" +symbol-observable@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + tapable@^0.2.5, tapable@~0.2.5: version "0.2.6" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"