formio / formio.js

JavaScript powered Forms with JSON Form Builder
https://formio.github.io/formio.js
MIT License
1.83k stars 1.04k forks source link

onlyAvailableItems is not a property of ValidateOptions #5545

Open LoLei opened 3 months ago

LoLei commented 3 months ago

Describe the bug A clear and concise description of what the bug is.

When using https://formio.github.io/formio.js/app/builder, you can enable onlyAvailableItems on a select component like this:

    "components": [
        {
            "label": "Select",
            "widget": "choicesjs",
            "tableView": true,
            "validate": {
                "onlyAvailableItems": true  //  <--- Here
            },
            "key": "select",
            "type": "select",
            "input": true
        }
    ]

However, when using the JS (TS) library, I cannot do the same, e.g.:

  const form: FormioForm = {
    components: [
      {
        label: 'Select',
        widget: 'choicesjs',
        tableView: true,
        validate: {
          onlyAvailableItems: true  // <--- Typescript error see below
        },
        key: 'select',
        type: 'select',
        input: true
      }
    ]
  }
Object literal may only specify known properties, and 'onlyAvailableItems' does not exist in type 'ValidateOptions'.ts(2353)
schema.d.ts(82, 3): The expected type comes from property 'validate' which is declared here on type 'ExtendedComponentSchema'

If I view the definition of ValidateOptions, I can see that onlyAvailableItems does not exist.

https://github.com/formio/formio.js/blob/faf72202df5ce74ec698637444f4c7f7674a0568/types/components/schema.d.ts#L170

Version/Branch What release version or branch are you experiencing the behavior

4.19.x

To Reproduce Steps to reproduce the behavior:

  1. Create Typescript variable using FormioForm as a type.
  2. Add component based on the typescript code posted above.
  3. See error

Expected behavior A clear and concise description of what you expected to happen.

The error should not occur and the property should exist on the interface, as would be expected due to it being accepted in the JSON.

Additional context

If I'm doing something wrong, or my understanding is incorrect, please let me know, of course.