2023-04-06 13:46:32 +03:00

170 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 } 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 !== null ? value.toString() : "";
}
_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(() =>
{
});
})
}
_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 reset = window.confirm("Вы действительно хотите отменить изменения, внесенные в анкету? Состояние анкеты будет сброшено до версии, имеющейся у ООО \"ЛК Эволюция\"");
if(reset)
{
this.props.onNextStep("main");
resetQuestionnaire({ dispatch: this.props.dispatch, id: this.props.company.questionnaire_id });
}
}
}