228 lines
4.9 KiB
JavaScript
228 lines
4.9 KiB
JavaScript
import React from "react";
|
||
import Head from 'next/head';
|
||
import Image from 'next/image';
|
||
import Link from "next/link";
|
||
import cookie from 'cookie';
|
||
import numeral from "numeral";
|
||
import pluralize from 'pluralize-ru';
|
||
import { SpinnerCircular } from 'spinners-react';
|
||
import debounce from 'debounce-promise';
|
||
import { set as _set, get as _get } from 'lodash';
|
||
|
||
import { updateQuestionnaire, getAddress, getSuggests, resetQuestionnaire, questionnaireSetSign } from "../../../actions";
|
||
|
||
const suggestsAddressDebounce = (query) =>
|
||
{
|
||
return getSuggests("address", { query });
|
||
}
|
||
|
||
const suggestsAddress = debounce(suggestsAddressDebounce, 200);
|
||
|
||
export default class QuestionnaireForm extends React.Component
|
||
{
|
||
_updateQuestionnaire = (questionnaire) =>
|
||
{
|
||
return new Promise((resolve, reject) =>
|
||
{
|
||
updateQuestionnaire({ dispatch: this.props.dispatch, questionnaire })
|
||
.then(() =>
|
||
{
|
||
resolve();
|
||
})
|
||
.catch(() =>
|
||
{
|
||
|
||
});
|
||
});
|
||
}
|
||
|
||
_checkStrValue = (value) =>
|
||
{
|
||
return value !== undefined && value !== null ? value.toString() : "";
|
||
}
|
||
|
||
_checkStrNotEmpty = (value) =>
|
||
{
|
||
if(value === null || value === undefined || value === "")
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
_getAddress = (name, text) =>
|
||
{
|
||
return new Promise((resolve, reject) =>
|
||
{
|
||
suggestsAddress(text)
|
||
.then((result) =>
|
||
{
|
||
const update = {};
|
||
update[name] = result.suggestions;
|
||
this.setState(update, () =>
|
||
{
|
||
resolve(result.suggestions.map(s => ({ value: s.value, label: s.value })));
|
||
});
|
||
})
|
||
.catch(() =>
|
||
{
|
||
|
||
});
|
||
})
|
||
}
|
||
|
||
_removeError = (name) =>
|
||
{
|
||
//console.log("_removeError", name, typeof name);
|
||
|
||
const errors = [ ...this.state.errors ];
|
||
|
||
if(typeof name === "string")
|
||
{
|
||
if(errors.indexOf(name) > -1)
|
||
{
|
||
errors.splice(errors.indexOf(name), 1);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(let i in name)
|
||
{
|
||
//console.log("REMOVE", name[i]);
|
||
|
||
if(errors.indexOf(name[i]) > -1)
|
||
{
|
||
errors.splice(errors.indexOf(name[i]), 1);
|
||
}
|
||
}
|
||
}
|
||
|
||
this.setState({ errors });
|
||
}
|
||
|
||
_handle_onTextFieldChange = (name, value) =>
|
||
{
|
||
////console.log("QuestionnaireForm", "_handle_onTextFieldChange", { name, value });
|
||
|
||
|
||
const update = { ...this.state };
|
||
_set(update, name, value);
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onCheckboxFieldChange = (name, value) =>
|
||
{
|
||
//console.log("QuestionnaireForm", "_handle_onCheckboxFieldChange", { name, value });
|
||
|
||
const update = { ...this.state };
|
||
_set(update, name, value);
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onFieldChange = (name, payload) =>
|
||
{
|
||
//console.log("_handle_onFieldChange", name, payload);
|
||
|
||
|
||
const update = { ...this.state };
|
||
_set(update, name, payload);
|
||
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onBranchChange = (payload) =>
|
||
{
|
||
//console.log("_handle_onBranchChange", payload);
|
||
|
||
|
||
const update = JSON.parse(JSON.stringify(global.store.getState().questionnaire));
|
||
for(let i in payload)
|
||
{
|
||
_set(update, payload[i].name, payload[i].value);
|
||
}
|
||
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onJoinChange = (payload) =>
|
||
{
|
||
//console.log("_handle_onJoinChange", payload);
|
||
|
||
this._updateQuestionnaire(payload);
|
||
}
|
||
|
||
_handle_onAddFile = (name, files) =>
|
||
{
|
||
//console.log("QuestionnaireForm", "_handle_onAddFile", { name, files });
|
||
|
||
|
||
const existed_files = [ ..._get(this.state, name) ];
|
||
for(let nf in files)
|
||
{
|
||
let e = false;
|
||
for(let ef in existed_files)
|
||
{
|
||
if(existed_files[ef].name === files[nf].name) { e = true; }
|
||
}
|
||
|
||
if(!e)
|
||
{
|
||
existed_files.push(files[nf]);
|
||
}
|
||
}
|
||
|
||
const update = { ...this.state };
|
||
_set(update, name, existed_files);
|
||
|
||
//console.log("_handle_onAddFile", "update", update);
|
||
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onRemoveFile = (group, id) =>
|
||
{
|
||
const existed_files = [ ..._get(this.state, group) ];
|
||
//console.log("QuestionnaireForm", "_handle_onRemoveFile", { group, id, existed_files });
|
||
|
||
|
||
const files = [];
|
||
for(let i in existed_files)
|
||
{
|
||
if(existed_files[i].id !== id)
|
||
{
|
||
files.push(existed_files[i]);
|
||
}
|
||
}
|
||
|
||
const update = { ...this.state };
|
||
_set(update, group, files);
|
||
//console.log("_handle_onRemoveFile", "group", "files", group, files);
|
||
|
||
|
||
this._updateQuestionnaire(update);
|
||
}
|
||
|
||
_handle_onReset = (event) =>
|
||
{
|
||
event.preventDefault();
|
||
const { dispatch } = this.props;
|
||
|
||
const reset = window.confirm("Вы действительно хотите отменить изменения, внесенные в анкету? Состояние анкеты будет сброшено до версии, имеющейся у ООО \"ЛК Эволюция\"");
|
||
if(reset)
|
||
{
|
||
this.props.onNextStep("main");
|
||
resetQuestionnaire({ dispatch, id: this.props.company.questionnaire_id });
|
||
}
|
||
}
|
||
|
||
_handle_onSignDigital = () =>
|
||
{
|
||
const { dispatch } = this.props;
|
||
questionnaireSetSign({ dispatch, sign: { digital: true, print: false, }});
|
||
setTimeout(() =>
|
||
{
|
||
this.props.onSuccess();
|
||
this.props.onNextStep("status");
|
||
}, 10);
|
||
}
|
||
} |