aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNoah Loomans <noahloomans@gmail.com>2018-01-26 20:30:34 +0100
committerNoah Loomans <noahloomans@gmail.com>2018-01-26 20:30:34 +0100
commit19534b4770b4f4097b02f5fa021a24822b12d907 (patch)
tree4bc0d8ceca5d0c5ae36969dcd14588f0b37f051b /src
parent16723546de81e29fa8a31acc4070df5acb182b24 (diff)
Add week selector
Diffstat (limited to 'src')
-rw-r--r--src/client/react/components/container/WeekSelector.js34
-rw-r--r--src/client/react/components/page/User.js11
-rw-r--r--src/client/react/index.js3
3 files changed, 47 insertions, 1 deletions
diff --git a/src/client/react/components/container/WeekSelector.js b/src/client/react/components/container/WeekSelector.js
new file mode 100644
index 0000000..9f308f0
--- /dev/null
+++ b/src/client/react/components/container/WeekSelector.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import moment from 'moment';
+import momentPropTypes from 'react-moment-proptypes';
+import queryString from 'query-string';
+import { withRouter } from 'react-router-dom';
+
+const WeekSelector = ({ urlWeek, location, history }) => {
+ const updateWeek = (change) => {
+ const newWeek = moment().week(urlWeek.week() + change);
+ const isCurrentWeek = moment().week() === newWeek.week();
+ history.push(`${location.pathname}?${queryString.stringify({ week: isCurrentWeek ? undefined : newWeek.week() })}`);
+ };
+
+ return (
+ <div>
+ <button onClick={() => updateWeek(-1)}>Prev</button>
+ Week {urlWeek.week()}
+ <button onClick={() => updateWeek(+1)}>Next</button>
+ </div>
+ );
+};
+
+WeekSelector.propTypes = {
+ urlWeek: momentPropTypes.momentObj.isRequired,
+ history: PropTypes.shape({
+ push: PropTypes.func.isRequired,
+ }).isRequired,
+ location: PropTypes.shape({
+ pathname: PropTypes.string.isRequired,
+ }).isRequired,
+};
+
+export default withRouter(WeekSelector);
diff --git a/src/client/react/components/page/User.js b/src/client/react/components/page/User.js
index ff304c0..980070f 100644
--- a/src/client/react/components/page/User.js
+++ b/src/client/react/components/page/User.js
@@ -1,12 +1,17 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Redirect } from 'react-router-dom';
+import queryString from 'query-string';
+import moment from 'moment';
import Search from '../container/Search';
import View from '../container/View';
import users from '../../users';
+import WeekSelector from '../container/WeekSelector';
-const App = ({ match }) => {
+const App = ({ match, location }) => {
const user = `${match.params.type}/${match.params.value}`;
+ const weekStr = queryString.parse(location.search).week;
+ const week = weekStr ? moment().week(weekStr) : moment();
if (!users.allIds.includes(user)) {
// Invalid user, redirect to index.
@@ -18,6 +23,7 @@ const App = ({ match }) => {
<div className="menu">
<div className="menu-container">
<Search urlUser={user} />
+ <WeekSelector urlWeek={week} />
</div>
</div>
<View user={user} />
@@ -32,6 +38,9 @@ App.propTypes = {
value: PropTypes.string.isRequired,
}).isRequired,
}).isRequired,
+ location: PropTypes.shape({
+ search: PropTypes.string.isRequired,
+ }).isRequired,
};
export default App;
diff --git a/src/client/react/index.js b/src/client/react/index.js
index e70b442..122d54b 100644
--- a/src/client/react/index.js
+++ b/src/client/react/index.js
@@ -1,5 +1,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
+import moment from 'moment';
import { Provider } from 'react-redux';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import { createStore, applyMiddleware, compose } from 'redux';
@@ -9,6 +10,8 @@ import reducer from './reducers';
import Index from './components/page/Index';
import User from './components/page/User';
+moment.locale('nl');
+
// eslint-disable-next-line no-underscore-dangle
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(