aboutsummaryrefslogtreecommitdiff
path: root/src/client/react/store
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/react/store')
-rw-r--r--src/client/react/store/actions.js42
-rw-r--r--src/client/react/store/reducers.js4
2 files changed, 44 insertions, 2 deletions
diff --git a/src/client/react/store/actions.js b/src/client/react/store/actions.js
index e7ef91d..2157030 100644
--- a/src/client/react/store/actions.js
+++ b/src/client/react/store/actions.js
@@ -4,6 +4,7 @@ import users from '../users';
import { selectUser, selectWeek, selectCurrentWeek } from './selectors';
import purifyWeek from '../lib/purifyWeek';
import withinRange from '../lib/withinRange';
+import extractSchedule from '../lib/extractSchedule';
function updatePathname(pathname = '') {
return (dispatch, getState) => {
@@ -83,3 +84,44 @@ export function showRoomFinder() {
dispatch({ type: 'ROOM_FINDER/SHOW' });
};
}
+
+const fetchScheduleStart = (user, week) => ({
+ type: 'VIEW/FETCH_SCHEDULE_START', user, week,
+});
+
+const fetchScheduleSuccess = (user, week, htmlStr) => ({
+ type: 'VIEW/FETCH_SCHEDULE_SUCCESS', user, week, htmlStr,
+});
+
+const fetchScheduleError = (user, week) => ({
+ type: 'VIEW/FETCH_SCHEDULE_ERROR', user, week,
+});
+
+
+export function fetchScheduleIfNeeded(user, week) {
+ return (dispatch, getState) => {
+ const { schedules } = getState();
+ const schedule = extractSchedule(schedules, user, week);
+
+ if (schedule.state !== 'NOT_REQUESTED') {
+ return;
+ }
+
+ dispatch(fetchScheduleStart(user, week));
+
+ fetch(`/get/${user}?week=${week}`)
+ .then(r => r.text())
+ .then(
+ // success
+ (htmlStr) => {
+ dispatch(fetchScheduleSuccess(user, week, htmlStr));
+ },
+
+ // error
+ () => {
+ // TODO: Handle error status
+ dispatch(fetchScheduleError(user, week));
+ },
+ );
+ };
+}
diff --git a/src/client/react/store/reducers.js b/src/client/react/store/reducers.js
index cd68d96..3e39096 100644
--- a/src/client/react/store/reducers.js
+++ b/src/client/react/store/reducers.js
@@ -30,7 +30,7 @@ const DEFAULT_STATE = {
const schedule = (state = {}, action) => {
switch (action.type) {
- case 'VIEW/FETCH_SCHEDULE_REQUEST':
+ case 'VIEW/FETCH_SCHEDULE_START':
return {
...state,
state: 'FETCHING',
@@ -103,7 +103,7 @@ function reducer(state = DEFAULT_STATE, action) {
isRoomFinderVisible: false,
};
- case 'VIEW/FETCH_SCHEDULE_REQUEST':
+ case 'VIEW/FETCH_SCHEDULE_START':
case 'VIEW/FETCH_SCHEDULE_SUCCESS':
return {
...state,