blob: 31b51a4d5e3ebf3410a51d4d7fb6037094b99b75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/**
@license
Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
export const UPDATE_PAGE = 'UPDATE_PAGE';
export const UPDATE_OFFLINE = 'UPDATE_OFFLINE';
export const UPDATE_DRAWER_STATE = 'UPDATE_DRAWER_STATE';
export const OPEN_SNACKBAR = 'OPEN_SNACKBAR';
export const CLOSE_SNACKBAR = 'CLOSE_SNACKBAR';
export const navigate = (path) => (dispatch) => {
// Extract the page name from path.
const page = path === '/' ? 'home' : path.slice(1);
// Any other info you might want to extract from the path (like page type),
// you can do here
dispatch(loadPage(page));
// Close the drawer - in case the *path* change came from a link in the drawer.
dispatch(updateDrawerState(false));
};
import {snapshotForums} from './firebaseFirestore.js';
var isSubscribedForums = false;
const loadPage = (page) => (dispatch, getState) => {
switch(page) {
case 'home':
import('../components/mao-home.js');
break;
case 'compete':
import('../components/mao-competitions.js');
break;
case 'tutor':
import('../components/mao-tutoring.js');
break;
case 'forums':
import('../components/mao-forums.js');
if(!isSubscribedForums) {
dispatch(snapshotForums());
isSubscribedForums = true;
}
break;
case 'account':
import('../components/mao-account.js');
break;
case 'admin':
if(getState().firebaseAdmin.isAdmin) {
import('../components/mao-admin.js');
} else {
page = 'view404';
import('../components/my-view404.js');
}
break;
default:
page = 'view404';
import('../components/my-view404.js');
}
dispatch(updatePage(page));
};
const updatePage = (page) => {
return {
type: UPDATE_PAGE,
page
};
};
let snackbarTimer;
export const showSnackbar = () => (dispatch) => {
dispatch({
type: OPEN_SNACKBAR
});
clearTimeout(snackbarTimer);
snackbarTimer = setTimeout(() =>
dispatch({ type: CLOSE_SNACKBAR }), 3000);
};
export const updateOffline = (offline) => (dispatch, getState) => {
// Show the snackbar, unless this is the first load of the page.
if (getState().app.offline !== undefined) {
dispatch(showSnackbar());
}
dispatch({
type: UPDATE_OFFLINE,
offline
});
};
export const updateLayout = (wide) => (dispatch, getState) => {
if (getState().app.drawerOpened) {
dispatch(updateDrawerState(false));
}
};
export const updateDrawerState = (opened) => (dispatch, getState) => {
if (getState().app.drawerOpened !== opened) {
dispatch({
type: UPDATE_DRAWER_STATE,
opened
});
}
};
|