aboutsummaryrefslogtreecommitdiff
path: root/src/client/react/users.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/react/users.js')
-rw-r--r--src/client/react/users.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/client/react/users.js b/src/client/react/users.js
new file mode 100644
index 0000000..01ff093
--- /dev/null
+++ b/src/client/react/users.js
@@ -0,0 +1,66 @@
+/* global USERS */
+
+import { combineReducers, createStore } from 'redux';
+
+const getId = ({ type, value }) => `${type}/${value}`;
+
+const byId = (state = {}, action) => {
+ switch (action.type) {
+ case 'USERS/ADD_USER':
+ return {
+ ...state,
+ [action.user.id]: {
+ ...action.user,
+ },
+ };
+ default:
+ return state;
+ }
+};
+
+const allIds = (state = [], action) => {
+ switch (action.type) {
+ case 'USERS/ADD_USER':
+ return [
+ ...state,
+ action.user.id,
+ ];
+ default:
+ return state;
+ }
+};
+
+const allUsers = (state = [], action) => {
+ switch (action.type) {
+ case 'USERS/ADD_USER':
+ return [
+ ...state,
+ {
+ ...action.user,
+ },
+ ];
+ default:
+ return state;
+ }
+};
+
+const store = createStore(combineReducers({
+ byId,
+ allIds,
+ allUsers,
+}));
+
+USERS.forEach((user) => {
+ store.dispatch({
+ type: 'USERS/ADD_USER',
+ user: {
+ type: user.type,
+ value: user.value,
+ id: getId(user),
+ },
+ });
+});
+
+const users = store.getState();
+
+export default users;