Private/ArgumentCompleters.ps1
# Tab completers $budget = @{ CommandName = $paramsByFunction.Where{$_.Parameter -contains 'Budget'}.Function Parameter = 'Budget' ScriptBlock = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) # Get the token value from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Token) { $token = $fakeBoundParameter.Token } elseif ($global:PSDefaultParameterValues["${commandName}:Token"]) { $token = $global:PSDefaultParameterValues["${commandName}:Token"] } else { return } # Get a list of all budgets $budgets = [Array](Get-YnabBudget -Token $token -ListAll | Sort-Object Name) # Trim quotes from the $wordToComplete $wordMatch = $wordToComplete.Trim("`"`'") # Add a CompletionResult for each budget name matching wordToComplete $budgets.Where{$_.Budget -like "*$wordMatch*"}.ForEach{ New-Object System.Management.Automation.CompletionResult ( "`"$($_.Budget)`"", $_.Budget, 'ParameterValue', $_.Budget ) } } } $account = @{ CommandName = $paramsByFunction.Where{$_.Parameter -contains 'Account'}.Function Parameter = 'Account' ScriptBlock = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) # Get the token value from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Token) { $token = $fakeBoundParameter.Token } elseif ($global:PSDefaultParameterValues["${commandName}:Token"]) { $token = $global:PSDefaultParameterValues["${commandName}:Token"] } else { return } # Get the budget name from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Budget) { $budget = $fakeBoundParameter.Budget } elseif ($global:PSDefaultParameterValues["${commandName}:Budget"]) { $budget = $global:PSDefaultParameterValues["${commandName}:Budget"] } else { return } # Get a list of all accounts $accounts = [Array](Get-YnabAccount -Budget $budget -Token $token | Sort-Object Name) # Trim quotes from the $wordToComplete $wordMatch = $wordToComplete.Trim("`"`'") # Add a CompletionResult for each budget name matching wordToComplete $accounts.Where{$_.Account -like "*$wordMatch*"}.ForEach{ New-Object System.Management.Automation.CompletionResult ( "`"$($_.Account)`"", $_.Account, 'ParameterValue', $_.Account ) } } } $category = @{ CommandName = $paramsByFunction.Where{$_.Parameter -contains 'Category'}.Function Parameter = 'Category' ScriptBlock = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) # Get the token value from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Token) { $token = $fakeBoundParameter.Token } elseif ($global:PSDefaultParameterValues["${commandName}:Token"]) { $token = $global:PSDefaultParameterValues["${commandName}:Token"] } else { return } # Get the budget name from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Budget) { $budget = $fakeBoundParameter.Budget } elseif ($global:PSDefaultParameterValues["${commandName}:Budget"]) { $budget = $global:PSDefaultParameterValues["${commandName}:Budget"] } else { return } # Get a list of all accounts $categories = [Array]((Get-YnabCategory -Budget $budget -Token $token).Categories | Sort-Object Category) # Trim quotes from the $wordToComplete $wordMatch = $wordToComplete.Trim("`"`'") # Add a CompletionResult for each budget name matching wordToComplete $categories.Where{$_.Category -like "*$wordMatch*"}.ForEach{ New-Object System.Management.Automation.CompletionResult ( "`"$($_.Category)`"", $_.Category, 'ParameterValue', $_.Category ) } } } $payee = @{ CommandName = $paramsByFunction.Where{$_.Parameter -contains 'Payee'}.Function Parameter = 'Payee' ScriptBlock = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) # Get the token value from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Token) { $token = $fakeBoundParameter.Token } elseif ($global:PSDefaultParameterValues["${commandName}:Token"]) { $token = $global:PSDefaultParameterValues["${commandName}:Token"] } else { return } # Get the budget name from the pipeline or PSDefaultParamterValues if ($fakeBoundParameter.Budget) { $budget = $fakeBoundParameter.Budget } elseif ($global:PSDefaultParameterValues["${commandName}:Budget"]) { $budget = $global:PSDefaultParameterValues["${commandName}:Budget"] } else { return } # Get a list of all accounts $payees = [Array]((Get-YnabPayee -Budget $budget -Token $token) | Sort-Object Payee) # Trim quotes from the $wordToComplete $wordMatch = $wordToComplete.Trim("`"`'") # Add a CompletionResult for each budget name matching wordToComplete $payees.Where{$_.Payee -like "*$wordMatch*"}.ForEach{ New-Object System.Management.Automation.CompletionResult ( "`"$($_.Payee)`"", $_.Payee, 'ParameterValue', $_.Payee ) } } } $preset = @{ CommandName = $paramsByFunction.Where{$_.Parameter -contains 'Preset'}.Function Parameter = 'Preset' ScriptBlock = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) # Get a list of all accounts $presets = [Array]((Get-YnabTransactionPreset).GetEnumerator() | Sort-Object Preset) # Trim quotes from the $wordToComplete $wordMatch = $wordToComplete.Trim("`"`'") # Add a CompletionResult for each budget name matching wordToComplete $presets.Where{$_.Name -like "*$wordMatch*"}.ForEach{ New-Object System.Management.Automation.CompletionResult ( "`"$($_.Name)`"", $_.Name, 'ParameterValue', $_.Name ) } } } # Register the Argument Completers Register-ArgumentCompleter @budget Register-ArgumentCompleter @account Register-ArgumentCompleter @category Register-ArgumentCompleter @payee Register-ArgumentCompleter @preset |