import React from "react";
import Head from 'next/head';
import Image from 'next/image';
import Link from "next/link";
import cookie from 'cookie';
import { connect } from "react-redux";
import numeral from "numeral";
import pluralize from 'pluralize-ru';
import { SpinnerCircular } from 'spinners-react';
import { withRouter } from 'next/router';
import { reduxWrapper } from '../../store';
import InnerMenu from "./components/InnerMenu";
import Header from '../components/Header';
import Footer from '../components/Footer';
import Pagination from '../components/Pagination';
import Company from "../components/Company";
import { getUsers, removeUser, sendInvite, sendPhoneChangeNumber, sendPhoneChangeNumberSmsCode, setUserPhone } from '../../actions';
import AccountLayout from "../components/Layout/Account";
class Form extends React.Component
{
constructor(props)
{
super(props);
this.state = {
name: "",
email: "",
selection: false,
selected_companies_all: false,
selected_companies_list: [],
};
}
componentDidMount()
{
const { errors } = this.props;
if(errors.length > 0)
{
const update = { ...this.state, ...this.props.form };
this.setState(update);
}
}
_handle_onChange = (field, value) =>
{
this.setState({ [ field ]: value }, () =>
{
this.props.onForm(this.state);
});
}
_handle_onCompaniesSelection = () =>
{
this.setState({ selection: this.state.selection ? false : true }, () =>
{
this.props.onForm(this.state);
});
}
_handle_onChangeCompanies_all = () =>
{
const { companies } = this.props;
const { selected_companies_all, selected_companies_list } = this.state;
const all = selected_companies_all ? false : true;
const selected_companies = [];
if(all)
{
for(let i in companies)
{
selected_companies.push(companies[i]);
}
}
this.setState({ selected_companies_all: selected_companies_all ? false : true, selected_companies_list: selected_companies }, () =>
{
this.props.onForm(this.state);
});
}
_handle_onCompanySelect = (company) =>
{
const { companies } = this.props;
const { selected_companies_list } = this.state;
const selected_companies = [];
let add = true;
for(let i in selected_companies_list)
{
if(selected_companies_list[i].inn !== company.inn)
{
selected_companies.push(selected_companies_list[i]);
}
else
{
add = false;
}
}
if(add)
{
selected_companies.push(company);
}
let all = false;
if(companies.length === selected_companies.length)
{
all = true;
}
this.setState({ selected_companies_all: all, selected_companies_list: selected_companies }, () =>
{
this.props.onForm(this.state);
});
}
render()
{
const { companies, errors } = this.props;
const { name, email, selection, selected_companies_all, selected_companies_list, } = this.state;
return (
<>
-1 ? { color: "#ED0A34" } : {} } onChange={ (event) => { this._handle_onChange("name", event.target.value) } }/>
-1 ? { color: "#ED0A34" } : {} } onChange={ (event) => { this._handle_onChange("email", event.target.value) } }/>
Пользователь
-
>
)
}
}
class AdminPage extends React.Component
{
constructor(props)
{
super(props);
this.state = {
loading: false,
user: {},
users: null,
companies: null,
add: false,
edit: false,
save: false,
form: {},
observer: false,
to_delete: [],
errors: [],
};
this.formRef = React.createRef();
}
static getDerivedStateFromProps(nextProps, prevState)
{
return {
observer: nextProps.observer,
user: nextProps.user,
users: nextProps.users,
companies: nextProps.companies,
};
}
componentDidMount()
{
this.setState({ loading: true }, () =>
{
if(!this.state.observer && !this.state.user.is_admin)
{
this.props.router.push("/");
}
else
{
getUsers({ dispatch: this.props.dispatch })
.then(() =>
{
this.setState({ loading: false, })
})
.catch(() =>
{
this.setState({ loading: false });
});
}
});
}
_handle_onAdd = () =>
{
this.setState({ add: true }, () =>
{
this.formRef.current.scrollIntoView({
behavior: 'smooth',
block: 'center',
});
});
}
_handle_onEdit = () =>
{
this.setState({ edit: true });
}
_handle_onSave = () =>
{
const { form, add, edit, to_delete } = this.state;
if(add)
{
const { name, email, selected_companies_list } = form;
const companies = [];
for(let i in selected_companies_list)
{
companies.push(selected_companies_list[i].acc_number);
}
this.setState({ add: false, edit: false, loading: true }, () =>
{
sendInvite({ name, email, companies })
.then((result) =>
{
if(result.status === "success")
{
getUsers({ dispatch: this.props.dispatch })
.then(() =>
{
this.setState({ loading: false, })
})
.catch(() =>
{
this.setState({ loading: false });
});
}
else
{
this.setState({ loading: false });
}
})
.catch((error) =>
{
this.setState({ loading: false, add: true, errors: error.errors });
});
});
}
else
{
this.setState({ add: false, edit: false, loading: true }, () =>
{
removeUser({ emails: to_delete })
.then((result) =>
{
if(result.status === "success")
{
getUsers({ dispatch: this.props.dispatch })
.then(() =>
{
this.setState({ loading: false, to_delete: [] })
})
.catch(() =>
{
this.setState({ loading: false, to_delete: [] });
});
}
else
{
this.setState({ loading: false });
}
})
.catch(() =>
{
this.setState({ loading: false });
});
});
}
}
_handle_onCancel = () =>
{
this.setState({ add: false, edit: false, to_delete: [], });
}
_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, errors: [] });
}
_handle_onMarkToDelete = (email) =>
{
const to_delete = [ ...this.state.to_delete ];
if(to_delete.indexOf(email) > -1)
{
to_delete.splice(to_delete.indexOf(email), 1);
}
else
{
to_delete.push(email);
}
this.setState({ to_delete });
}
render()
{
const { loading, user, observer, users, companies, errors, form, add, edit, save, to_delete } = this.state;
return (
ЛК Эволюция автолизинга
{ loading ? (
) : (
<>
Настройки доступа к личному кабинету
{ add || edit ? (
<>
>
) : (
<>
>
) }
ФИО пользователя
Почта
Роль
Доступные организации
Статус
{ edit && (
) }
{ users !== undefined && users !== null && users.map((entry, index) =>
{
if(entry.email === user.email)
{
return (
{ entry.name } (Вы)
{ entry.email }
{ entry.is_admin ? "Администратор" : "Пользователь" }
Все организации
{ entry.is_admin ? "Активен" : entry.last !== null ? "Активен" : "Приглашен" }
{ edit && (
) }
)
}
return null;
}) }
{ users !== undefined && users !== null && users.map((entry, index) =>
{
if(entry.email !== user.email)
{
return (
-1 ? { backgroundColor: "#eee" } : {} }>
-1 ? { textDecoration: "line-through" } : {} }>{ entry.name }
-1 ? { textDecoration: "line-through" } : {} }>{ entry.email }
-1 ? { textDecoration: "line-through" } : {} }>{ entry.is_admin ? "Администратор" : "Пользователь" }
{ entry.companies.map((company, c_index) => (
-1 ? { textDecoration: "line-through" } : {} }>{ company.title }
)) }
-1 ? { textDecoration: "line-through" } : {} }>{ entry.is_admin ? "Активен" : entry.last !== null ? "Активен" : "Приглашен" }
{ edit && (
) }
)
}
return null;
}) }
{/*}
{ user !== undefined && user !== null && user.email !== undefined && user.email !== null && (
{ `${ user.lastname } ${ user.name } ${ user.secondname }` }
{ user.email }
Администратор
Все организации
Активен
) }
{*/}
{/*}
Иванов Иван Иванович
iivanov@mail.com
Администратор
Все организации
Активен
{*/}
{ add && (
) }
{/*}
{*/}
>
) }
)
}
}
function mapStateToProps(state, ownProps)
{
return {
observer: state.auth.observer,
user: state.user,
users: state.admin.users,
companies: state.companies.list,
}
}
export const getServerSideProps = reduxWrapper.getServerSideProps(store =>
async ({ req, res, query }) =>
{
let props = {};
if(req.headers.cookie !== undefined)
{
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
if(cookies.jwt === undefined || cookies.jwt === null)
{
res.statusCode = 302;
res.setHeader('Location', `/login`);
}
else
{
//const tokenValid = await checkToken(cookies.jwt);
const tokenValid = true;
if(!tokenValid)
{
res.statusCode = 302;
res.setHeader('Location', `/login`);
}
}
}
else
{
res.statusCode = 302;
res.setHeader('Location', `/login`);
}
return { props: props };
}
);
export default withRouter(connect(mapStateToProps)(AdminPage));