232 lines
4.6 KiB
JavaScript
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;
|
|
}
|
|
*/ |