Survey.ComponentCollection.Instance.add({
name: "fullname",
title: "Full Name",
elementsJSON: [
{
type: "text",
name: "firstName",
title: "First Name",
isRequired: true,
minWidth: 200
},
{
type: "text",
name: "lastName",
title: "Last Name",
isRequired: true,
minWidth: 200,
startWithNewLine: false,
},
//Adding new middle name question
{
type: "text",
name: "middleName",
title: "Middle Name",
startWithNewLine: false,
//Initially makes middle name invisible
visible: false,
},
],
//SurveyJS calls this function one time on registing component, after creating "fullname" class.
onInit() {
//SurveyJS will create a new class "fullname". We can add properties for this class onInit()
Survey.Serializer.addProperty("fullname", {
name: "showMiddleName:boolean",
default: false,
category: "general",
});
},
//SurveyJS calls this function after creating new question and loading it's properties from JSON
//It calls in runtime and at design-time (after loading from JSON) and pass the current component/root question as parameter
onLoaded(question) {
this.changeMiddleVisibility(question);
},
//SurveyJS calls this on a property change in the component/root question
//It has three parameters that are self explained
onPropertyChanged(question, propertyName, newValue) {
if (propertyName == "showMiddleName") {
this.changeMiddleVisibility(question);
}
},
//The custom function that used in onLoaded and onPropertyChanged functions
changeMiddleVisibility(question) {
//get middle question from the content panel
let middle = question.contentPanel.getQuestionByName("middleName");
if (!!middle) {
//Set visible property based on component/root question showMiddleName property
middle.visible = question.showMiddleName === true;
}
},
});
const options = { questionTypes : ["text", "checkbox", "radiogroup", "dropdown"] };
var creator = new SurveyCreator.SurveyCreator(options);
ReactDOM.render(
<React.StrictMode>
<SurveyCreator.SurveyCreatorComponent creator={creator} />
</React.StrictMode>,
document.getElementById("creatorElement")
);
creator.JSON = {
elements: [
{
type: "fullname",
name: "question1"
}
]
};
//Select the order table component
creator.selectedElement = creator.survey.getAllQuestions()[0];
//Show property grid
creator.rightContainerActiveItem("property-grid");
<!DOCTYPE html>
<html lang="en">
<head>
<title>Full Name component, Survey Creator Example</title>
<meta name="viewport" content="width=device-width" />
<script src="https://unpkg.com/react@17.0.1/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.1/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone@7.2.5/babel.min.js"></script>
<script src="/DevBuilds/survey-core/survey.core.min.js"></script>
<script src="/DevBuilds/survey-core/survey.i18n.min.js"></script>
<script src="/DevBuilds/survey-react-ui/survey-react-ui.min.js"></script>
<link href="/DevBuilds/survey-core/defaultV2.min.css" type="text/css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.10/ace.min.js" type="text/javascript" charset="utf-8"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.10/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>
<!-- Uncomment to enable Select2
<script src="https://unpkg.com/jquery"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
-->
<script src="/DevBuilds/survey-creator-core/survey-creator-core.min.js"></script>
<link href="/DevBuilds/survey-creator-core/survey-creator-core.min.css" type="text/css" rel="stylesheet" />
<script src="/DevBuilds/survey-creator-core/survey-creator-core.i18n.min.js"></script>
<script src="/DevBuilds/survey-creator-react/survey-creator-react.min.js"></script>
<style>
:root {
--tab-min-height: 600px;
}
</style>
<link rel="stylesheet" href="./index.css">
</head>
<body style="margin: 0">
<div id="surveyContainer">
<div id="creatorElement" style="height: 100vh;"></div>
</div>
<script type="text/babel" src="./index.js"></script>
</body>
</html>
Help us serve you better by taking this brief
survey. We are interested to learn more about
your experience of using our libraries.
We'd really appreciate your feedback.
Approximate time to complete: 2 min.
Start the survey