mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-15 02:07:50 -05:00
cleaned up admin
This commit is contained in:
@@ -1,241 +0,0 @@
|
|||||||
const mongoose = require("mongoose");
|
|
||||||
const Permission = require("../models/permission");
|
|
||||||
const System = require("../models/system");
|
|
||||||
const User = require("../models/user");
|
|
||||||
|
|
||||||
exports.fetchPermissions = function(req, res, next) {
|
|
||||||
Permission.find(
|
|
||||||
{
|
|
||||||
shortName: req.params.shortName.toLowerCase()
|
|
||||||
},
|
|
||||||
function(err, permissions) {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
res.json({ success: false, message: err });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var userIds = permissions.map(permission => {return permission.userId});
|
|
||||||
User.find(
|
|
||||||
{
|
|
||||||
_id: {
|
|
||||||
$in: userIds
|
|
||||||
}
|
|
||||||
},
|
|
||||||
function(err, users) {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
res.json({ success: false, message: err });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var returnUsers = users.map(user =>{
|
|
||||||
var permission = permissions.find(obj => {
|
|
||||||
|
|
||||||
if (obj.userId.toString() == user._id.toString()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
if (!permission) {
|
|
||||||
console.error("Error - Permission not found for user: " + user._id);
|
|
||||||
res.json({ success: false, message: "Permission not found" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return {_id: permission._id, userId: user._id, firstName: user.firstName, lastName: user.lastName, email: user.email, role: permission.role };
|
|
||||||
});
|
|
||||||
|
|
||||||
res.json({ success: true, permissions: returnUsers });
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
exports.addPermission = async (req, res, next) => {
|
|
||||||
//router.post('/system/:shortName/group/:groupId?', isLoggedIn, function(req, res) {
|
|
||||||
|
|
||||||
|
|
||||||
let role = req.body.role;
|
|
||||||
var system = false;
|
|
||||||
var user = false;
|
|
||||||
var existing = false;
|
|
||||||
var saved = false;
|
|
||||||
if (!role || (role >= 20) || (role <1)) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: "Invalid Role"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("role looks good");
|
|
||||||
try {
|
|
||||||
system = await System.findOne(
|
|
||||||
{
|
|
||||||
shortName: req.params.shortName.toLowerCase()
|
|
||||||
});
|
|
||||||
} catch(err) {
|
|
||||||
console.error(err);
|
|
||||||
res.json({ success: false, message: err });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!system) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: "That System does not exist."
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("system looks good")
|
|
||||||
try {
|
|
||||||
user = await User.findOne(
|
|
||||||
{
|
|
||||||
email: req.body.email
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
res.json({ success: false, message: err });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user) {
|
|
||||||
res.json({ success: false, message: "User not found" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("user looks good")
|
|
||||||
try {
|
|
||||||
existing = await Permission.findOne({userId: user._id, systemId: system._id});
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
res.json({ success: false, message: err });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (existing) {
|
|
||||||
res.json({ success: false, message: "User already has acccess" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("no existing")
|
|
||||||
var permission = new Permission({
|
|
||||||
userId: user._id,
|
|
||||||
systemId: system._id,
|
|
||||||
shortName: system.shortName,
|
|
||||||
role: role
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
|
||||||
saved = await permission.save()
|
|
||||||
} catch(err) {
|
|
||||||
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: err
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("saved it")
|
|
||||||
var newPermission = saved.toObject();
|
|
||||||
newPermission.firstName = user.firstName;
|
|
||||||
newPermission.lastName = user.lastName;
|
|
||||||
newPermission.email = user.email;
|
|
||||||
|
|
||||||
|
|
||||||
console.log("Add Permission to: " + system.shortName + " for: " + newPermission.email + " by: " + req.user.email);
|
|
||||||
res.json({
|
|
||||||
success: true,
|
|
||||||
permission: newPermission
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
exports.updatePermission = function(req, res, next) {
|
|
||||||
process.nextTick(function() {
|
|
||||||
Permission.findOne(
|
|
||||||
{
|
|
||||||
_id: new mongoose.Types.ObjectId(req.params.permissionId),
|
|
||||||
shortName: req.params.shortName.toLowerCase(req.params.shortName)
|
|
||||||
},
|
|
||||||
|
|
||||||
function(err, permission) {
|
|
||||||
if (err) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: err
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (permission.role >= 20) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: "Cannot change permissions of system owner"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var newRole = req.body.role;
|
|
||||||
if (!newRole || (newRole >= 20) || (newRole <1)) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: "Invalid Role"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
permission.role = newRole;
|
|
||||||
permission.save(function(err, saved) {
|
|
||||||
if (err) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: err
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
res.json({
|
|
||||||
success: true,
|
|
||||||
permission: saved.toJSON()
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
exports.deletePermission = function(req, res, next) {
|
|
||||||
//router.get('/system/:shortName/remove_group/:groupId', isLoggedIn, function(req, res) {
|
|
||||||
|
|
||||||
Permission.findOneAndRemove({
|
|
||||||
shortName: req.params.shortName.toLowerCase(),
|
|
||||||
'_id': new mongoose.Types.ObjectId(req.params.permissionId),
|
|
||||||
role: { $lt : 20}
|
|
||||||
}, function(err, permission) {
|
|
||||||
|
|
||||||
if (err) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: err
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!permission) {
|
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: "Permission not found"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
res.json({
|
|
||||||
success: true
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// removed!
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
@@ -27,7 +27,7 @@ exports.listSystems = async function (req, res, next) {
|
|||||||
shortNames.push(systems[i].shortName);
|
shortNames.push(systems[i].shortName);
|
||||||
}
|
}
|
||||||
|
|
||||||
const stats = await SystemStat.find({ shortName: { $in: shortNames } }).exec();
|
|
||||||
|
|
||||||
let returnSys = systems.map(obj => {
|
let returnSys = systems.map(obj => {
|
||||||
var rObj = (({
|
var rObj = (({
|
||||||
@@ -65,6 +65,8 @@ exports.listSystems = async function (req, res, next) {
|
|||||||
rObj.id = obj._id;
|
rObj.id = obj._id;
|
||||||
return rObj;
|
return rObj;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const stats = await SystemStat.find({ shortName: { $in: shortNames } }).exec();
|
||||||
var sys_stats = {}
|
var sys_stats = {}
|
||||||
for (var i = 0; i < stats.length; i++) {
|
for (var i = 0; i < stats.length; i++) {
|
||||||
sys_stats[stats[i].shortName] = {};
|
sys_stats[stats[i].shortName] = {};
|
||||||
@@ -88,11 +90,11 @@ const remove_system = async (shortName) => {
|
|||||||
|
|
||||||
await System.deleteOne({
|
await System.deleteOne({
|
||||||
shortName: shortName
|
shortName: shortName
|
||||||
}).catch( err => console.error(err));
|
}).catch(err => console.error(err));
|
||||||
|
|
||||||
await Talkgroup.deleteMany({
|
await Talkgroup.deleteMany({
|
||||||
shortName: shortName
|
shortName: shortName
|
||||||
}).catch( err => console.error(err));
|
}).catch(err => console.error(err));
|
||||||
|
|
||||||
|
|
||||||
await Group.deleteMany({
|
await Group.deleteMany({
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
// Defining a User Model in mongoose
|
|
||||||
// Code modified from https://github.com/sahat/hackathon-starter
|
|
||||||
|
|
||||||
var mongoose = require("mongoose");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const PermissionSchema = new mongoose.Schema({
|
|
||||||
userId: mongoose.Schema.Types.ObjectId,
|
|
||||||
systemId: mongoose.Schema.Types.ObjectId,
|
|
||||||
shortName: String,
|
|
||||||
role: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
ver: {
|
|
||||||
type: Number,
|
|
||||||
default: 1.2
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports=mongoose.model("Permission", PermissionSchema)
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
// Defining a User Model in mongoose
|
|
||||||
// Code modified from https://github.com/sahat/hackathon-starter
|
|
||||||
const bcrypt = require("bcrypt");
|
|
||||||
const mongoose = require("mongoose");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const UserSchema = new mongoose.Schema({
|
|
||||||
local: {
|
|
||||||
name: String,
|
|
||||||
email: String,
|
|
||||||
password: String
|
|
||||||
},
|
|
||||||
email: {
|
|
||||||
type: String,
|
|
||||||
unique: true,
|
|
||||||
lowercase: true
|
|
||||||
},
|
|
||||||
password: String,
|
|
||||||
screenName: {
|
|
||||||
type: String,
|
|
||||||
unique: true,
|
|
||||||
lowercase: true
|
|
||||||
},
|
|
||||||
firstName: String,
|
|
||||||
lastName: String,
|
|
||||||
location: String,
|
|
||||||
email: String,
|
|
||||||
resetPasswordToken: String,
|
|
||||||
resetPasswordTTL: Date,
|
|
||||||
confirmEmail: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
confirmEmailToken: String,
|
|
||||||
confirmEmailTTL: Date,
|
|
||||||
admin: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
terms: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
ver: {
|
|
||||||
type: Number,
|
|
||||||
default: 1.1
|
|
||||||
},
|
|
||||||
sysCount: Number,
|
|
||||||
lastLogin: { type : Date, default: Date.now }
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Password hash middleware.
|
|
||||||
*/
|
|
||||||
UserSchema.pre("save", function(next) {
|
|
||||||
var user = this
|
|
||||||
if (!user.isModified("password")) return next()
|
|
||||||
bcrypt.genSalt(8, (err, salt) => {
|
|
||||||
if (err) return next(err)
|
|
||||||
bcrypt.hash(user.password, salt, null, (err, hash) => {
|
|
||||||
if (err) return next(err)
|
|
||||||
user.password = hash;
|
|
||||||
user.local.password = hash;
|
|
||||||
next()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
/*
|
|
||||||
Defining our own custom document instance method
|
|
||||||
*/
|
|
||||||
UserSchema.methods = {
|
|
||||||
comparePassword: function(candidatePassword, cb) {
|
|
||||||
bcrypt.compare(candidatePassword, this.local.password, (err, isMatch) => {
|
|
||||||
if (err) return cb(err)
|
|
||||||
cb(null, isMatch)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Statics
|
|
||||||
*/
|
|
||||||
UserSchema.statics = {}
|
|
||||||
|
|
||||||
module.exports = mongoose.model("User", UserSchema)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import { connect } from "react-redux"
|
|
||||||
import * as userActions from "../User/user-actions"
|
|
||||||
import Navigation from "./Navigation"
|
|
||||||
|
|
||||||
|
|
||||||
// Function passed in to `connect` to subscribe to Redux store updates.
|
|
||||||
// Any time it updates, mapStateToProps is called.
|
|
||||||
const mapStateToProps = (state) => {
|
|
||||||
return {
|
|
||||||
user: state.user
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connects React component to the redux store
|
|
||||||
// It does not modify the component class passed to it
|
|
||||||
// Instead, it returns a new, connected component class, for you to use.
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
userActions
|
|
||||||
)(Navigation)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import { connect } from "react-redux"
|
|
||||||
import * as groupActionCreators from "./group-actions"
|
|
||||||
import * as talkgroupActionCreators from "../Talkgroups/talkgroup-actions"
|
|
||||||
import { bindActionCreators } from 'redux'
|
|
||||||
import GroupModal from "./GroupModal"
|
|
||||||
|
|
||||||
//groups: state.group.items[props.match.params.shortName],
|
|
||||||
function mapStateToProps(state,props) {
|
|
||||||
return {
|
|
||||||
talkgroups: state.talkgroup.items[props.shortName],
|
|
||||||
groups: state.group.items[props.shortName],
|
|
||||||
shortName: props.shortName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function mapDispatchToProps(dispatch) {
|
|
||||||
return {
|
|
||||||
groupActions: bindActionCreators(groupActionCreators,dispatch),
|
|
||||||
talkgroupActions: bindActionCreators(talkgroupActionCreators, dispatch)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
mapDispatchToProps
|
|
||||||
)(GroupModal)
|
|
||||||
@@ -1,245 +0,0 @@
|
|||||||
import axios from "axios";
|
|
||||||
//import { browserHistory } from "react-router"
|
|
||||||
import * as types from "./group-constants";
|
|
||||||
import { push } from '@lagunovsky/redux-react-router'
|
|
||||||
|
|
||||||
// "Log In" action creators
|
|
||||||
function beginCreateGroup() {
|
|
||||||
return { type: types.CREATE_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function createGroupSuccess(data) {
|
|
||||||
return {
|
|
||||||
type: types.CREATE_SUCCESS_GROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function createGroupError(data) {
|
|
||||||
return {
|
|
||||||
type: types.CREATE_ERROR_GROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function beginUpdateGroup() {
|
|
||||||
return { type: types.UPDATE_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateGroupSuccess(data) {
|
|
||||||
return { type: types.UPDATE_SUCCESS_GROUP, data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateGroupError() {
|
|
||||||
return { type: types.UPDATE_ERROR_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function beginDeleteGroup() {
|
|
||||||
return { type: types.DELETE_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteGroupSuccess(data) {
|
|
||||||
return { type: types.DELETE_SUCCESS_GROUP, data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteGroupError() {
|
|
||||||
return { type: types.DELETE_ERROR_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginFetchGroup() {
|
|
||||||
return { type: types.FETCH_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchGroupSuccess(data) {
|
|
||||||
return {
|
|
||||||
type: types.FETCH_SUCCESS_GROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchGroupError(data) {
|
|
||||||
return {
|
|
||||||
type: types.FETCH_ERROR_GROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function saveGroupOrderSuccess() {
|
|
||||||
return { type: types.SAVE_ORDER_SUCCESS_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function saveGroupOrderError() {
|
|
||||||
return { type: types.SAVE_ORDER_ERROR_GROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeUserRequest(method, data, api = "/login") {
|
|
||||||
// returns a Promise
|
|
||||||
return axios({
|
|
||||||
method: method,
|
|
||||||
url: api,
|
|
||||||
data: data,
|
|
||||||
withCredentials: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function changeUrl(url) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(push(url));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example of an Async Action Creator
|
|
||||||
// http://redux.js.org/docs/advanced/AsyncActions.html
|
|
||||||
|
|
||||||
export function updateGroup(data) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginUpdateGroup());
|
|
||||||
|
|
||||||
return makeUserRequest("post", data, process.env.REACT_APP_ADMIN_SERVER + "/groups/" + data.shortName + "/" + data._id)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(updateGroupSuccess(response.data.group));
|
|
||||||
} else {
|
|
||||||
dispatch(updateGroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function shouldFetchGroups(state,shortName) {
|
|
||||||
if (!state.group.items || !state.group.items[shortName]) {
|
|
||||||
return true;
|
|
||||||
} else if (state.group.isWaiting) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function reorderGroup(shortName, oldIndex, newIndex) {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
const data = {
|
|
||||||
shortName: shortName,
|
|
||||||
oldIndex: oldIndex,
|
|
||||||
newIndex: newIndex
|
|
||||||
};
|
|
||||||
dispatch({
|
|
||||||
type: types.REORDER_GROUP,
|
|
||||||
data
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function fetchGroups(shortName) {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
if (shouldFetchGroups(getState(), shortName)) {
|
|
||||||
dispatch(beginFetchGroup());
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_ADMIN_SERVER + "/groups/" + shortName, {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
const data = { shortName: shortName, groups: response.data.groups };
|
|
||||||
dispatch(fetchGroupSuccess(data));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchGroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function saveGroupOrder(shortName, data) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch({
|
|
||||||
type: types.SAVE_ORDER_GROUP,
|
|
||||||
data
|
|
||||||
});
|
|
||||||
|
|
||||||
return makeUserRequest(
|
|
||||||
"post",
|
|
||||||
data,
|
|
||||||
process.env.REACT_APP_ADMIN_SERVER + "/groups/" + shortName + "/reorder"
|
|
||||||
)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(saveGroupOrderSuccess());
|
|
||||||
} else {
|
|
||||||
dispatch(saveGroupOrderError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function deleteGroup(shortName, groupId) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginDeleteGroup());
|
|
||||||
|
|
||||||
return makeUserRequest("delete", null, process.env.REACT_APP_ADMIN_SERVER + "/groups/" + shortName + "/" + groupId)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
const data = {shortName: shortName, groupId: groupId}
|
|
||||||
dispatch(deleteGroupSuccess(data));
|
|
||||||
} else {
|
|
||||||
dispatch(deleteGroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export function createGroup(data) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginCreateGroup());
|
|
||||||
|
|
||||||
return makeUserRequest("post", data, process.env.REACT_APP_ADMIN_SERVER + "/groups/" + data.shortName)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(createGroupSuccess(response.data.group));
|
|
||||||
} else {
|
|
||||||
dispatch(createGroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
export const CREATE_GROUP = "CREATE_GROUP"
|
|
||||||
export const CREATE_SUCCESS_GROUP = "CREATE_SUCCESS_GROUP"
|
|
||||||
export const CREATE_ERROR_GROUP = "CREATE_ERROR_GROUP"
|
|
||||||
export const UPDATE_GROUP = "UPDATE_GROUP"
|
|
||||||
export const UPDATE_SUCCESS_GROUP = "UPDATE_SUCCESS_GROUP"
|
|
||||||
export const UPDATE_ERROR_GROUP = "UPDATE_ERROR_GROUP"
|
|
||||||
export const DELETE_GROUP = "DELETE_GROUP"
|
|
||||||
export const DELETE_SUCCESS_GROUP = "DELETE_SUCCESS_GROUP"
|
|
||||||
export const DELETE_ERROR_GROUP = "DELETE_ERROR_GROUP"
|
|
||||||
export const FETCH_GROUP = "FETCH_GROUP"
|
|
||||||
export const FETCH_SUCCESS_GROUP = "FETCH_SUCCESS_GROUP"
|
|
||||||
export const FETCH_ERROR_GROUP = "FETCH_ERROR_GROUP"
|
|
||||||
export const REORDER_GROUP = "REORDER_GROUP"
|
|
||||||
export const SAVE_ORDER_GROUP = "SAVE_ORDER_GROUP"
|
|
||||||
export const SAVE_ORDER_SUCCESS_GROUP = "SAVE_ORDER_SUCCESS_GROUP"
|
|
||||||
export const SAVE_ORDER_ERROR_GROUP = "SAVE_ORDER_ERROR_GROUP"
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
import {
|
|
||||||
CREATE_GROUP,
|
|
||||||
CREATE_SUCCESS_GROUP,
|
|
||||||
CREATE_ERROR_GROUP,
|
|
||||||
DELETE_GROUP,
|
|
||||||
DELETE_SUCCESS_GROUP,
|
|
||||||
DELETE_ERROR_GROUP,
|
|
||||||
UPDATE_GROUP,
|
|
||||||
UPDATE_SUCCESS_GROUP,
|
|
||||||
UPDATE_ERROR_GROUP,
|
|
||||||
FETCH_GROUP,
|
|
||||||
FETCH_SUCCESS_GROUP,
|
|
||||||
FETCH_ERROR_GROUP,
|
|
||||||
REORDER_GROUP,
|
|
||||||
SAVE_ORDER_GROUP,
|
|
||||||
SAVE_ORDER_ERROR_GROUP,
|
|
||||||
SAVE_ORDER_SUCCESS_GROUP
|
|
||||||
} from "./group-constants";
|
|
||||||
|
|
||||||
|
|
||||||
function updateItemInArray(array, updatedItem) {
|
|
||||||
const updatedItems = array.map(item => {
|
|
||||||
if(item._id !== updatedItem._id) {
|
|
||||||
// Since we only want to update one item, preserve all others as they are now
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
return updatedItem;
|
|
||||||
});
|
|
||||||
|
|
||||||
return updatedItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
const group = (
|
|
||||||
state = {
|
|
||||||
orderChange: false,
|
|
||||||
isWaiting: false,
|
|
||||||
items: {}},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
|
|
||||||
case SAVE_ORDER_GROUP:
|
|
||||||
case CREATE_GROUP:
|
|
||||||
case FETCH_GROUP:
|
|
||||||
case DELETE_GROUP:
|
|
||||||
case UPDATE_GROUP:
|
|
||||||
return Object.assign({}, state, { isWaiting: true});
|
|
||||||
|
|
||||||
case UPDATE_SUCCESS_GROUP:
|
|
||||||
const updatedGroups = updateItemInArray(state.items[action.data.shortName], action.data);
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: updatedGroups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
case CREATE_SUCCESS_GROUP:
|
|
||||||
const newGroups = state.items[action.data.shortName].concat(action.data);
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: newGroups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
case DELETE_SUCCESS_GROUP:
|
|
||||||
const delGroups = state.items[action.data.shortName].filter(x => x._id !== action.data.groupId);
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: delGroups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
case FETCH_SUCCESS_GROUP:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: action.data.groups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
case SAVE_ORDER_SUCCESS_GROUP:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
orderChange: false,
|
|
||||||
isWaiting: false
|
|
||||||
});
|
|
||||||
|
|
||||||
case SAVE_ORDER_ERROR_GROUP:
|
|
||||||
case FETCH_ERROR_GROUP:
|
|
||||||
case CREATE_ERROR_GROUP:
|
|
||||||
case DELETE_ERROR_GROUP:
|
|
||||||
case UPDATE_ERROR_GROUP:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false
|
|
||||||
});
|
|
||||||
|
|
||||||
case REORDER_GROUP:
|
|
||||||
if ((action.data.newIndex<0)||(action.data.newIndex>(state.items[action.data.shortName].length-1))) {
|
|
||||||
return state
|
|
||||||
}
|
|
||||||
const moveGroups = state.items[action.data.shortName].slice();
|
|
||||||
moveGroups.splice(action.data.newIndex, 0, moveGroups.splice(action.data.oldIndex, 1)[0]);
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
orderChange: true,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: moveGroups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default group;
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import { connect } from "react-redux"
|
|
||||||
import * as systemActions from "./system-actions"
|
|
||||||
import CreateSystem from "./CreateSystem"
|
|
||||||
|
|
||||||
function mapStateToProps(state) {
|
|
||||||
return {
|
|
||||||
user: state.user
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
systemActions
|
|
||||||
)(CreateSystem)
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import { connect } from "react-redux"
|
|
||||||
import * as systemActions from "./system-actions"
|
|
||||||
import ListSystems from "./ListSystems"
|
|
||||||
|
|
||||||
function mapStateToProps(state) {
|
|
||||||
return {
|
|
||||||
system: state.system
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
systemActions
|
|
||||||
)(ListSystems)
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
import React, { Component } from "react";
|
|
||||||
import ReactDOM from "react-dom";
|
|
||||||
import {
|
|
||||||
Container,
|
|
||||||
Header,
|
|
||||||
Form,
|
|
||||||
Grid,
|
|
||||||
Segment,
|
|
||||||
Input,
|
|
||||||
Button,
|
|
||||||
Message,
|
|
||||||
Step,
|
|
||||||
Icon
|
|
||||||
} from "semantic-ui-react";
|
|
||||||
|
|
||||||
import SystemForm from "./SystemForm";
|
|
||||||
|
|
||||||
// ----------------------------------------------------
|
|
||||||
const requestMessageStyle = {
|
|
||||||
color: "red"
|
|
||||||
};
|
|
||||||
|
|
||||||
// ----------------------------------------------------
|
|
||||||
class PreCreateSystem extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
state = {
|
|
||||||
requestMessage: ""
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<Step.Group attached='top' widths={3}>
|
|
||||||
<Step>
|
|
||||||
<Icon name='wifi' />
|
|
||||||
<Step.Content>
|
|
||||||
<Step.Title>Trunk Recorder</Step.Title>
|
|
||||||
<Step.Description>Choose your shipping options</Step.Description>
|
|
||||||
</Step.Content>
|
|
||||||
</Step>
|
|
||||||
|
|
||||||
<Step active>
|
|
||||||
<Icon name='payment' />
|
|
||||||
<Step.Content>
|
|
||||||
<Step.Title>Billing</Step.Title>
|
|
||||||
<Step.Description>Enter billing information</Step.Description>
|
|
||||||
</Step.Content>
|
|
||||||
</Step>
|
|
||||||
|
|
||||||
<Step disabled>
|
|
||||||
<Icon name='info' />
|
|
||||||
<Step.Content>
|
|
||||||
<Step.Title>Confirm Order</Step.Title>
|
|
||||||
</Step.Content>
|
|
||||||
</Step>
|
|
||||||
</Step.Group>
|
|
||||||
|
|
||||||
<Segment attached>
|
|
||||||
<Image src='https://react.semantic-ui.com/images/wireframe/paragraph.png' />
|
|
||||||
</Segment>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default PreCreateSystem;
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import { connect } from "react-redux"
|
|
||||||
import UpdateSystem from "./UpdateSystem"
|
|
||||||
import * as systemActions from "./system-actions"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const mapStateToProps = (state, props) => {
|
|
||||||
|
|
||||||
return {
|
|
||||||
system: state.system.items.find((item) => item.shortName === props.match.params.shortName),
|
|
||||||
user: state.user
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connect(
|
|
||||||
mapStateToProps,
|
|
||||||
systemActions
|
|
||||||
)(UpdateSystem)
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
import axios from "axios";
|
|
||||||
//import { browserHistory } from "react-router"
|
|
||||||
import * as types from "./error-constants";
|
|
||||||
import { push } from '@lagunovsky/redux-react-router';
|
|
||||||
|
|
||||||
|
|
||||||
function beginFetch() {
|
|
||||||
return { type: types.FETCH };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchSuccess(data) {
|
|
||||||
return { type: types.FETCH_SUCCESS,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchError(data) {
|
|
||||||
return { type: types.FETCH_ERROR,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
export function changeUrl(url) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(push(url));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function fetch(shortName) {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
|
|
||||||
dispatch(beginFetch());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_BACKEND_SERVER + "/" + shortName + "/errors", {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data) {
|
|
||||||
var data ={
|
|
||||||
shortName: shortName,
|
|
||||||
errors: response.data
|
|
||||||
}
|
|
||||||
dispatch(fetchSuccess(data));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export const FETCH = "FETCH"
|
|
||||||
export const FETCH_SUCCESS = "FETCH_SUCCESS"
|
|
||||||
export const FETCH_ERROR = "FETCH_ERROR"
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
import {
|
|
||||||
FETCH,
|
|
||||||
FETCH_SUCCESS,
|
|
||||||
FETCH_ERROR
|
|
||||||
} from "./error-constants";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const error = (
|
|
||||||
state = {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {}
|
|
||||||
},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
|
|
||||||
case FETCH:
|
|
||||||
|
|
||||||
return Object.assign({}, state, { isWaiting: true});
|
|
||||||
|
|
||||||
|
|
||||||
case FETCH_SUCCESS:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: action.data.errors
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
case FETCH_ERROR:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false
|
|
||||||
});
|
|
||||||
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default error;
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
const FETCH_SUCCESS_STATISTIC = "FETCH_SUCCESS_STATISTIC"
|
|
||||||
|
|
||||||
const statistic = (
|
|
||||||
state = {},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
|
|
||||||
|
|
||||||
case FETCH_SUCCESS_STATISTIC:
|
|
||||||
return Object.assign({}, state, {...action.data});
|
|
||||||
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default statistic;
|
|
||||||
@@ -1,232 +0,0 @@
|
|||||||
import axios from "axios";
|
|
||||||
//import { browserHistory } from "react-router"
|
|
||||||
import * as types from "./system-constants";
|
|
||||||
import { push } from '@lagunovsky/redux-react-router';
|
|
||||||
|
|
||||||
|
|
||||||
// "Log In" action creators
|
|
||||||
function beginCreateSystem() {
|
|
||||||
return { type: types.CREATE_SYSTEM };
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSystemSuccess(data) {
|
|
||||||
return {
|
|
||||||
type: types.CREATE_SUCCESS_SYSTEM,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSystemError(data) {
|
|
||||||
return {
|
|
||||||
type: types.CREATE_ERROR_SYSTEM,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginUpdateSystem() {
|
|
||||||
return { type: types.UPDATE_SYSTEM };
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateSystemSuccess(data) {
|
|
||||||
return { type: types.UPDATE_SUCCESS_SYSTEM, data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateSystemError(data) {
|
|
||||||
return { type: types.UPDATE_ERROR_SYSTEM, data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginDeleteSystem() {
|
|
||||||
return { type: types.DELETE_SYSTEM };
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteSystemSuccess(data) {
|
|
||||||
return { type: types.DELETE_SUCCESS_SYSTEM,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteSystemError() {
|
|
||||||
return { type: types.DELETE_ERROR_SYSTEM };
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginFetchSystem() {
|
|
||||||
return { type: types.FETCH_SYSTEM };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchSystemSuccess(data) {
|
|
||||||
return { type: types.FETCH_SUCCESS_SYSTEM,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchStatisticSuccess(data) {
|
|
||||||
return { type: types.FETCH_SUCCESS_STATISTIC,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchSystemError(data) {
|
|
||||||
return { type: types.FETCH_ERROR_SYSTEM,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginFetchError() {
|
|
||||||
return { type: types.FETCH_ERROR };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchErrorsSuccess(data) {
|
|
||||||
return { type: types.FETCH_SUCCESS_ERROR,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchErrorsError(data) {
|
|
||||||
return { type: types.FETCH_ERROR_ERROR,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeUserRequest(method, data, api = "/login") {
|
|
||||||
// returns a Promise
|
|
||||||
return axios({
|
|
||||||
method: method,
|
|
||||||
url: api,
|
|
||||||
data: data,
|
|
||||||
withCredentials: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function changeUrl(url) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(push(url));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example of an Async Action Creator
|
|
||||||
// http://redux.js.org/docs/advanced/AsyncActions.html
|
|
||||||
|
|
||||||
export function updateSystem(data) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginUpdateSystem());
|
|
||||||
|
|
||||||
return makeUserRequest("post", data, process.env.REACT_APP_ADMIN_SERVER + "/systems/" + data.shortName, {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(updateSystemSuccess(response.data.system));
|
|
||||||
} else {
|
|
||||||
dispatch(updateSystemError());
|
|
||||||
return response.data.message;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function shouldFetchSystems(state, subreddit) {
|
|
||||||
if ((!state.system.items) || (state.system.items.length <1)) {
|
|
||||||
return true
|
|
||||||
} else if (state.system.isWaiting) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function fetchErrors(shortName) {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
|
|
||||||
dispatch(beginFetchError());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_BACKEND_SERVER + "/" + shortName + "/systems", {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data) {
|
|
||||||
dispatch(fetchErrorsSuccess(shortName, response.data));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchErrorsError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function fetchSystems() {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
if (shouldFetchSystems(getState())) {
|
|
||||||
dispatch(beginFetchSystem());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_ADMIN_SERVER + "/systems", {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(fetchSystemSuccess(response.data.systems));
|
|
||||||
dispatch(fetchStatisticSuccess(response.data.stats));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchSystemError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function deleteSystem(shortName) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginDeleteSystem());
|
|
||||||
|
|
||||||
return makeUserRequest("delete", null, process.env.REACT_APP_ADMIN_SERVER + "/systems/"+shortName)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(deleteSystemSuccess({shortName: shortName}));
|
|
||||||
dispatch(push("/list-systems"));
|
|
||||||
} else {
|
|
||||||
dispatch(deleteSystemError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createSystem(data) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginCreateSystem());
|
|
||||||
|
|
||||||
return makeUserRequest("post", data, process.env.REACT_APP_ADMIN_SERVER + "/systems", {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(createSystemSuccess(response.data.system));
|
|
||||||
} else {
|
|
||||||
dispatch(createSystemError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
export const CREATE_SYSTEM = "CREATE_SYSTEM"
|
|
||||||
export const CREATE_SUCCESS_SYSTEM = "CREATE_SUCCESS_SYSTEM"
|
|
||||||
export const CREATE_ERROR_SYSTEM = "CREATE_ERROR_SYSTEM"
|
|
||||||
export const UPDATE_SYSTEM = "UPDATE_SYSTEM"
|
|
||||||
export const UPDATE_SUCCESS_SYSTEM = "UPDATE_SUCCESS_SYSTEM"
|
|
||||||
export const UPDATE_ERROR_SYSTEM = "UPDATE_ERROR_SYSTEM"
|
|
||||||
export const DELETE_SYSTEM = "DELETE_SYSTEM"
|
|
||||||
export const DELETE_SUCCESS_SYSTEM = "DELETE_SUCCESS_SYSTEM"
|
|
||||||
export const DELETE_ERROR_SYSTEM = "DELETE_ERROR_SYSTEM"
|
|
||||||
export const FETCH_SYSTEM = "FETCH_SYSTEM"
|
|
||||||
export const FETCH_SUCCESS_SYSTEM = "FETCH_SUCCESS_SYSTEM"
|
|
||||||
export const FETCH_ERROR_SYSTEM = "FETCH_ERROR_SYSTEM"
|
|
||||||
export const FETCH_SUCCESS_STATISTIC = "FETCH_SUCCESS_STATISTIC"
|
|
||||||
export const FETCH_ERROR = "FETCH_ERROR"
|
|
||||||
export const FETCH_SUCCESS_ERROR = "FETCH_SUCCESS_ERROR"
|
|
||||||
export const FETCH_ERROR_ERROR = "FETCH_ERROR_ERROR"
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
import {
|
|
||||||
CREATE_SYSTEM,
|
|
||||||
CREATE_SUCCESS_SYSTEM,
|
|
||||||
CREATE_ERROR_SYSTEM,
|
|
||||||
UPDATE_SYSTEM,
|
|
||||||
UPDATE_SUCCESS_SYSTEM,
|
|
||||||
UPDATE_ERROR_SYSTEM,
|
|
||||||
DELETE_SYSTEM,
|
|
||||||
DELETE_SUCCESS_SYSTEM,
|
|
||||||
DELETE_ERROR_SYSTEM,
|
|
||||||
FETCH_SYSTEM,
|
|
||||||
FETCH_SUCCESS_SYSTEM,
|
|
||||||
FETCH_ERROR_SYSTEM
|
|
||||||
} from "./system-constants";
|
|
||||||
|
|
||||||
function updateObjectInArray(array, shortName, updatedItem) {
|
|
||||||
return array.map( item => {
|
|
||||||
if(item.shortName !== shortName) {
|
|
||||||
// This isn't the item we care about - keep it as-is
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise, this is the one we want - return an updated value
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
...updatedItem
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const system = (
|
|
||||||
state = {
|
|
||||||
isWaiting: false,
|
|
||||||
items: []},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
|
|
||||||
case DELETE_SYSTEM:
|
|
||||||
case UPDATE_SYSTEM:
|
|
||||||
case FETCH_SYSTEM:
|
|
||||||
case CREATE_SYSTEM:
|
|
||||||
|
|
||||||
return Object.assign({}, state, { isWaiting: true});
|
|
||||||
|
|
||||||
case DELETE_SUCCESS_SYSTEM:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
items: state.items.filter(item => item.shortName !== action.data.shortName)
|
|
||||||
});
|
|
||||||
|
|
||||||
case UPDATE_SUCCESS_SYSTEM:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
items: updateObjectInArray(state.items, action.data.shortName, action.data)
|
|
||||||
});
|
|
||||||
case FETCH_SUCCESS_SYSTEM:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: action.data
|
|
||||||
});
|
|
||||||
case CREATE_SUCCESS_SYSTEM:
|
|
||||||
const newItems = state.items.concat({
|
|
||||||
name: action.data.name,
|
|
||||||
shortName: action.data.shortName,
|
|
||||||
description: action.data.description,
|
|
||||||
systemType: action.data.systemType,
|
|
||||||
city: action.data.city,
|
|
||||||
state: action.data.state,
|
|
||||||
county: action.data.county,
|
|
||||||
country: action.data.country,
|
|
||||||
key: action.data.key,
|
|
||||||
userId: action.data.userId,
|
|
||||||
id: action.data.id,
|
|
||||||
showScreenName: action.data.showScreenName,
|
|
||||||
ignoreUnknownTalkgroup : action.data.ignoreUnknownTalkgroup
|
|
||||||
});
|
|
||||||
return Object.assign({}, state, { isWaiting: false,
|
|
||||||
items: newItems});
|
|
||||||
|
|
||||||
case DELETE_ERROR_SYSTEM:
|
|
||||||
case UPDATE_ERROR_SYSTEM:
|
|
||||||
case FETCH_ERROR_SYSTEM:
|
|
||||||
case CREATE_ERROR_SYSTEM:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false
|
|
||||||
});
|
|
||||||
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default system;
|
|
||||||
@@ -1,163 +0,0 @@
|
|||||||
import axios from 'axios';
|
|
||||||
//import { browserHistory } from "react-router"
|
|
||||||
import * as types from "./talkgroup-constants";
|
|
||||||
import { push } from '@lagunovsky/redux-react-router';
|
|
||||||
|
|
||||||
// "Log In" action creators
|
|
||||||
function beginImportTalkgroup() {
|
|
||||||
return { type: types.IMPORT_TALKGROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function importTalkgroupSuccess(data) {
|
|
||||||
return {
|
|
||||||
type: types.IMPORT_SUCCESS_TALKGROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function importTalkgroupError(data) {
|
|
||||||
return {
|
|
||||||
type: types.IMPORT_ERROR_TALKGROUP,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginExportTalkgroup() {
|
|
||||||
return { type: types.EXPORT_TALKGROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function beginFetchTalkgroup() {
|
|
||||||
return { type: types.FETCH_TALKGROUP };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchTalkgroupSuccess(data) {
|
|
||||||
return { type: types.FETCH_SUCCESS_TALKGROUP,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchTalkgroupError(data) {
|
|
||||||
return { type: types.FETCH_ERROR_TALKGROUP,
|
|
||||||
data };
|
|
||||||
}
|
|
||||||
|
|
||||||
export function changeUrl(url) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(push(url));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/41878838/how-do-i-set-multipart-in-axios-with-react
|
|
||||||
function fileUpload(shortName, file){
|
|
||||||
const url = process.env.REACT_APP_ADMIN_SERVER + "/talkgroups/" + shortName + "/import";
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append('file',file)
|
|
||||||
const config = {
|
|
||||||
headers: {
|
|
||||||
'content-type': 'multipart/form-data'
|
|
||||||
},
|
|
||||||
withCredentials: true
|
|
||||||
}
|
|
||||||
return axios.post(url, formData,config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example of an Async Action Creator
|
|
||||||
// http://redux.js.org/docs/advanced/AsyncActions.html
|
|
||||||
export function importTalkgroups(
|
|
||||||
shortName, file,
|
|
||||||
successPath // path to redirect to upon successful log in
|
|
||||||
) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginImportTalkgroup());
|
|
||||||
|
|
||||||
return fileUpload(shortName, file)
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
var data = {};
|
|
||||||
data.shortName = shortName;
|
|
||||||
data.talkgroups = response.data.talkgroups
|
|
||||||
dispatch(importTalkgroupSuccess(data));
|
|
||||||
// use browserHistory singleton to control navigation. Will generate a
|
|
||||||
// state change for time-traveling as we are using the react-router-redux package
|
|
||||||
//browserHistory.push(successPath)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
dispatch(importTalkgroupError(response.data.message));
|
|
||||||
return response.data.message;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(function(response) {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
return response.message;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function exportTalkgroups(
|
|
||||||
shortName
|
|
||||||
) {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginExportTalkgroup());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_ADMIN_SERVER + "/talkgroups/" + shortName + "/export", { withCredentials: true })
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
var data = {shortName: shortName, talkgroups: response.data.talkgroups}
|
|
||||||
dispatch(fetchTalkgroupSuccess( data));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchTalkgroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function shouldFetchTalkgroups(state, shortName) {
|
|
||||||
if (!state.talkgroup.items.hasOwnProperty(shortName)) {
|
|
||||||
return true
|
|
||||||
} else if (state.talkgroup.isWaiting) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function fetchTalkgroups(shortName) {
|
|
||||||
return (dispatch, getState) => {
|
|
||||||
if (shouldFetchTalkgroups(getState(), shortName)) {
|
|
||||||
dispatch(beginFetchTalkgroup());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_ADMIN_SERVER + "/talkgroups/"+shortName, { withCredentials: true })
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
var data = {shortName: shortName, talkgroups: response.data.talkgroups}
|
|
||||||
dispatch(fetchTalkgroupSuccess( data));
|
|
||||||
} else {
|
|
||||||
dispatch(fetchTalkgroupError());
|
|
||||||
let registerMessage = response.data.message;
|
|
||||||
return registerMessage;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
export const IMPORT_TALKGROUP = "IMPORT_TALKGROUP"
|
|
||||||
export const IMPORT_SUCCESS_TALKGROUP = "IMPORT_SUCCESS_TALKGROUP"
|
|
||||||
export const IMPORT_ERROR_TALKGROUP = "IMPORT_ERROR_TALKGROUP"
|
|
||||||
export const EXPORT_TALKGROUP = "EXPORT_TALKGROUP"
|
|
||||||
export const EXPORT_SUCCESS_TALKGROUP = "EXPORT_SUCCESS_TALKGROUP"
|
|
||||||
export const EXPORT_ERROR_TALKGROUP = "EXPORT_ERROR_TALKGROUP"
|
|
||||||
export const FETCH_TALKGROUP = "FETCH_TALKGROUP"
|
|
||||||
export const FETCH_SUCCESS_TALKGROUP = "FETCH_SUCCESS_TALKGROUP"
|
|
||||||
export const FETCH_ERROR_TALKGROUP = "FETCH_ERROR_TALKGROUP"
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
import {
|
|
||||||
IMPORT_TALKGROUP,
|
|
||||||
IMPORT_SUCCESS_TALKGROUP,
|
|
||||||
IMPORT_ERROR_TALKGROUP,
|
|
||||||
EXPORT_TALKGROUP,
|
|
||||||
EXPORT_SUCCESS_TALKGROUP,
|
|
||||||
EXPORT_ERROR_TALKGROUP,
|
|
||||||
FETCH_TALKGROUP,
|
|
||||||
FETCH_SUCCESS_TALKGROUP,
|
|
||||||
FETCH_ERROR_TALKGROUP
|
|
||||||
} from "./talkgroup-constants";
|
|
||||||
|
|
||||||
const talkgroup = (
|
|
||||||
state = {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {}},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
|
|
||||||
case FETCH_TALKGROUP:
|
|
||||||
case IMPORT_TALKGROUP:
|
|
||||||
case EXPORT_TALKGROUP:
|
|
||||||
return Object.assign({}, state, { isWaiting: true});
|
|
||||||
|
|
||||||
case IMPORT_SUCCESS_TALKGROUP:
|
|
||||||
case FETCH_SUCCESS_TALKGROUP:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
items: {
|
|
||||||
...state.items,
|
|
||||||
[action.data.shortName]: action.data.talkgroups
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case FETCH_ERROR_TALKGROUP:
|
|
||||||
case IMPORT_ERROR_TALKGROUP:
|
|
||||||
case EXPORT_ERROR_TALKGROUP:
|
|
||||||
case EXPORT_SUCCESS_TALKGROUP:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false
|
|
||||||
});
|
|
||||||
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default talkgroup;
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import axios from "axios";
|
|
||||||
//import { browserHistory } from "react-router"
|
|
||||||
import * as types from "./user-constants";
|
|
||||||
import { push } from '@lagunovsky/redux-react-router';
|
|
||||||
|
|
||||||
|
|
||||||
// "Log Out" action creators
|
|
||||||
function beginLogout() {
|
|
||||||
return { type: types.LOGOUT_USER };
|
|
||||||
}
|
|
||||||
|
|
||||||
function logoutSuccess() {
|
|
||||||
return { type: types.LOGOUT_SUCCESS_USER };
|
|
||||||
}
|
|
||||||
|
|
||||||
function logoutError() {
|
|
||||||
return { type: types.LOGOUT_ERROR_USER };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example of an Async Action Creator
|
|
||||||
// http://redux.js.org/docs/advanced/AsyncActions.html
|
|
||||||
export function manualLogout() {
|
|
||||||
return dispatch => {
|
|
||||||
dispatch(beginLogout());
|
|
||||||
|
|
||||||
return axios
|
|
||||||
.get(process.env.REACT_APP_ACCOUNT_SERVER + "/logout", {withCredentials: true})
|
|
||||||
.then(response => {
|
|
||||||
if (response.data.success) {
|
|
||||||
dispatch(logoutSuccess());
|
|
||||||
// use browserHistory singleton to control navigation. Will generate a
|
|
||||||
// state change for time-traveling as we are using the react-router-redux package
|
|
||||||
//browserHistory.push("/") // logout to home page
|
|
||||||
dispatch(push("/"));
|
|
||||||
} else {
|
|
||||||
dispatch(logoutError());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(response => {
|
|
||||||
if (response instanceof Error) {
|
|
||||||
// Something happened during logout that triggered an Error
|
|
||||||
console.log("Error", response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
export const LOGIN_SUCCESS_USER = "LOGIN_SUCCESS_USER"
|
|
||||||
export const LOGIN_EMAIL_ERROR_USER = "LOGIN_EMAIL_ERROR_USER"
|
|
||||||
export const LOGIN_ERROR_USER = "LOGIN_ERROR_USER"
|
|
||||||
export const LOGOUT_USER = "LOGOUT_USER"
|
|
||||||
export const LOGOUT_SUCCESS_USER = "LOGOUT_SUCCESS_USER"
|
|
||||||
export const LOGOUT_ERROR_USER = "LOGOUT_ERROR_USER"
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
import {
|
|
||||||
LOGOUT_USER,
|
|
||||||
LOGOUT_SUCCESS_USER,
|
|
||||||
LOGOUT_ERROR_USER,
|
|
||||||
LOGIN_SUCCESS_USER,
|
|
||||||
LOGIN_ERROR_USER,
|
|
||||||
LOGIN_EMAIL_ERROR_USER
|
|
||||||
} from "./user-constants";
|
|
||||||
|
|
||||||
const user = (
|
|
||||||
state = {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: false,
|
|
||||||
userId: ""
|
|
||||||
},
|
|
||||||
action
|
|
||||||
) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case LOGIN_SUCCESS_USER:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: true,
|
|
||||||
...action.data
|
|
||||||
});
|
|
||||||
case LOGIN_EMAIL_ERROR_USER:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: false,
|
|
||||||
userId: action.data.userId
|
|
||||||
});
|
|
||||||
case LOGIN_ERROR_USER:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: false
|
|
||||||
});
|
|
||||||
case LOGOUT_USER:
|
|
||||||
return Object.assign({}, state, { isWaiting: true });
|
|
||||||
case LOGOUT_SUCCESS_USER:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: false,
|
|
||||||
email: "",
|
|
||||||
userId: ""
|
|
||||||
});
|
|
||||||
case LOGOUT_ERROR_USER:
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
isWaiting: false,
|
|
||||||
authenticated: true
|
|
||||||
});
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default user;
|
|
||||||
Reference in New Issue
Block a user