formEngineRsuiteCssLoader,
ltrCssLoader,
RsLocalizationWrapper,
rSuiteComponents,
rtlCssLoader,
} from '@react-form-builder/components-rsuite'
// Here you can pass the metadata of your components
const componentsMetadata = rSuiteComponents.map(
(definer) => definer.build().model,
)
const view = createView(componentsMetadata)
// The following parameters are required for correct CSS loading in LTR and RTL modes
.withViewerWrapper(RsLocalizationWrapper)
.withCssLoader(BiDi.LTR, ltrCssLoader)
.withCssLoader(BiDi.RTL, rtlCssLoader)
.withCssLoader('common', formEngineRsuiteCssLoader)
// Example form, in JSON format
const emptyForm = `
{
"version": "1",
"form": {
"key": "Screen",
"type": "Screen",
"props": {},
"children": [
{
"key": "firstName",
"type": "RsInput",
"props": {
"label": {
"value": "First name"
}
}
},
{
"key": "lastName",
"type": "RsInput",
"props": {
"label": {
"value": "Last Name"
}
}
},
{
"key": "rsButton1",
"type": "RsButton",
"props": {
"appearance": {
"value": "primary"
},
"children": {
"value": "Save"
},
"color": {
"value": "blue"
},
"disabled": {
"value": false,
"computeType": "function",
"fnSource": " return form.state.dataChanged !== true;"
}
}
}
]
},
"localization": {},
"languages": [
{
"code": "en",
"dialect": "US",
"name": "English",
"description": "American English",
"bidi": "ltr"
}
],
"defaultLanguage": "en-US"
}
`
const formName = 'Example'
async function getFormFn(name?: string) {
if (name === formName) return emptyForm
throw new Error(`Form '${name}' is not found.`)
}
const initialData = {
firstName: 'Mars',
lastName: 'Jupiter',
}
const App = () => {
return (
<FormViewer
view={view}
getForm={getFormFn}
formName={formName}
initialData={initialData}
onFormDataChange={({data, state}) => {
const sourceData = JSON.stringify(initialData)
const currentData = JSON.stringify(data)
state.dataChanged = sourceData !== currentData
}}
/>
)
}
export default App