From 90282c5d794d820c50e04233964501938062eb85 Mon Sep 17 00:00:00 2001 From: merelendor Date: Wed, 5 Apr 2023 14:42:56 +0300 Subject: [PATCH] API read with local saving --- actions/questionnaireActions.js | 179 +++++++++---- components/CalendarDatePicker/index.js | 54 +++- components/questionnaire/AddressSuggests.js | 4 +- .../questionnaire/forms/Form_1_Main/index.js | 34 +-- .../forms/Form_2_Contacts/index.js | 31 +-- .../forms/Form_3_Signer/index.js | 119 ++++----- .../forms/Form_4_Shareholders/index.js | 250 +++++++++--------- .../forms/Form_5_Regulatory/index.js | 77 +----- .../forms/Form_6_NonProfit/index.js | 24 +- .../questionnaire/forms/Form_7_Check/index.js | 15 +- .../forms/Form_8_Signing/index.js | 2 +- .../questionnaire/forms/QuestionnaireForm.js | 5 + pages/api/questionnaire/download.js | 14 +- pages/api/questionnaire/read.js | 8 +- pages/api/questionnaire/save.js | 3 +- reducers/initialState.js | 212 +++++++-------- 16 files changed, 546 insertions(+), 485 deletions(-) diff --git a/actions/questionnaireActions.js b/actions/questionnaireActions.js index 84776e3..199f5fa 100644 --- a/actions/questionnaireActions.js +++ b/actions/questionnaireActions.js @@ -31,60 +31,147 @@ export const getQuestionnaire = ({ dispatch, id }) => return new Promise((resolve, reject) => { - axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/get`, { - params: { - id - } - }) - .then((response) => + /* + axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/read`, {}) + .then((response_read) => { - console.log("ACTION", "questionnaire", "getQuestionnaire()", "response", response.data); - - const questionnaire = JSON.parse(JSON.stringify(global.store.getState().questionnaire)); - if(questionnaire.status === "empty") + console.log("ACTION", "getQuestionnaire", "/api/questionnaire/read", response_read.data); + if(response_read.data !== "") { - questionnaire.main.title = response.data.title; - questionnaire.main.inn = response.data.inn; - questionnaire.main.kpp = response.data.kpp; - questionnaire.main.telephone = response.data.telephone; - questionnaire.main.email = response.data.email; - questionnaire.main.websiteurl = response.data.websiteurl !== null ? response.data.websiteurl : ""; - questionnaire.main.financial_loan = response.data.financial_loan !== null ? response.data.financial_loan : ""; - - questionnaire.contacts.address_type = response.data.inn.length > 10 ? "fact" : "legal"; - questionnaire.contacts.fact_address = response.data.fact_address; - questionnaire.contacts.postal_address = response.data.postal_address; - questionnaire.contacts.legal_address = response.data.legal_address; - - questionnaire.head_person = { ...questionnaire.head_person, ...response.data.head_person }; - questionnaire.head_person.identity_document.citizenship = { - title: getCitizenshipTitleByCode(response.data.head_person.identity_document.citizenship_code), - code: response.data.head_person.identity_document.citizenship_code, - }; - - questionnaire.signatory_person = { ...questionnaire.signatory_person, ...response.data.signatory_person }; - questionnaire.signatory_person.identity_document.citizenship = { - title: getCitizenshipTitleByCode(response.data.signatory_person.identity_document.citizenship_code), - code: response.data.signatory_person.identity_document.citizenship_code, - }; - - console.log("questionnairequestionnairequestionnaire FROM JSON", questionnaire); - updateQuestionnaire({ dispatch, questionnaire }) - .then(() => {}) - .catch(() => {}); - //dispatch({ type: actionTypes.SUPPORT_APPEALS, data: { appeals: { list: response.data.appeals, new: response.data.new, } } }); + updateQuestionnaire({ dispatch, questionnaire: response_read.data }); resolve(); } else { - resolve(); + */ + axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/get`, { + params: { + id + } + }) + .then((response) => + { + console.log("ACTION", "questionnaire", "getQuestionnaire()", "response", response.data); + + const founder_persons_template = { + signatory_id: null, + lastname: "", + firstname: "", + middlename: "", + no_middle_name: false, + jobtitle: "", + telephone: "", + email: "", + founder_from_list: true, + founder_number: 0, + founder_part: "", + is_beneficial: false, + identity_document: + { + doctype: "", + seria: "", + docnumber: "", + issuedate: "", + icode: "", + issueby: "", + issueby_search_dadata: "", + placebirth: "", + citizenship: { + title: "", + code: "", + }, + registration_address: { + title: "", + fias_id: "", + } + } + }; + + const questionnaire = JSON.parse(JSON.stringify(global.store.getState().questionnaire)); + if(questionnaire.status === "empty") + { + questionnaire.main.title = response.data.title; + questionnaire.main.inn = response.data.inn; + questionnaire.main.kpp = response.data.kpp; + questionnaire.main.telephone = response.data.telephone; + questionnaire.main.email = response.data.email; + questionnaire.main.websiteurl = response.data.websiteurl !== null ? response.data.websiteurl : ""; + questionnaire.main.financial_loan = response.data.financial_loan !== null ? response.data.financial_loan : ""; + + questionnaire.contacts.address_type = response.data.inn.length > 10 ? "fact" : "legal"; + questionnaire.contacts.fact_address = response.data.fact_address; + questionnaire.contacts.postal_address = response.data.postal_address; + questionnaire.contacts.legal_address = response.data.legal_address; + + questionnaire.head_person = { ...questionnaire.head_person, ...response.data.head_person }; + questionnaire.head_person.identity_document.citizenship = { + title: getCitizenshipTitleByCode(response.data.head_person.identity_document.citizenship_code), + code: response.data.head_person.identity_document.citizenship_code, + }; + + questionnaire.signatory_person = { ...questionnaire.signatory_person, ...response.data.signatory_person }; + questionnaire.signatory_person.identity_document.citizenship = { + title: getCitizenshipTitleByCode(response.data.signatory_person.identity_document.citizenship_code), + code: response.data.signatory_person.identity_document.citizenship_code, + }; + + for(let i in response.data.founder_persons) + { + console.log("response.data.founder_persons", response.data.founder_persons); + questionnaire.founder_persons[i] = response.data.founder_persons[i]; + questionnaire.founder_persons[i].identity_document.citizenship = { + title: getCitizenshipTitleByCode(response.data.founder_persons[i].identity_document.citizenship_code), + code: response.data.founder_persons[i].identity_document.citizenship_code, + }; + } + + //questionnaire.founder_persons = { ...questionnaire.head_person, ...response.data.head_person }; + + console.log("questionnairequestionnairequestionnaire FROM JSON", questionnaire); + updateQuestionnaire({ dispatch, questionnaire }) + .then(() => {}) + .catch(() => {}); + //dispatch({ type: actionTypes.SUPPORT_APPEALS, data: { appeals: { list: response.data.appeals, new: response.data.new, } } }); + resolve(); + } + else + { + resolve(); + } + /* + }) + .catch((error) => + { + console.log("error"); + console.error(error); + + reject(); + }); } + */ }) - .catch((error) => + .catch(() => { - console.log("error"); - console.error(error); + }); + }); +} + +export const saveQuestionnaire = () => +{ + return new Promise((resolve, reject) => + { + const questionnaire = JSON.parse(JSON.stringify(global.store.getState().questionnaire)); + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/save`, { questionnaire }, { + withCredentials: true, + }) + .then((response) => + { + resolve(); + }) + .catch(() => + { reject(); }); }); @@ -174,8 +261,8 @@ export const downloadQuestionnaire = (download = true) => const { questionnaire } = global.store.getState(); console.log("questionnaire", questionnaire); - const { main, contacts, signatory_person, founded_persons, head_person, non_profit, } = questionnaire; - const playload = { main, contacts, signatory_person, founded_persons, head_person, non_profit, }; + const { main, contacts, signatory_person, founder_persons, head_person, non_profit, } = questionnaire; + const playload = { main, contacts, signatory_person, founder_persons, head_person, non_profit, }; console.log({ playload }); /* axios.post(`${ process.env.NEXT_PUBLIC_INT_API_HOST }/questionnaire/download`, { questionnaire: playload }, { diff --git a/components/CalendarDatePicker/index.js b/components/CalendarDatePicker/index.js index 08afe47..11fd763 100644 --- a/components/CalendarDatePicker/index.js +++ b/components/CalendarDatePicker/index.js @@ -21,17 +21,63 @@ export default class CalendarDatePicker extends React.Component super(props); this.state = { readonly: true, + input_value: undefined, }; } _handle_onChange = (date) => { + //console.log("CalendarDatePicker", "_handle_onChange", date); + const { readonly } = this.state; if(this.props.onChange !== undefined) { this.props.onChange(date.getTime !== undefined ? date.toJSON() : ""); + /* + if(!readonly) + { + this.setState({ value: date }); + } + else + { + } + */ } } + /* + _handle_onKeyDown = (event) => + { + const { input_value } = this.state; + if(event.keyCode >= 48 && event.keyCode <= 57) + { + //const input_value + console.log("CalendarDatePicker", "_handle_onKeyChange", "key", event.key, event); + let new_value = `${ input_value !== undefined ? input_value : "" }${ event.key }`; + + let masks = "ДД.ММ.ГГГГ".split(""); + let letters = new_value.split(""); + + let chars = []; + console.log({ new_value, letters, masks }); + + for(let i in masks) + { + if(letters[i] !== undefined) + { + chars.push(letters[i]); + } + else + { + chars.push(masks[i]); + } + } + console.log("chars", chars, chars.join("")); + + this.setState({ input_value: chars.join("") }); + } + } + */ + _handle_onFocus = () => { this.setState({ readonly: false }); @@ -45,7 +91,7 @@ export default class CalendarDatePicker extends React.Component render() { const { id, placeholder, value, min, max, disabled, plain, style } = this.props; - const { readonly } = this.state; + const { readonly, input_value } = this.state; if(disabled) { @@ -60,6 +106,7 @@ export default class CalendarDatePicker extends React.Component messages={ messages } onFocus={ this._handle_onFocus } onBlur={ this._handle_onBlur } + //onKeyDown={ this._handle_onKeyDown } parse={ str => { return moment(str, 'DD.MM.YYYY').toDate() } } id={ id } placeholder={ placeholder } @@ -83,13 +130,14 @@ export default class CalendarDatePicker extends React.Component messages={ messages } onFocus={ this._handle_onFocus } onBlur={ this._handle_onBlur } + //onKeyDown={ this._handle_onKeyDown } parse={ str => { return moment(str, 'DD.MM.YYYY').toDate() } } id={ id } placeholder={ placeholder } - value={ value !== "" && value !== null ? new Date(value) : null } + value={ input_value !== undefined ? input_value : value !== "" && value !== null ? new Date(value) : null } min={ min } max={ max } - onChange={ this._handle_onChange } + onChange={ this._handle_onChange } /> ) diff --git a/components/questionnaire/AddressSuggests.js b/components/questionnaire/AddressSuggests.js index 729d700..ad8b391 100644 --- a/components/questionnaire/AddressSuggests.js +++ b/components/questionnaire/AddressSuggests.js @@ -45,7 +45,7 @@ export default class AddressSuggests extends React.Component const { fias, focused } = this.state; const { onChange } = this.props; - onChange({ title: value, fias_id: "" }); + onChange({ name: value, fias_id: "" }); if(focused) { this._getAddress(value); @@ -59,7 +59,7 @@ export default class AddressSuggests extends React.Component this.setState({ focused: false }, () => { - onChange({ title: value, fias_id: fias[value] }); + onChange({ name: value, fias_id: fias[value] }); }); } diff --git a/components/questionnaire/forms/Form_1_Main/index.js b/components/questionnaire/forms/Form_1_Main/index.js index 42da1da..b606a06 100644 --- a/components/questionnaire/forms/Form_1_Main/index.js +++ b/components/questionnaire/forms/Form_1_Main/index.js @@ -13,6 +13,7 @@ import CurrencyInput from 'react-currency-input'; import QuestionnaireForm from "../QuestionnaireForm"; import { reduxWrapper } from '../../../../store'; +import { saveQuestionnaire } from "../../../../actions"; class Form_1_Main extends QuestionnaireForm { @@ -21,13 +22,13 @@ class Form_1_Main extends QuestionnaireForm super(props); this.state = { main: { - title: "", - inn: "", - kpp: "", - email: "", - telephone: "", - websiteurl: "", - financial_loan: "", + title: null, + inn: null, + kpp: null, + email: null, + telephone: null, + websiteurl: null, + financial_loan: null, is_individual_executive: false, individual_executive_inn: "", individual_executive_kpp: "", @@ -107,11 +108,12 @@ class Form_1_Main extends QuestionnaireForm _handle_onFormSubmit = (event) => { event.preventDefault(); - console.log("Form_1_Main", "_handle_onFormSubmit"); + this._handle_onFieldChange("status", "draft"); this._handle_onCheckboxFieldChange("step", 2); setTimeout(() => { + saveQuestionnaire(); this.props.onNextStep("contacts"); }, 10); } @@ -138,8 +140,6 @@ class Form_1_Main extends QuestionnaireForm const digit = /[0-9]/; const fin_mask = [firstLetter, digit, letter, " ", digit, letter, digit]; - console.log("company", company); - return (
@@ -150,7 +150,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } required={ true } @@ -164,7 +164,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } required={ true } @@ -178,7 +178,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } required={ true } @@ -195,7 +195,7 @@ class Form_1_Main extends QuestionnaireForm mask='+7 (999) 999 99 99' id="main.telephone" name="main.telephone" - value={ main.telephone } + value={ this._checkStrValue(main.telephone) } placeholder="Введите номер" onChange={ (event) => this._handle_onTextFieldChange(event.target.name, event.target.value) } required={ true } @@ -209,7 +209,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } disabled={ checking } @@ -222,7 +222,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } disabled={ checking } @@ -235,7 +235,7 @@ class Form_1_Main extends QuestionnaireForm this._handle_onTextFieldChange(event.target.name, event.target.value) } diff --git a/components/questionnaire/forms/Form_2_Contacts/index.js b/components/questionnaire/forms/Form_2_Contacts/index.js index 1f0f7a7..60ba90e 100644 --- a/components/questionnaire/forms/Form_2_Contacts/index.js +++ b/components/questionnaire/forms/Form_2_Contacts/index.js @@ -13,6 +13,7 @@ import { withRouter } from 'next/router'; import QuestionnaireForm from "../QuestionnaireForm"; import { reduxWrapper } from '../../../../store'; import AddressSuggests from "../../AddressSuggests"; +import { saveQuestionnaire } from "../../../../actions"; class Form_2_Contacts extends QuestionnaireForm { @@ -25,22 +26,18 @@ class Form_2_Contacts extends QuestionnaireForm loading: false, fact_address: { - name: "", - fias_id: "", + name: null, + fias_id: null, }, legal_address: { - name: "", - fias_id: "", + name: null, + fias_id: null, }, postal_address: { - name: "", - fias_id: "", - }, + name: null, + fias_id: null, + }, }, - value: { - name: "", - fias_id: "", - } }; } @@ -56,10 +53,8 @@ class Form_2_Contacts extends QuestionnaireForm const { company } = this.props; const { address_type } = this.state.contacts; - console.log("company.inncompany.inncompany.inncompany.inn", company.inn, address_type); if(company.inn.length > 10 && address_type === "legal") { - console.log("THIS ?"); this.setState({ address_type: "fact" }); } } @@ -67,11 +62,11 @@ class Form_2_Contacts extends QuestionnaireForm _handle_onFormSubmit = (event) => { event.preventDefault(); - console.log("Form_2_Contacts", "_handle_onFormSubmit"); this._handle_onCheckboxFieldChange("step", 3); setTimeout(() => { + saveQuestionnaire(); this.props.onNextStep("signer"); }, 10); } @@ -114,8 +109,8 @@ class Form_2_Contacts extends QuestionnaireForm
this._handle_onTextFieldChange("contacts.fact_address", data) } required={ address_type === "fact" ? true : false } disabled={ checking } @@ -166,8 +161,8 @@ class Form_2_Contacts extends QuestionnaireForm