2023-03-27 14:37:30 +03:00

232 lines
4.6 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 } from "../../../actions";
const suggestsAddressDebounce = (text) =>
{
return getAddress(text);
}
const suggestsAddress = debounce(suggestsAddressDebounce, 200);
/*
const getAddress = (inputValue) => {
return
new Promise<ColourOption[]>((resolve) => {
setTimeout(() => {
resolve(filterColors(inputValue));
}, 1000);
});
}
*/
export default class QuestionnaireForm extends React.Component
{
_updateQuestionnaire = (questionnaire) =>
{
return new Promise((resolve, reject) =>
{
updateQuestionnaire({ dispatch: this.props.dispatch, questionnaire })
.then(() =>
{
resolve();
})
.catch(() =>
{
});
});
}
_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);
/*
if(name.indexOf(".") > -1)
{
const names = name.split(".");
if(names.length === 4)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ][ names[3] ] = value;
}
else if(names.length === 3)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ] = value;
}
else
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ] = value;
}
}
else
{
update[name] = value;
}
*/
this.setState(update);
}
_handle_onCheckboxFieldChange = (name, value) =>
{
console.log("QuestionnaireForm", "_handle_onCheckboxFieldChange", { name, value });
const update = { ...this.state };
_set(update, name, value);
/*
const update = {};
if(name.indexOf(".") > -1)
{
const names = name.split(".");
if(names.length === 4)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ][ names[3] ] = value;
}
else if(names.length === 3)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ] = value;
}
else
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ] = value;
}
}
else
{
update[name] = value;
}
*/
this.setState(update);
}
_handle_onFieldChange = (name, payload) =>
{
console.log("_handle_onFieldChange", name, payload);
const update = { ...this.state };
_set(update, name, payload);
this.setState(update);
}
_handle_onAddFile = (name, files) =>
{
console.log("QuestionnaireForm", "_handle_onAdd", { 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);
this.setState(update);
}
_handle_onRemoveFile = (name, file_name) =>
{
console.log("QuestionnaireForm", "_handle_onAdd", { name, files });
const existed_files = [ ..._get(this.state, name) ];
const files = [];
for(let i in existed_files)
{
if(existed_files[i].name !== file_name)
{
files.push(existed_files[i]);
}
}
const update = { ...this.state };
_set(update, name, files);
this.setState(update);
}
}
/*
const state = {
foo: {
bar: {
val: []
},
}
};
console.log(state);
console.log(state);
const name = "foo.bar.val";
const names = name.split(".");
console.log(names);
if(names.length > 0)
{
}
if(names.length === 4)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ][ names[3] ] = value;
}
else if(names.length === 3)
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ][ names[2] ] = value;
}
else
{
update[ names[0] ] = { ...this.state[ names[0] ] };
update[ names[0] ][ names[1] ] = value;
}
*/