From 1a8734191d909c3a4e97d00dada67cc39c8be7d6 Mon Sep 17 00:00:00 2001 From: mcarman Date: Tue, 7 Dec 2021 13:31:10 +0000 Subject: [PATCH] stores --- src/stores/courseStore.js | 59 +++++++++++++++++++++++++++++++++++++++ src/stores/userStore.js | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/stores/courseStore.js create mode 100644 src/stores/userStore.js diff --git a/src/stores/courseStore.js b/src/stores/courseStore.js new file mode 100644 index 0000000..9088341 --- /dev/null +++ b/src/stores/courseStore.js @@ -0,0 +1,59 @@ +import { EventEmitter } from "events"; +import Dispatcher from "../appDispatcher"; +import actionTypes from "../actions/actionTypes"; + +const CHANGE_EVENT = "change"; +let _courses = []; + +class CourseStore extends EventEmitter { + addChangeListener(callback) { + this.on(CHANGE_EVENT, callback); + } + + removeChangeListener(callback) { + this.removeListener(CHANGE_EVENT, callback); + } + + emitChange() { + this.emit(CHANGE_EVENT); + } + + getCourses() { + return _courses; + } + + getCourseBySlug(slug) { + return _courses.find(course => course.slug === slug); + } +} + +const store = new CourseStore(); + +Dispatcher.register(action => { + switch (action.actionType) { + case actionTypes.DELETE_COURSE: + _courses = _courses.filter( + course => course.id !== parseInt(action.id, 10) + ); + store.emitChange(); + break; + case actionTypes.CREATE_COURSE: + _courses.push(action.course); + store.emitChange(); + break; + case actionTypes.UPDATE_COURSE: + _courses = _courses.map(course => + course.id === action.course.id ? action.course : course + ); + store.emitChange(); + break; + case actionTypes.LOAD_COURSES: + _courses = action.courses; + store.emitChange(); + break; + default: + // nothing to do here + } +}); + +export default store; \ No newline at end of file diff --git a/src/stores/userStore.js b/src/stores/userStore.js new file mode 100644 index 0000000..bb32c1f --- /dev/null +++ b/src/stores/userStore.js @@ -0,0 +1,57 @@ +import { EventEmitter } from "events"; +import Dispatcher from "../appDispatcher"; +import actionTypes from "../actions/actionTypes"; + +const CHANGE_EVENT = "change"; +let _users = []; + +class UserStore extends EventEmitter { + addChangeListener(callback) { + this.on(CHANGE_EVENT, callback); + } + + removeChangeListener(callback) { + this.removeListener(CHANGE_EVENT, callback); + } + + emitChange() { + this.emit(CHANGE_EVENT); + } + + getUsers() { + return _users; + } + + getUserBySlug(slug) { + return _users.find((user) => user.slug === slug); + } +} + +const store = new UserStore(); + +Dispatcher.register((action) => { + switch (action.actionType) { + case actionTypes.DELETE_USER: + _users = _users.filter((user) => user.id !== parseInt(action.id, 10)); + store.emitChange(); + break; + case actionTypes.CREATE_USER: + _users.push(action.user); + store.emitChange(); + break; + case actionTypes.UPDATE_USER: + _users = _users.map((user) => + user.id === action.user.id ? action.user : user + ); + store.emitChange(); + break; + case actionTypes.LOAD_USERS: + _users = action.users; + store.emitChange(); + break; + default: + // nothing to do here + } +}); + +export default store;