admin actions
This commit is contained in:
parent
a7d69c088a
commit
f4ac7c3daf
77
actions/adminActions.js
Normal file
77
actions/adminActions.js
Normal file
@ -0,0 +1,77 @@
|
||||
import axios from 'axios';
|
||||
import { Cookies } from 'react-cookie';
|
||||
import Router from 'next/router';
|
||||
import moment from 'moment';
|
||||
|
||||
import * as actionTypes from '../constants/actionTypes';
|
||||
import * as currentState from '../reducers/initialState';
|
||||
|
||||
export const getUsers = ({ dispatch }) =>
|
||||
{
|
||||
console.log("ACTION", "getUsers()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/admin/`, {})
|
||||
.then(async (response) =>
|
||||
{
|
||||
console.log("getContractRules", "response.data", response.data);
|
||||
dispatch({ type: actionTypes.ADMIN, data: { users: response.data.users } });
|
||||
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.error("ACTION", "getUsers()", "error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export const sendInvite = ({ name, email, companies }) =>
|
||||
{
|
||||
console.log("ACTION", "sendInvite()", { name, email, companies });
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/admin/invite`, { name, email, companies })
|
||||
.then(async (response) =>
|
||||
{
|
||||
console.log("ACTION", "sendInvite()", "response.data", response.data);
|
||||
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.error("ACTION", "sendInvite()", "error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export const removeUser = ({ email }) =>
|
||||
{
|
||||
console.log("ACTION", "removeUser()", { name, email, companies });
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/admin/remove`, { name, email, companies })
|
||||
.then(async (response) =>
|
||||
{
|
||||
console.log("ACTION", "removeUser()", "response.data", response.data);
|
||||
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.error("ACTION", "removeUser()", "error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -223,7 +223,7 @@ export const getUsers = ({ dispatch }) =>
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/auth/admin/`, {})
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/admin/`, {})
|
||||
.then(async (response) =>
|
||||
{
|
||||
console.log("getContractRules", "response.data", response.data);
|
||||
|
||||
82
pages/api/admin/invite.js
Normal file
82
pages/api/admin/invite.js
Normal file
@ -0,0 +1,82 @@
|
||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
||||
import axios from 'axios';
|
||||
import { Cookies } from 'react-cookie';
|
||||
import cookie from 'cookie';
|
||||
import moment from 'moment';
|
||||
import jwt from 'jsonwebtoken';
|
||||
|
||||
import { cors } from '../../../lib/cors';
|
||||
|
||||
export default async function handler(req, res)
|
||||
{
|
||||
await cors(req, res);
|
||||
let { name, email, companies } = req.body;
|
||||
|
||||
console.log("API", "admin/invite");
|
||||
if(req.headers.cookie !== undefined)
|
||||
{
|
||||
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
|
||||
|
||||
if(cookies.jwt !== undefined && cookies.jwt !== null)
|
||||
{
|
||||
let allow = false;
|
||||
let company = {};
|
||||
let client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
|
||||
|
||||
console.log("API", "admin/invite", "client_jwt_decoded", client_jwt_decoded);
|
||||
|
||||
const admin_companies = client_jwt_decoded.companies;
|
||||
const allowed_companies = [];
|
||||
|
||||
if(admin_companies !== undefined && admin_companies !== null)
|
||||
{
|
||||
if(companies !== undefined && companies !== null)
|
||||
{
|
||||
for(let c in companies)
|
||||
{
|
||||
for(let ac in admin_companies)
|
||||
{
|
||||
if(admin_companies[ac].acc_number === companies[c])
|
||||
{
|
||||
allowed_companies.push(companies[c]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(allowed_companies.length > 0)
|
||||
{
|
||||
const payload = { name, email, companies, };
|
||||
console.log("payload");
|
||||
console.log(payload);
|
||||
|
||||
const crm_jwt = jwt.sign(payload, process.env.JWT_SECRET_CRM, { noTimestamp: true });
|
||||
|
||||
res.status(200).send({
|
||||
status: "success",
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
35
pages/api/admin/remove.js
Normal file
35
pages/api/admin/remove.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
||||
import axios from 'axios';
|
||||
import { Cookies } from 'react-cookie';
|
||||
import cookie from 'cookie';
|
||||
import moment from 'moment';
|
||||
import jwt from 'jsonwebtoken';
|
||||
|
||||
import { cors } from '../../../lib/cors';
|
||||
|
||||
export default async function handler(req, res)
|
||||
{
|
||||
await cors(req, res);
|
||||
let { email } = req.body;
|
||||
|
||||
console.log("API", "admin/remove");
|
||||
if(req.headers.cookie !== undefined)
|
||||
{
|
||||
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
|
||||
|
||||
if(cookies.jwt !== undefined && cookies.jwt !== null)
|
||||
{
|
||||
res.status(200).send({
|
||||
status: "success",
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403).json();
|
||||
}
|
||||
}
|
||||
@ -36,12 +36,18 @@ class Form extends React.Component
|
||||
|
||||
_handle_onChange = (field, value) =>
|
||||
{
|
||||
this.setState({ [ field ]: value });
|
||||
this.setState({ [ field ]: value }, () =>
|
||||
{
|
||||
this.props.onForm(this.state);
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onCompaniesSelection = () =>
|
||||
{
|
||||
this.setState({ selection: this.state.selection ? false : true });
|
||||
this.setState({ selection: this.state.selection ? false : true }, () =>
|
||||
{
|
||||
this.props.onForm(this.state);
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onChangeCompanies_all = () =>
|
||||
@ -60,7 +66,10 @@ class Form extends React.Component
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({ selected_companies_all: selected_companies_all ? false : true, selected_companies_list: selected_companies });
|
||||
this.setState({ selected_companies_all: selected_companies_all ? false : true, selected_companies_list: selected_companies }, () =>
|
||||
{
|
||||
this.props.onForm(this.state);
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onCompanySelect = (company) =>
|
||||
@ -92,7 +101,10 @@ class Form extends React.Component
|
||||
all = true;
|
||||
}
|
||||
|
||||
this.setState({ selected_companies_all: all, selected_companies_list: selected_companies });
|
||||
this.setState({ selected_companies_all: all, selected_companies_list: selected_companies }, () =>
|
||||
{
|
||||
this.props.onForm(this.state);
|
||||
});
|
||||
}
|
||||
|
||||
render()
|
||||
@ -166,7 +178,9 @@ class AdminPage extends React.Component
|
||||
users: null,
|
||||
companies: null,
|
||||
add: false,
|
||||
edit: false,
|
||||
edit: false,
|
||||
save: false,
|
||||
form: {},
|
||||
};
|
||||
}
|
||||
|
||||
@ -207,6 +221,10 @@ class AdminPage extends React.Component
|
||||
|
||||
_handle_onSave = () =>
|
||||
{
|
||||
const { form } = this.state;
|
||||
console.log("form");
|
||||
console.log(form);
|
||||
|
||||
this.setState({ add: false, edit: false });
|
||||
}
|
||||
|
||||
@ -215,9 +233,33 @@ class AdminPage extends React.Component
|
||||
this.setState({ add: false, edit: false });
|
||||
}
|
||||
|
||||
_onFormEdit = (form) =>
|
||||
{
|
||||
console.log("_onFormEdit", form);
|
||||
|
||||
let save = true;
|
||||
if(form.name === "")
|
||||
{
|
||||
save = false;
|
||||
}
|
||||
if(form.email === "")
|
||||
{
|
||||
save = false;
|
||||
}
|
||||
if(!form.selected_companies_all)
|
||||
{
|
||||
if(form.selected_companies_list.length === 0)
|
||||
{
|
||||
save = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({ form, save });
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { user, users, companies, add, edit } = this.state;
|
||||
const { user, users, companies, add, edit, save } = this.state;
|
||||
console.log("users");
|
||||
console.log(users);
|
||||
|
||||
@ -255,7 +297,7 @@ class AdminPage extends React.Component
|
||||
{ add || edit ? (
|
||||
<>
|
||||
<button className="button button-blue" onClick={ this._handle_onCancel }>Отменить</button>
|
||||
<button className="button button-blue" onClick={ this._handle_onSave }>Сохранить</button>
|
||||
<button className="button button-blue" onClick={ this._handle_onSave } disabled={ save ? false : true }>Сохранить</button>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
@ -344,7 +386,7 @@ class AdminPage extends React.Component
|
||||
</div>
|
||||
{*/}
|
||||
{ add && (
|
||||
<Form companies={ companies }/>
|
||||
<Form companies={ companies } onForm={ this._onFormEdit }/>
|
||||
) }
|
||||
{/*}
|
||||
{*/}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user