AccountForm
The AccountForm component is a dynamic form used for creating or
updating an account. It renders form fields based on a provided data
model, allowing for flexible account structures. The form can be toggled
between “create” and “update” modes based on the presence of an
account object.
Usage
Integrate AccountForm by providing it with a resolved data model, an
account type, and a submit handler. The component is built on top of
@jsonforms/react and handles rendering and state management
internally.
import { AccountForm } from '@socotra/ec-react-components';
import { DataModel, AccountResponse } from '@socotra/ec-react-schemas';
// Example Usage
const MyComponent = ({ dataModel, account }: { dataModel: DataModel, account?: AccountResponse }) => {
const handleSubmit = (data) => {
console.log('Form submitted:', data);
// Handle API call to create or update the account
};
return (
<AccountForm
dataModel={dataModel}
accountType="personal"
account={account}
handleSubmit={handleSubmit}
submitButtonText={account ? 'Update Account' : 'Create Account'}
/>
);
};
Props
The component accepts the following props:
Prop |
Type |
Description |
Default |
|---|---|---|---|
|
|
The resolved data model object containing account configurations and data types. |
Required |
|
|
The specific account type from the data model to render the form for. |
Required |
|
|
Callback function triggered on form
submission. The argument type depends
on whether |
Required |
|
|
An optional account object. If provided, the form enters “update” mode. |
|
|
|
When true, disables the form fields and submit button, indicating a submission is in progress. |
|
|
|
When true, disables the entire form. |
|
|
|
If |
|
|
|
If |
|
|
|
Custom text for the submit button. |
|
|
|
If |
|
|
|
If |
|
|
|
A unique ID for the form wrapper element. |
|
|
|
An object to override default labels for advanced fields and other parts of the form. |
|
|
|
Optional map of field dependencies, required to enable constraint evaluation for the account form. |
|
|
|
Optional async function to call the backend for constraint evaluation. Required for the feature to be active. |
|
State Management
AccountForm manages its state internally using React’s useState
hook. It holds the form data in a state variable that is updated by the
underlying JsonForms component via its onChange callback. It
does not use an external form library like react-hook-form.
Constraint Evaluation
This form supports a powerful constraint evaluation system to create dynamic relationships between fields.
Purpose: To automatically calculate or update the values of certain fields based on user input in other fields, without requiring a full form submission. For example, selecting a specific “Region” could automatically populate a “Tax Rate” field.
Activation: The feature is enabled by providing both the
dependencyMapandgetEvaluatedConstraintsprops.Mechanism:
The
dependencyMaptells the form which fields depend on others.When a user changes a field that is a dependency for another, a
useEffecthook is triggered.This hook calls the
getEvaluatedConstraintsfunction with a payload of the changed data.The backend service evaluates the data and returns a
EvaluateConstraintsResponsecontaining the new values for any dependent fields.This response is stored in the
evaluatedConstraintsstate, which triggers a re-render.The
dataModelToJSONSchemautility uses this response to update the JSON Schema, making the calculated fields read-only and displaying their new values.
Validation
Form validation is handled by Ajv, a JSON Schema validator.
A JSON Schema is dynamically generated from the
dataModelprop using thedataModelToJSONSchemautility.Custom validation formats and keywords are added to the Ajv instance.
Validation can be configured to run when the user clicks the submit button by setting
validateOnSubmit={true}.Error messages are translated into a user-friendly format using the
translateErrorutility.
Labels and Translations
The text for UI labels and validation messages can be customized.
UI Labels
Labels for sections and fields can be overridden by passing a titles
object prop.
Key |
Description |
Default Value |
|---|---|---|
|
Title for the collapsible “Advanced” section. |
|
|
Label for the “Auto-Renewal Plan” field. |
|
|
Label for the “Delinquency Plan” field. |
|
|
Label for the “Excess Credit Plan” field. |
|
|
Label for the “Shortfall Tolerance Plan” field. |
|
|
Label for the “Billing Level” field. |
|
|
Label for the “Invoice Document” field. |
|
|
Label for the “Installment Plan” field. |
|
|
Text for a “true” boolean value. |
|
|
Text for a “false” boolean value. |
|