Skip to content

Controls use different amount of space when hidden #2369

Open
@rajsite

Description

@rajsite

Describe the bug

In a horizontal layout controls that are not shown still consume space unexpectedly.

Expected behavior

I expect only controls that are shown will participate in the flex layout and space is not associated with controls that are not shown.

Steps to reproduce the issue

  1. Go to https://stackblitz.com/edit/jsonformsquerybuilder
  2. Click on "Add to query groups" to add a query group to the array. Click on "Add to queries" to a query to the sub array.
  3. Change "Property Name" to "connectionStatus".
    Notice the unexpected reserved space after the connection status value that looks incorrect:
    image
  4. Change "Property Name" to "description"
    Notice that the spacing between the description and operator field is too large and looks incorrect:
    image

The following are the schemas demonstrated. The issue appears on both the seeds I tested, the current angular seed and the current vue seed.

schema
{
  "definitions": {
    "query": {
      "type": "object",
      "properties": {
        "propertyName": {
          "type": "string",
          "enum": ["connectionStatus", "description"]
        }
      },
      "anyOf": [
        {
          "if": {
            "properties": { "propertyName": { "const": "connectionStatus" } }
          },
          "then": {
            "properties": {
              "connectionStatusOperator": {
                "type": "string",
                "enum": ["equals", "doesNotEqual"]
              },
              "connectionStatusValue": {
                "type": "string",
                "enum": ["approved", "disconnected", "connected"]
              }
            }
          }
        },
        {
          "if": {
            "properties": { "propertyName": { "const": "description" } }
          },
          "then": {
            "properties": {
              "descriptionOperator": {
                "type": "string",
                "enum": ["equals", "doesNotEqual"]
              },
              "descriptionValue": { "type": "string" }
            }
          }
        }
      ]
    },
    "queryGroup": {
      "type": "object",
      "properties": {
        "queryGroupsOperator": { "type": "string", "enum": ["AND", "OR"] },
        "queries": {
          "type": "array",
          "items": { "$ref": "#/definitions/query" }
        }
      }
    }
  },
  "type": "object",
  "properties": {
    "queryGroups": {
      "type": "array",
      "items": { "$ref": "#/definitions/queryGroup" }
    }
  }
}
uischema.json
{
  "type": "HorizontalLayout",
  "elements": [
    {
      "type": "Control",
      "label": { "text": "Query Groups", "show": true },
      "scope": "#/properties/queryGroups",
      "options": {
        "showSortButtons": true,
        "detail": {
          "type": "VerticalLayout",
          "elements": [
            {
              "type": "Control",
              "scope": "#/properties/queries",
              "options": {
                "showSortButtons": true,
                "detail": {
                  "type": "HorizontalLayout",
                  "elements": [
                    { "type": "Control", "scope": "#/properties/propertyName" },
                    {
                      "type": "Control",
                      "scope": "#/properties/connectionStatusOperator",
                      "rule": {
                        "effect": "SHOW",
                        "condition": {
                          "scope": "#/properties/propertyName",
                          "schema": { "const": "connectionStatus" }
                        }
                      }
                    },
                    {
                      "type": "Control",
                      "scope": "#/properties/connectionStatusValue",
                      "rule": {
                        "effect": "SHOW",
                        "condition": {
                          "scope": "#/properties/propertyName",
                          "schema": { "const": "connectionStatus" }
                        }
                      }
                    },
                    {
                      "type": "Control",
                      "scope": "#/properties/descriptionOperator",
                      "rule": {
                        "effect": "SHOW",
                        "condition": {
                          "scope": "#/properties/propertyName",
                          "schema": { "const": "description" }
                        }
                      }
                    },
                    {
                      "type": "Control",
                      "scope": "#/properties/descriptionValue",
                      "rule": {
                        "effect": "SHOW",
                        "condition": {
                          "scope": "#/properties/propertyName",
                          "schema": { "const": "description" }
                        }
                      }
                    }
                  ]
                }
              }
            },
            { "type": "Control", "scope": "#/properties/queryGroupsOperator" }
          ]
        }
      }
    }
  ]
}

Screenshots

See above

Which Version of JSON Forms are you using?

v3.3.0

Package

Angular Material Renderers

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions