Can two New-UDSelect dropdowns be set up so the second updates dynamically based on the first selection?

Hi,

Is it possible to create two dropdown menus using New-UDSelect, where the second dropdown updates dynamically based on the selection made in the first one? For example, if the first dropdown includes options like Beginner, Intermediate, and Advanced, selecting Beginner would display only the corresponding beginner options in the second dropdown, selecting Intermediate would show only intermediate options, and selecting Advanced would display only advanced options.

Yes, that is possible.
With Sync-PSUElement in the -OnChange block and a New-UDDynamic around the second UDSelect that gets the currently selected value with Get-UD-Element. This helps if you have multiple elements that should change depending on the selected value.

You can also set the new options for the second UDSelect in the -OnChange block if this is a small change.

It seems there is a clear first and second step for your app. Take a look at the UDStepper, which might be the best fit for that case.

Hi, like dynamic wrote its easy to build, for example:

$dropdownLookup = @{
    value_option_1 = [ordered]@{
        "Beginner Option 1" = "beginner_value_1"
        "Beginner Option 2" = "beginner_value_2"
        "Beginner Option 3" = "beginner_value_3"
    }
    value_option_2 = [ordered]@{
        "Intermediate Option 1" = "intermediate_value_1"
        "Intermediate Option 2" = "intermediate_value_2"
        "Intermediate Option 3" = "intermediate_value_3"
    }
    value_option_3 = [ordered]@{
        "Advanced Option 1" = "advanced_value_1"
        "Advanced Option 2" = "advanced_value_2"
        "Advanced Option 3" = "advanced_value_3"
    }
}

New-UDSelect -Id "select_mainDropDown" -Label "Main dropdown" -Option {
    New-UDSelectOption -Name "Beginner" -Value "value_option_1"
    New-UDSelectOption -Name "Intermediate" -Value "value_option_2"
    New-UDSelectOption -Name "Advanced" -Value "value_option_3"
} -OnChange {
    Sync-UDElement -Id "dynamic_select_subDropdown"
}

New-UDDynamic -Id "dynamic_select_subDropdown" -Content {
    $mainDropDownElement = (Get-UDElement -Id "select_mainDropDown").Value
    if(-not $mainDropDownElement) {
        $disabled = $true
    } else {
        $disabled = $false
    }
    New-UDSelect -id "select_subDropDown" -Label "Sub dropdown" -Option {
        if($mainDropDownElement) {
            $dropdownLookup.$mainDropDownElement.GetEnumerator() | ForEach-Object {
                New-UDSelectOption -Name $_.Key -Value $_.Value
            }
        }
    } -Disabled:$disabled
}

1 Like

Thanks Ms-Marox, this has been really helpful. I also managed to getting working using the following:
New-UDApp -Content {

$ClassType = @("Select Role", "Beginner", "Intermediate","Advance")

$beginners = @("Select Role", "B1", "B2","B3")

$intermediates = @("Select Role", "I1", "I2", "I3")

$advanced = @("Select Role", "A1", "A2", "A3")

$cources = @("Select Class")


New-UDSelect -Label 'Class' -Id 'selectClass' -DefaultValue $Classtype\[0\] -Option {

    foreach ($class in $classtype) {

        New-UDSelectOption -Name $class -Value $class

    }

} -OnChange {

    if ($Eventdata -eq "Beginner") {

        $cources = $beginners

        Clear-UDElement -Id 'addElement1'

        Add-UDElement -ParentId 'addElement1' -Content {

            New-UDSelect -Label 'beginners' -Id 'selectbeginners' -DefaultValue $cources\[0\] -Option {

                foreach ($cource in $cources) {

                    New-UDSelectOption -Name $cource -Value $cource

                }

            } -OnChange {

                Show-UDSnackbar -Message $EventData

            }

        }

    } elseif ($Eventdata -eq "Intermediate") {

        $cources = $Intermediates

        Clear-UDElement -Id 'addElement1'

        Add-UDElement -ParentId 'addElement1' -Content {

            New-UDSelect -Label 'intermediates' -Id 'selectIntermediates' -DefaultValue $cources\[0\] -Option {

                foreach ($cource in $cources) {

                    New-UDSelectOption -Name $cource -Value $cource

                }

            } -OnChange {

                Show-UDSnackbar -Message $EventData

            }

        }

    }

    else {

        \# Remove-UDElement -Id 'removeElement1'

        $cources = $advanced

        Clear-UDElement -Id 'addElement1'

        Add-UDElement -ParentId 'addElement1' -Content {

            New-UDSelect -Label 'Advanced' -Id 'selectadvanced' -DefaultValue $cources\[0\] -Option {

                foreach ($cource in $cources) {

                    New-UDSelectOption -Name $cource -Value $cource

                }

            } -OnChange {

                Show-UDSnackbar -Message $EventData

            }

        }

    }

}



New-UDElement -Tag 'div' -Id 'addElement1' -Content {}

New-UDSelect -Label '$Floors' -Id 'selectFloors' -DefaultValue $Floors\[0\] -Option {

    foreach ($Floor in $Floors) {

        New-UDSelectOption -Name $Floor -Value $Floor

    }

} -OnChange {

    Show-UDSnackbar -Message $EventData

}

}

1 Like

Thanks Dynamic, I managed to work out another way of doing this, but I going to try out yourself and Ms-Marox solution as well

1 Like