initial before markup
This commit is contained in:
parent
644ea3877b
commit
cda53ba271
@ -10,4 +10,5 @@ export * from './settingsActions';
|
||||
export * from './announcementsActions';
|
||||
export * from './eventsActions';
|
||||
export * from './supportActions';
|
||||
export * from './adminActions';
|
||||
export * from './adminActions';
|
||||
export * from './suggestsActions';
|
||||
42
actions/suggestsActions.js
Normal file
42
actions/suggestsActions.js
Normal file
@ -0,0 +1,42 @@
|
||||
import axios from 'axios';
|
||||
import { eachSeries } from 'async';
|
||||
|
||||
import * as actionTypes from '../constants/actionTypes';
|
||||
import * as currentState from '../reducers/initialState';
|
||||
|
||||
if(process.browser)
|
||||
{
|
||||
FormData.prototype.appendObject = function(obj, namespace)
|
||||
{
|
||||
let keyName;
|
||||
for (var key in obj)
|
||||
{
|
||||
if (obj.hasOwnProperty(key))
|
||||
{
|
||||
keyName = [namespace, '[', key, ']'].join('');
|
||||
this.append(keyName, obj[key]);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export const getAddress = (text) =>
|
||||
{
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/suggests/address`, { text }, {
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((response) =>
|
||||
{
|
||||
resolve("");
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.log("error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -14,6 +14,8 @@
|
||||
"axios": "^0.24.0",
|
||||
"cookie": "^0.4.1",
|
||||
"cors": "^2.8.5",
|
||||
"dadata": "^0.0.3",
|
||||
"debounce-promise": "^3.1.2",
|
||||
"form-data": "^4.0.0",
|
||||
"ioredis": "^4.28.2",
|
||||
"js-file-download": "^0.4.12",
|
||||
@ -27,6 +29,7 @@
|
||||
"next-redux-wrapper": "^7.0.5",
|
||||
"next-with-less": "^1.0.1",
|
||||
"nextjs-cors": "^2.1.0",
|
||||
"node-fetch": "^3.3.1",
|
||||
"numeral": "^2.0.6",
|
||||
"pluralize-ru": "^1.0.1",
|
||||
"qs": "^6.10.1",
|
||||
|
||||
@ -2,6 +2,9 @@ import { reduxWrapper } from '../store'
|
||||
import numeral from 'numeral';
|
||||
import '../css/style.css';
|
||||
|
||||
//import DaData from 'dadata';
|
||||
//global.dadata = new DaData(process.env.DADATA_API_KEY, process.env.DADATA_SECRET_KEY);
|
||||
|
||||
const m = Math.random();
|
||||
numeral.register('locale', `locale_${ m }`, {
|
||||
delimiters: {
|
||||
|
||||
49
pages/api/suggests/address.js
Normal file
49
pages/api/suggests/address.js
Normal file
@ -0,0 +1,49 @@
|
||||
// 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);
|
||||
|
||||
if(req.headers.cookie !== undefined)
|
||||
{
|
||||
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
|
||||
|
||||
if(cookies.jwt !== undefined && cookies.jwt !== null)
|
||||
{
|
||||
if(jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT))
|
||||
{
|
||||
try
|
||||
{
|
||||
/*
|
||||
dadata('address', ['мск сухонска 11/-89'], function (dadata_error, dadata_response)
|
||||
{
|
||||
console.log(dadata_error);
|
||||
console.log(dadata_response);
|
||||
|
||||
res.status(200).send();
|
||||
});
|
||||
*/
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.error(e);
|
||||
res.status(500);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -57,6 +57,7 @@ class Header extends React.Component
|
||||
if (route.indexOf("/contract") === 0) return "Договоры";
|
||||
if (route.indexOf("/support") === 0) return "Обращения";
|
||||
if (route.indexOf("/events") === 0) return "События";
|
||||
if (route.indexOf("/questionnaire") === 0) return "Анкета лизингополучателя";
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
115
pages/questionnaire/components/InnerMenu/index.js
Normal file
115
pages/questionnaire/components/InnerMenu/index.js
Normal file
@ -0,0 +1,115 @@
|
||||
import React from "react";
|
||||
import Link from "next/link";
|
||||
import { connect } from "react-redux";
|
||||
import { getContractEvents, getContractFines, getContractInfo, } from "../../../../actions";
|
||||
|
||||
class InnerMenu extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.menuRef = React.createRef();
|
||||
|
||||
this.state = {
|
||||
menuOpened: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState)
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onToggleMenu = () =>
|
||||
{
|
||||
this.setState({
|
||||
menuOpened: !this.state.menuOpened,
|
||||
});
|
||||
}
|
||||
|
||||
_getActiveLink = (route) =>
|
||||
{
|
||||
if (route.indexOf("#main") > -1) return "Информация о лизингополучателе";
|
||||
if (route.indexOf("#contacts") > -1) return "Адреса лизингополучателя";
|
||||
if (route.indexOf("#signer") > -1) return "Информация о единоличном исполнительном органе, подписанте договора лизинга";
|
||||
if (route.indexOf("#shareholders") > -1) return "Сведения об участниках (акционерах) и бенефициарных владельцах";
|
||||
if (route.indexOf("#regulatory") > -1) return "Сведения об органах управления";
|
||||
if (route.indexOf("#non-profit") > -1) return "Данные о некомерческой организации";
|
||||
if (route.indexOf("#check") > -1) return "Проверка введеных данных";
|
||||
if (route.indexOf("#signing") > -1) return "Выбор метода подписания";
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { menuOpened, } = this.state;
|
||||
|
||||
return (
|
||||
<aside>
|
||||
<button className="nav_toggle" onClick={ this._handle_onToggleMenu }>
|
||||
{ this.props.router && this._getActiveLink(this.props.router.asPath) }
|
||||
</button>
|
||||
<ul className={ menuOpened ? "aside_nav open" : "aside_nav" } ref={ this.menuRef }>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#main`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#main") > -1 || this.props.router.asPath.indexOf("#") < 0 ? "active" : "" }>Информация о лизингополучателе</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#contacts`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#contacts") > -1 ? "active" : "" }>Адреса лизингополучателя</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#signer`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#signer") > -1 ? "active" : "" }>Информация о единоличном исполнительном органе, подписанте договора лизинга</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#shareholders`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#shareholders") > -1 ? "active" : "" }>Сведения об участниках (акционерах) и бенефициарных владельцах</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#regulatory`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#regulatory") > -1 ? "active" : "" }>Сведения об органах управления</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#non-profit`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#non-profit") > -1 ? "active" : "" }>Данные о некомерческой организации</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#check`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#check") > -1 ? "active" : "" }>Проверка введеных данных</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/questionnaire/#signing`} shallow>
|
||||
<a className={ this.props.router && this.props.router.asPath.indexOf("#signing") > -1 ? "active" : "" }>Выбор метода подписания</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(InnerMenu);
|
||||
135
pages/questionnaire/components/forms/Form_1_Main/index.js
Normal file
135
pages/questionnaire/components/forms/Form_1_Main/index.js
Normal file
@ -0,0 +1,135 @@
|
||||
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 { getAddress } from '../../../../../actions';
|
||||
import debounce from 'debounce-promise';
|
||||
|
||||
const suggestsAddressDebounce = (text) =>
|
||||
{
|
||||
return getAddress(text);
|
||||
}
|
||||
|
||||
const suggestsAddress = debounce(suggestsAddressDebounce, 500);
|
||||
|
||||
export default class Form_1_Main extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onPhoneSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
|
||||
const { user, address, phone_check_loading } = this.state;
|
||||
|
||||
if(!phone_check_loading)
|
||||
{
|
||||
this.setState({ phone_check_loading: true }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormMain", "_handle_onFormSubmit");
|
||||
|
||||
const { address, phone_code, code_check_loading } = this.state;
|
||||
|
||||
//if(!code_check_loading)
|
||||
//{
|
||||
/*
|
||||
this.setState({ code_check_loading: true }, () =>
|
||||
{
|
||||
});
|
||||
*/
|
||||
//}
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
/*
|
||||
suggestsAddress("Москва")
|
||||
.then((suggests) =>
|
||||
{
|
||||
console.log({ suggests });
|
||||
})
|
||||
.catch(() =>
|
||||
{
|
||||
console.log("_handle_onAddressChange", "error");
|
||||
});
|
||||
*/
|
||||
});
|
||||
|
||||
//const phone_number_format_error = value.length > 1 && (value[0] !== "+" || value[1] !== "7") ? true : false;
|
||||
//this.setState({ phone: value, phone_login_disabled: this._check_fields_disabled([ value ]), phone_number_error: false, phone_number_format_error: phone_number_format_error });
|
||||
}
|
||||
|
||||
// _handle_onPhoneCodeChange = (value) =>
|
||||
// {
|
||||
// this.setState({ phone_code: value, phone_code_submit_disabled: this._check_fields_disabled([ value ]), phone_sms_code_error: false });
|
||||
// }
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма основных данных" onChange={ (event) => this._handle_onAddressChange(event.target.value) } required={ true }/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_2_Contacts extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма адреса"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
82
pages/questionnaire/components/forms/Form_3_Signer/index.js
Normal file
82
pages/questionnaire/components/forms/Form_3_Signer/index.js
Normal file
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_3_Signer extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма подписанта"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_4_Shareholders extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма учредителей"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_5_Regulatory extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма управляющего"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_6_NonProfit extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Форма НКО"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
82
pages/questionnaire/components/forms/Form_7_Check/index.js
Normal file
82
pages/questionnaire/components/forms/Form_7_Check/index.js
Normal file
@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
export default class Form_7_Check extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<div className={`login recovery`}>
|
||||
<div className="form_field">
|
||||
<input type="text" name="address" value={ address } placeholder="Длинная форма проверки"/>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" className="button button-blue" disabled={ false }>
|
||||
{ phone_check_loading ? (
|
||||
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
|
||||
) : "Продолжить" }
|
||||
</button>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
73
pages/questionnaire/components/forms/Form_8_Signing/index.js
Normal file
73
pages/questionnaire/components/forms/Form_8_Signing/index.js
Normal file
@ -0,0 +1,73 @@
|
||||
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';
|
||||
|
||||
export default class Form_8_Signing extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
address: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
observer: nextProps.observer,
|
||||
user: nextProps.user,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onFormSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
console.log("FormAddress", "_handle_onFormSubmit");
|
||||
}
|
||||
|
||||
_handle_onAddressChange = (value) =>
|
||||
{
|
||||
this.setState({ address: value, }, () =>
|
||||
{
|
||||
});
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { address, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<form onSubmit={ this._handle_onFormSubmit }>
|
||||
<p>Тут блок подписания</p>
|
||||
</form>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
233
pages/questionnaire/index.js
Normal file
233
pages/questionnaire/index.js
Normal file
@ -0,0 +1,233 @@
|
||||
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 { sendPhoneChangeNumber, sendPhoneChangeNumberSmsCode, setUserPhone } from '../../actions';
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
import Form_1_Main from "./components/forms/Form_1_Main";
|
||||
import Form_2_Contacts from "./components/forms/Form_2_Contacts";
|
||||
import Form_3_Signer from "./components/forms/Form_3_Signer";
|
||||
import Form_4_Shareholders from "./components/forms/Form_4_Shareholders";
|
||||
import Form_5_Regulatory from "./components/forms/Form_5_Regulatory";
|
||||
import Form_6_NonProfit from "./components/forms/Form_6_NonProfit";
|
||||
import Form_7_Check from "./components/forms/Form_7_Check";
|
||||
import Form_8_Signing from "./components/forms/Form_8_Signing";
|
||||
|
||||
class QuestionnairePage extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
phone: "",
|
||||
phone_check_loading: false,
|
||||
phone_number_format_error: false,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
_handle_onPhoneSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
|
||||
const { user, phone, phone_check_loading } = this.state;
|
||||
|
||||
if(!phone_check_loading)
|
||||
{
|
||||
this.setState({ phone_check_loading: true }, () =>
|
||||
{
|
||||
sendPhoneChangeNumber({ email: user.email, phone })
|
||||
.then(() =>
|
||||
{
|
||||
this.setState({ phone_check_loading: false, phone_number_error: false, timer: 60, phone_form_step: 2, }, () =>
|
||||
{
|
||||
this.timer_ref = setInterval(() =>
|
||||
{
|
||||
const t = this.state.timer - 1;
|
||||
this.setState({ timer: t, }, () =>
|
||||
{
|
||||
if(t === 0)
|
||||
{
|
||||
clearInterval(this.timer_ref);
|
||||
}
|
||||
});
|
||||
}, 1000);
|
||||
});
|
||||
})
|
||||
.catch(() =>
|
||||
{
|
||||
this.setState({ phone_number_error: true, phone_check_loading: false });
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onCodeSubmit = (event) =>
|
||||
{
|
||||
event.preventDefault();
|
||||
|
||||
const { phone, phone_code, code_check_loading } = this.state;
|
||||
|
||||
if(!code_check_loading)
|
||||
{
|
||||
this.setState({ code_check_loading: true }, () =>
|
||||
{
|
||||
sendPhoneChangeNumberSmsCode({ phone, code: phone_code })
|
||||
.then(() =>
|
||||
{
|
||||
const new_user = { ...this.state.user };
|
||||
new_user.phone = phone;
|
||||
|
||||
setUserPhone({ dispatch: this.props.dispatch, user: new_user });
|
||||
|
||||
this.setState({ phone_sms_code_error: false, code_check_loading: false, phone_form_step: 3 });
|
||||
})
|
||||
.catch(() =>
|
||||
{
|
||||
this.setState({ phone_sms_code_error: true, code_check_loading: false });
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onResendCode = (event) =>
|
||||
{
|
||||
this.setState({ phone_sms_code_error: false }, () =>
|
||||
{
|
||||
this._handle_onPhoneSubmit(event);
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onPhoneChange = (value) =>
|
||||
{
|
||||
const phone_number_format_error = value.length > 1 && (value[0] !== "+" || value[1] !== "7") ? true : false;
|
||||
this.setState({ phone: value, phone_login_disabled: this._check_fields_disabled([ value ]), phone_number_error: false, phone_number_format_error: phone_number_format_error });
|
||||
}
|
||||
|
||||
_handle_onPhoneCodeChange = (value) =>
|
||||
{
|
||||
this.setState({ phone_code: value, phone_code_submit_disabled: this._check_fields_disabled([ value ]), phone_sms_code_error: false });
|
||||
}
|
||||
|
||||
_check_fields_disabled = (values) =>
|
||||
{
|
||||
for(let i in values)
|
||||
{
|
||||
if(values[i] === "")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
_renderForm = () =>
|
||||
{
|
||||
const route = this.props.router.asPath;
|
||||
|
||||
if (route.indexOf("#main") > -1) return (<Form_1_Main/>);
|
||||
if (route.indexOf("#contacts") > -1) return (<Form_2_Contacts/>);
|
||||
if (route.indexOf("#signer") > -1) return (<Form_3_Signer/>);
|
||||
if (route.indexOf("#shareholders") > -1) return (<Form_4_Shareholders/>);
|
||||
if (route.indexOf("#regulatory") > -1) return (<Form_5_Regulatory/>);
|
||||
if (route.indexOf("#non-profit") > -1) return (<Form_6_NonProfit/>);
|
||||
if (route.indexOf("#check") > -1) return (<Form_7_Check/>);
|
||||
if (route.indexOf("#signing") > -1) return (<Form_8_Signing/>);
|
||||
|
||||
return (<Form_1_Main/>);
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { phone, phone_check_loading, phone_number_format_error } = this.state;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Head>
|
||||
<title>ЛК Эволюция автолизинга - Анкета лизингополучателя</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="ЛК Эволюция автолизинга - Анкета лизингополучателя"
|
||||
/>
|
||||
</Head>
|
||||
<Header { ...this.props }/>
|
||||
<AccountLayout>
|
||||
<div className="title_wrapper">
|
||||
<div className="left">
|
||||
<h1 className="section_title">Анкета лизингополучателя</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div className="aside_container about">
|
||||
<InnerMenu { ...this.props }/>
|
||||
<article>
|
||||
{ this._renderForm() }
|
||||
</article>
|
||||
</div>
|
||||
</AccountLayout>
|
||||
<Footer/>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {
|
||||
observer: state.auth.observer,
|
||||
user: state.user,
|
||||
}
|
||||
}
|
||||
|
||||
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)(QuestionnairePage));
|
||||
49
yarn.lock
49
yarn.lock
@ -1166,6 +1166,11 @@ csstype@^3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
|
||||
integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
|
||||
|
||||
dadata@^0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/dadata/-/dadata-0.0.3.tgz#18b9aec6b101e395c29667de2d3c1a33166f77f6"
|
||||
integrity sha512-T27xFcP6J2pK4F4r2YupEsT2pWTMzjGTWxAMcIUdUFmbdeyNsga/BN9GM/tGZe4NMjfPWMJO2R6xvCE9rhvIVg==
|
||||
|
||||
damerau-levenshtein@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
||||
@ -1176,11 +1181,21 @@ data-uri-to-buffer@3.0.1:
|
||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
|
||||
integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
|
||||
|
||||
data-uri-to-buffer@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e"
|
||||
integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
|
||||
|
||||
date-arithmetic@^4.0.1:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/date-arithmetic/-/date-arithmetic-4.1.0.tgz#e5d6434e9deb71f79760a37b729e4a515e730ddf"
|
||||
integrity sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg==
|
||||
|
||||
debounce-promise@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/debounce-promise/-/debounce-promise-3.1.2.tgz#320fb8c7d15a344455cd33cee5ab63530b6dc7c5"
|
||||
integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==
|
||||
|
||||
debug@2, debug@^2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
@ -1678,6 +1693,14 @@ fastq@^1.6.0:
|
||||
dependencies:
|
||||
reusify "^1.0.4"
|
||||
|
||||
fetch-blob@^3.1.2, fetch-blob@^3.1.4:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
|
||||
integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
|
||||
dependencies:
|
||||
node-domexception "^1.0.0"
|
||||
web-streams-polyfill "^3.0.3"
|
||||
|
||||
file-entry-cache@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
|
||||
@ -1778,6 +1801,13 @@ form-data@^4.0.0:
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
formdata-polyfill@^4.0.10:
|
||||
version "4.0.10"
|
||||
resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
|
||||
integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
|
||||
dependencies:
|
||||
fetch-blob "^3.1.2"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
@ -2776,11 +2806,25 @@ nextjs-cors@^2.1.0:
|
||||
dependencies:
|
||||
cors "^2.8.5"
|
||||
|
||||
node-domexception@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
||||
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
|
||||
|
||||
node-fetch@2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
||||
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
||||
|
||||
node-fetch@^3.3.1:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e"
|
||||
integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==
|
||||
dependencies:
|
||||
data-uri-to-buffer "^4.0.0"
|
||||
fetch-blob "^3.1.4"
|
||||
formdata-polyfill "^4.0.10"
|
||||
|
||||
node-html-parser@1.4.9:
|
||||
version "1.4.9"
|
||||
resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c"
|
||||
@ -4051,6 +4095,11 @@ watchpack@2.1.1:
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
|
||||
web-streams-polyfill@^3.0.3:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
|
||||
integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
|
||||
|
||||
webidl-conversions@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user