ui-form-interpreter
@mmm/ui-form-interpreter
Installation
pnpm add @mmm/ui-form-interpreterPeer Dependencies muessen im Service vorhanden sein:
"@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.3.16 || ^21.2.16""@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.3.16 || ^21.2.16""@angular/forms": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.3.16 || ^21.2.16""@angular/router": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.3.16 || ^21.2.16""@angular/cdk": "^21.0.0""@mmm/designsystem": "^1.9.0""rxjs": "^7.8.2"
Schnellstart
Modul registrieren
Das Modul kann über das imports-Array einer Komponente sowie als Provider eingebunden werden.
Service konfigurieren
Um ein Formular mittels des Forminterpreters anzeigen zu können, muss das Schema dem FormInterpreterService übergeben werden. Hierfŭr kann der setSchema-Aufruf des InterpreterService verwendet werden.
const schema: TFormSchema = { "id": "signup", "version": 1, "title": "Newsletter Sign-up", "description": "Example", "boxed": "true", // neu, per default true, zeigt boxed design an. false, versteckt es "hideProgress": "false", // default false, true für reguläre formulare "sections": [ { "key": "base", "title": "Basic Data", "fields": [ { "key": "newsletter", "type": "checkbox", "label": "Subscribe to newsletter", "defaultValue": false }, { "key": "email", "type": "input", "label": "E-mail", "placeholder": "you@example.com", "requiredIf": { "field": "newsletter", "op": "==", "value": true }, "validators": [{ "name": "email" }], "visibleIf": { "field": "newsletter", "op": "==", "value": true } }, { "key": "country", "type": "select", "label": "Country", "options": { "source": "static", "items": [ { "value": "DE", "label": "Germany" }, { "value": "AT", "label": "Austria" } ] } }, { "key": "zip", "type": "input", "label": "ZIP", "validators": [{ "name": "pattern", "pattern": "^\\d{5}$" }], "enabledIf": { "any": [ { "field": "country", "op": "==", "value": "DE" }, { "field": "country", "op": "==", "value": "AT" } ] } }, { "key": "start", "type": "date", "label": "Start date" }, { "key": "end", "type": "date", "label": "End date", "validators": [{ "name": "dateBounds", "minField": "start" }] } ] } ], "submit": { "label": "Submit" }}
this.formInterpreter.setSchema(schema)Dem Schema können auch Standardwerte für Formwerte übergeben werden:
this.formInterpreter.setSchema(schema, {email: "test@example.org"})Komponentenbindings
Standardmäßig werden verschiedene Komponenten des Designsystems mittels des Feldtyps zu Formfeldern oder Layouts gerendert. Folgende Liste wird out of the box unterstützt:
Sollten weitere Komponenten benötigt werden oder aber eine der Standardkomponenten überschrieben werden, können eigene Komponenten für Feldtypen registriert werden.
Die zu registrierende Komponent muss entweder FormBindingBase (für die Verwendung als Formularfeld) oder BindingBase erweitern (für arbiträre Komponenten wie beispielsweise ein Video oder ein Hilfsrechner, die nicht Teil des Formulars sind und nicht validiert werden müssen).
Zur Registrierung kann folgender Aufruf verwendet werden:
this.interpreterService.registerCustomNode({ key: 'custom', component: CustomComponent})Exports
Das Paket exportiert:
FormInterpreterModuleFormInterpreterServiceTFormSchemaTExprTValidatorTOptionItemTOptionsTMaskTFieldTSectionevaluateExprgetValueAtPathBindingBaseFormBindingBaseInterpreterFjGroupFjFieldRendererFjSubgroup
Entwicklung
Build:
pnpm buildPublish passiert ueber die Bitbucket-Pipeline.