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) } }/>
Пользователь
{ companies !== undefined && companies !== null && companies.map((company, index) => { let checked = false; if(selected_companies_all) { checked = true; } else { for(let i in selected_companies_list) { if(selected_companies_list[i].acc_number === company.acc_number) { checked = true; break; } } } return (
this._handle_onCompanySelect(company) }/>
) }) }
-
) } } 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 && (
) } {/*} {*/}
) }