admin actions

This commit is contained in:
merelendor 2022-09-02 10:18:40 +03:00
parent a7d69c088a
commit f4ac7c3daf
6 changed files with 245 additions and 9 deletions

77
actions/adminActions.js Normal file
View 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();
});
});
}

View File

@ -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
View 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
View 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();
}
}

View File

@ -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 }/>
) }
{/*}
{*/}