@camunda-community/form-js-extended
Version:
An extension library for @bpmn.io/form-js that provides custom form editor functionalities
69 lines (43 loc) • 2.36 kB
Markdown
# @bpmn-io/form-js extended
This is an example of a library of custom components on top of @bpmn-io/form-js.
## How to use it in a react/angular/vue project ?
```bash
npm i @camunda-community/form-js-extended
```
### Display a form <a id="viewer" />
Renders a form. **Note** : newForm method returns a native @bpmn-io/form-js Form object.
```javascript
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 and edit a form <a id="builder" />
Create a new form or edit an exsting one. **Note** : newFormEditor method returns a native @bpmn-io/form-js FormEditor object.
```javascript
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);
```
## Project structure
In assets, you'll find custom css or icons used in the components or in the FormEditor
### custom
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.
#### custom/components
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).
#### custom/properties-panel
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.
## How to add a new component
1. Add a folder with your component name in components. Add an index.js file into it that will contain your component code..
2. Add the component into the RenderExtension in custom/components/index.js
3. 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