This is an example of a library of custom components on top of @bpmn-io/form-js.
npm i @camunda-community/form-js-extended
Renders a form. Note : newForm method returns a native @bpmn-io/form-js Form object.
import { newForm } from '@camunda-community/form-js-extended';
import { Form } from '@bpmn-io/form-js';
const form = newForm({
container: document.querySelector('#form'),
});
await form.importSchema(schema, data);
form.on('submit', (event) => {
console.log(event.data, event.errors);
});
Create a new form or edit an exsting one. Note : newFormEditor method returns a native @bpmn-io/form-js FormEditor object.
import { newFormEditor } from '@camunda-community/form-js-extended';
import { FormEditor } from '@bpmn-io/form-js';
const formEditor = newFormEditor({
container: document.querySelector('#form-editor'),
});
await formEditor.importSchema(schema);
In assets, you'll find custom css or icons used in the components or in the FormEditor
Under custom, you'll find components and properties-panel. Components is the folder hosting the code of the custom components. These components may require some specific properties at design time. These properties are managed in the properties-panel folder.
Under this folder, you'll find the components and there dependencies (in shared). api-select and range are 2 examples of custom components. Under shared, you'll find some hooks and utils as well as some parts (sub parts of components that are reusables).
In there, you'll find the specific "groups" used in the FormEditor for the components. There is also a "utils" folder hosting some reusable code.
- Add a folder with your component name in components. Add an index.js file into it that will contain your component code..
- Add the component into the RenderExtension in custom/components/index.js
- If this component requires some specific configurations, add a folder in custom/properties-panel and register it in the PropertiesPanelExtension in custom/properties-panel/index.js