core-jvm
core2-jvm (latest)core-jvm
  • Home
  • Features
  • Examples
  • Spec
  • Guides
  • Sandbox
  • Step Studio
  • Step
    • Action
    • Behavior
    • External
    • Help
    • Link Handler
    • Navigation
    • Persist Async
    • Polling
    • Refresh On Change
    • Step Error
    • Summary
    • Upload
    • Validate Async
    • Schema
    • All Of Schema
    • Array Schema
    • Blob Schema
    • Boolean Schema
    • Const Schema
    • Integer Schema
    • Number Schema
    • Object Schema
    • One Of Schema
    • String Schema
    • Layout
    • Alert Layout
    • Box Layout
    • Button Layout
    • Columns Layout
    • Decision Layout
    • Form Layout
    • Heading Layout
    • Image Layout
    • Instructions Layout
    • List Layout
    • Loading Indicator Layout
    • Markdown Layout
    • Modal Layout
    • Paragraph Layout
    • Review Layout
    • Search Layout
    • Status List Layout
    • Action Response Body
    • Error Response Body
    • Flow Response
    • Search Response Body
    • Search Result
    • Align
    • Autocapitalization Type
    • Autocomplete Token
    • Context
    • Icon
    • Image
    • Size
These docs refer to the older 1.x release of Dynamic Flow.
Go to the latest docs

One Of Schema

Android - 8.25.0 iOS - 11539 Web - 2.5.0

Offers a choice between a number of child schemas.

Use a oneOf schema to represent either the selection of one of many constant values (e.g. a select box or dropdown) or alternative sections of a form (e.g. when the user can complete either a form in tab A or tab B).

Preselection

Sometimes you may want to load a step with an option selected - for example in order to retain the selected option after a refresh.

To figure out which item to select, we look at the step model. Clients will first populate the form with the model, and then inspect each oneOf option and compare them with the model to see which ones match. If no options match, or if multiple match, we will not select anything.

This is the full matching algorithm:

function isPartialMatch(optionValue, stepModel) {
  if (isArray(optionValue) && isArray(stepModel)) {
    return (
      optionValue.length === stepModel.length &&
      optionValue.every((value, index) => isPartialModelMatch(value, stepModel[index]))
    );
  }
  if (isObject(optionValue) && isObject(stepModel)) {
    // Don't look at properties with null values
    const nonNullishKeysInBoth = intersection(nonNullishKeys(optionValue), nonNullishKeys(stepModel));
    return (
      nonNullishKeysInBoth.length > 0 &&
      nonNullishKeysInBoth.every((key) => isPartialModelMatch(optionValue[key], stepModel[key]))
    );
  }
  return optionValue === stepModel;
};

Caveats

Persisted fields are ignored, as are keys with nullish values.

Discriminators

If your oneOf options share schema property names, you will need to add a discriminator to ensure successful preselection. For example - if the following example did not contain a const type discriminator and the step model was { "name": "Jane" }, we would not know which option to select, as both match. Conversely, if you remove the name property from the schemas, the const discriminator would be unnecessary, as there would be no ambiguity. *

schemas {
    obj {
        title = "Iban option"
        properties {
            const("type") {
                value = JsonPrimitive("IBAN")
            }
            string("iban") {
                title = "IBAN"
            }
            string("name") {
                title = "Name"
            }
        }
    }
    obj {
        title = "Bic option"
        properties {
            const("type") {
                value = JsonPrimitive("BIC")
            }
            string("bic") {
                title = "BIC"
            }
            string("name") {
                title = "Name"
            }
        }
    }
}

Properties

PropertyTypeRequiredDescription
$idStringNoA unique id which can be used to refer to the schema.
alertAlertLayoutNoConfigure an alert which will be displayed above the UI for this schema. This can be used to provide warnings or additional information to the user, but shouldn't be used for validation. For client-side validation please see the validation available on each schema type, or see Validate Async and Action for server-side validation.
analyticsIdStringNoAn internal id which is attached to analytics events relating to the schema. It allows you to override $id during event emission, it is not user-facing and does not have to be unique within the step.

autocompleteHint

Array<AutocompleteToken>

No

A list of tokens describing to the client what kind of field it is. This can enable the user agent or assistive technologies to automatically suggest or fill in information specific to the user. Values not recognised by the client will be discarded, and clients that only support single values will take the first supported value in the list.

Android - 8.39.0 iOS - 11889 Web - 2.5.0

autofillKeyStringNoIdentifies the type of data which the client can autofill for this schema. This is provided in a . delimited string, in the format source.prop, e.g contact.email. In this example, the client should suggest values from the email property on objects retrieved from the contact source to autofill this field. The only currently supported source is contact. It will inspect contacts from the native client address book (if available). Supported properties on the contact source are: - givenName - familyName - fullName - email - firstLine - city - state - postalCode - countryCode
controlStringNoAn identifier which can be used to request the client use a particular UI control to represent this schema.
defaultAnyNoThe default value to use for this schema. This will be overridden by a value in the model of the Step if one is provided.
descriptionStringNoA user-facing description for the schema.
disabledBooleanNoIf true, the UI for this schema will not accept input, but the corresponding data will still be submitted. Defaults to false.
helpHelpNoProvide additional help information to the user.
hiddenBooleanNoIf true, no UI will be shown to the user for this schema, but the corresponding data will still be submitted. Defaults to false.
iconIconNoAn icon which the client can use to represent this schema.
imageImageNoAn image which the client can use to represent this schema.
keywordsArray<String>NoA list of keywords that can be used when searching or filtering items in a One Of Schema. Only applies when this schema is child schema in a One Of Schema.
oneOfArray<Schema>YesThe child schemas to be selected between.
placeholderStringNoA user-facing placeholder value to use for the field. This can be used to provide an example of the expected input.
refreshStepOnChangeBooleanNoWhen true, the step will be refreshed when the value of this schema changes.
summarySummary.ProviderNoConfigure how this schema will be summarised when included in an Array Schema.
titleStringNoA user-facing title for the schema.
validationMessagesMap<String, String>NoAn object where each property/value pair is the name of a validation property (e.g. maximum) to the user-facing error message to display if the validation fails.