<form class="dynamic-form" action="/some-target/" method="POST" data-test="Yes" data-validation="true" data-jump-to-error-message="true">
      <div class="dynamic-form__message--half-width">
          <div class="message--error is-hidden">
              <div class="message__container--disabled">
                  <span class="visually-hidden">Error message</span>
                  <div class="message__content">
                      <p class="message__text"><b>Error</b>. The form is not valid! Please check the fields in this dialog</p>
                  </div>
                  <div class="message__close-button">
                      <button class="button-icon--icon-regular -icon-close" type="button" name="close-big-menu" value="yes">
                          <span class="visually-hidden">Schliessen</span>
                      </button>
                  </div>
              </div>
          </div>
      </div>
      <fieldset class="dynamic-form__fieldset--half-width">
          <div class="dynamic-form__element">
              <div class="select--light is-initialized with-label">
                  <div class="select__wrapper">
                      <select class="select__select" id="salutation" name="salutation" required>

                          <option value="" disabled selected>Bitte wählen</option>
                          <option value="mr">Herr</option>
                          <option value="ms">Frau</option>
                      </select>
                      <label class="select__label" for="salutation">Anrede
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="firstName" type="text" name="firstName" required />
                      <label class="text-field__label" for="firstName">Vorname
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="lastName" type="text" name="lastName" required />
                      <label class="text-field__label" for="lastName">Nachname
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="mail" type="email" name="mail" required />
                      <label class="text-field__label" for="mail">E-Mail Adresse
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element--zip-city">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="zip" type="text" name="zip" required />
                      <label class="text-field__label" for="zip">PLZ
                          *
                      </label>
                  </div>

              </div>

              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="city" type="text" name="city" required />
                      <label class="text-field__label" for="city">Ort
                          *
                      </label>
                  </div>

              </div>

          </div>
          <div class="dynamic-form__element">
              <div class="select--light is-initialized is-filled-in with-label">
                  <div class="select__wrapper">
                      <select class="select__select" id="country" name="country" required>

                          <option value="" disabled>Bitte wählen</option>
                          <option value="ch" selected="selected">Schweiz</option>
                          <option value="de">Deutschland</option>
                          <option value="fr">Frankreich</option>
                          <option value="it">Italien</option>
                          <option value="li">Lichtenstein</option>
                      </select>
                      <label class="select__label" for="country">Land
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="mail-confirmation" type="email" name="mail-confirmation" required />
                      <label class="text-field__label" for="mail-confirmation">E-Mail Adresse bestätigen
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="password" type="password" name="password" required />
                      <label class="text-field__label" for="password">Passwort
                          *
                      </label>
                  </div>
                  <div class="text-field__helper">
                      <div class="text-field__helper--text">8 Zeichen, mind. eine Zahl, mind. ein Sonderzeichen</div>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="text-field--light is-initialized">
                  <div class="text-field__wrapper">
                      <input class="text-field__input" id="password-confirmation" type="password" name="password-confirmation" required />
                      <label class="text-field__label" for="password-confirmation">Passwort bestätigen
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="select--light is-initialized with-label">
                  <div class="select__wrapper">
                      <select class="select__select" id="language" name="language" required>

                          <option value="" disabled selected>Bitte wählen</option>
                          <option value="de">Deutsch</option>
                          <option value="fr">Français</option>
                          <option value="it">Italiano</option>
                      </select>
                      <label class="select__label" for="language">Sprache
                          *
                      </label>
                  </div>

              </div>

          </div>

          <div class="dynamic-form__element">
              <div class="select--light is-initialized with-label">
                  <div class="select__wrapper">
                      <select class="select__select" id="business" name="business" required>

                          <option value="" disabled selected>Bitte wählen</option>
                          <option value="hair">Hair</option>
                          <option value="nail">Nail</option>
                          <option value="cosmetics">Cosmetics</option>
                          <option value="feet">Feet</option>
                      </select>
                      <label class="select__label" for="business">Branche
                          *
                      </label>
                  </div>

              </div>

          </div>

      </fieldset>
      <button class="button--primary-small" type="submit">Absenden</button>
  </form>
{% include '@SharedComponents/modules/shared/components/dynamic-form/dynamic-form.twig' %}
{
  "variant": "half-width",
  "form": {
    "method": "POST",
    "action": "/some-target/",
    "validation": true,
    "jumpToErrorMessage": true,
    "message": {
      "closeButton": {
        "variant": "icon-regular",
        "title": "Schliessen",
        "icon": "close",
        "type": "button",
        "role": "button",
        "name": "close-big-menu",
        "value": "yes"
      },
      "isHidden": true,
      "container": false,
      "labels": {
        "info": "Information message",
        "error": "Error message",
        "warning": "Warning message",
        "success": "Success message"
      },
      "variant": "error",
      "message": "<b>Error</b>. The form is not valid! Please check the fields in this dialog"
    },
    "attributes": {
      "data-test": "Yes"
    }
  },
  "fields": [
    {
      "component": "select",
      "variant": "light",
      "id": "salutation",
      "name": "salutation",
      "label": "Anrede",
      "required": true,
      "disabled": false,
      "selected": false,
      "options": {
        "mr": "Herr",
        "ms": "Frau"
      },
      "choose": "Bitte wählen",
      "error": ""
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "firstName",
      "name": "firstName",
      "label": "Vorname",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "text",
      "autocomplete": false,
      "error": ""
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "lastName",
      "name": "lastName",
      "label": "Nachname",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "text",
      "autocomplete": false,
      "error": ""
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "mail",
      "name": "mail",
      "label": "E-Mail Adresse",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "email",
      "autocomplete": false
    },
    {
      "component": "text-field-zip-city",
      "variant": "light",
      "id": "zip",
      "name": "zip",
      "label": "PLZ",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "text",
      "autocomplete": false,
      "error": ""
    },
    {
      "component": "text-field-zip-city",
      "variant": "light",
      "id": "city",
      "name": "city",
      "label": "Ort",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "text",
      "autocomplete": false,
      "error": ""
    },
    {
      "component": "select",
      "variant": "light",
      "id": "country",
      "name": "country",
      "label": "Land",
      "required": true,
      "disabled": false,
      "selected": "ch",
      "options": {
        "ch": "Schweiz",
        "de": "Deutschland",
        "fr": "Frankreich",
        "it": "Italien",
        "li": "Lichtenstein"
      },
      "choose": "Bitte wählen",
      "error": ""
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "mail-confirmation",
      "name": "mail-confirmation",
      "label": "E-Mail Adresse bestätigen",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "email",
      "autocomplete": false
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "password",
      "name": "password",
      "label": "Passwort",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "password",
      "autocomplete": false,
      "helper": "8 Zeichen, mind. eine Zahl, mind. ein Sonderzeichen"
    },
    {
      "component": "text-field",
      "variant": "light",
      "id": "password-confirmation",
      "name": "password-confirmation",
      "label": "Passwort bestätigen",
      "required": true,
      "value": "",
      "disabled": false,
      "type": "password",
      "autocomplete": false
    },
    {
      "component": "select",
      "variant": "light",
      "id": "language",
      "name": "language",
      "label": "Sprache",
      "required": true,
      "disabled": false,
      "selected": false,
      "options": {
        "de": "Deutsch",
        "fr": "Français",
        "it": "Italiano"
      },
      "choose": "Bitte wählen",
      "error": ""
    },
    {
      "component": "select",
      "variant": "light",
      "id": "business",
      "name": "business",
      "label": "Branche",
      "required": true,
      "disabled": false,
      "selected": false,
      "options": {
        "hair": "Hair",
        "nail": "Nail",
        "cosmetics": "Cosmetics",
        "feet": "Feet"
      },
      "choose": "Bitte wählen",
      "error": ""
    }
  ],
  "submitButton": {
    "variant": "primary-small",
    "type": "button",
    "title": "Absenden"
  }
}
  • Content:
    import './dynamic-form.scss';
    import DynamicForm, {selector as sel} from 'cando-cx-components-library/components/modules/shared/components/dynamic-form/dynamic-form';
    
    export default DynamicForm;
    export const selector = sel;
  • URL: /components/raw/dynamic-form/dynamic-form.js
  • Filesystem Path: src/components/modules/shared/components/dynamic-form/dynamic-form.js
  • Size: 224 Bytes
  • Content:
    @import "~shared/base";
    @import "~cando-cx-components-library/components/modules/shared/components/dynamic-form/dynamic-form";
  • URL: /components/raw/dynamic-form/dynamic-form.scss
  • Filesystem Path: src/components/modules/shared/components/dynamic-form/dynamic-form.scss
  • Size: 126 Bytes

This component was built with a generic pattern. You can pass an array of 1-n elements. These elements can be usual form components like “text-field” or “checkbox”, but there are two special form components:

  • text-field-street-number: Expects two fields with this type in sequence (to show them next to each other)
  • text-field-zip-city: Expects two fields with this type in sequence (to show them next to each other)

Please look into the .config.yml file of the corresponding form component to see which data properties it expects.