Private/Console/KeySelector.ps1

function KeySelector {
    param(
        [Parameter(Mandatory=$false)]
        [string]$keyName
    )
    Unlock-Platform
    if(-not [System.String]::IsNullOrEmpty($keyName)) {
        return Request-Key -vaultKey $keyName
    }

    $sufix_ = $script:sufix
    $keys = Get-VaultKeys -sufix $sufix_
    if(($null -eq $keys) -or ($keys.Count -eq 0)) {
        Write-Host "No keys found in the vault. Please add a new key." -ForegroundColor Yellow
        $tempKey =Request-NewKey -sufix $sufix_
        if($tempKey) {
            Clear-Console -LinesToClear 1
            return $tempKey 
        }

        Clear-Console -LinesToClear 1
        $keys = Get-VaultKeys -sufix $sufix_
    }

    Write-Host "Select the JumpCloud Api Key. Press [Escape] to type a new key. Press [Backspace] to remove the selected key" -ForegroundColor Green
    # Stays in selection loop until user selects a key or abort.
    while (@($false, $null) -contains ($vaultKey = Find-Interactive -choices $keys -Callback {
        param($param)
        return Confirm-Console -Message "Selected key: $param. Are you sure want to remove this key from vault?" -YesAction { Remove-FromVault -Key $param }
    })) {
        $keys = Get-VaultKeys -sufix $sufix_
        if (($null -eq $vaultKey) -or ($null -eq $keys) -or ($keys.Count -eq 0)) {
            $linesToClear = 0
            if ($keys.Count -eq 0) {
                Write-Host "No keys found in vault. Please add a new key." -ForegroundColor Yellow
                $linesToClear += 1
            } else {
                $linesToClear = $keys.Count
            }
            $tempKey =Request-NewKey -sufix $sufix_
            if($tempKey) {
                Clear-Console -LinesToClear ($linesToClear + 1)
                return $tempKey 
            }

            # Lines are cleared after, because the user can see the names of already existing keys
            Clear-Console -LinesToClear $linesToClear
        }
        $keys = Get-VaultKeys -sufix $sufix_
    }

    # $vaultKey is being declared above as the output of Find-Interactive, so it will be available here for
    $foundKey = Request-Key -vaultKey $vaultKey

    Clear-Console -LinesToClear 1
    return $foundKey
}