Public/Constructs/New-CardWizard.ps1
|
function New-CardWizard { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification = 'Variable used in underlying logic')] [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'None')] [OutputType([System.Collections.ArrayList])] param ( [Parameter(Mandatory = $true)] [object[]]$WizardPages, $NextButtonText = "Next", $BackButtonText = "Back", $FinishButtonText = "Finish", $CancelButtonText = "Cancel", [switch]$NoCancelButton, [switch]$NoBackButton ) $WizardResponse = [System.Collections.ArrayList]@() foreach ($page in $WizardPages) { #Enumerate pages to make navigation possible $CurrentPageIndex = $WizardPages.IndexOf($page) [void]($WizardResponse.Add(( New-CardContainer -Items { if ($page -is [scriptblock]) { Invoke-Command -ScriptBlock $page } elseif ($page -is [string]) { New-CardTextBlock -Text $page -Wrap } # Add the buttons to navigate between pages New-CardActionSet -Actions { if (-not $NoBackButton -and $CurrentPageIndex -gt 0) { New-CardActionToggleVisibility -Title $BackButtonText -TargetElements ("Page" + $CurrentPageIndex.ToString()), ("Page" + ($CurrentPageIndex - 1).ToString()) -Style "Default" } if ($CurrentPageIndex -lt ($WizardPages.Count - 1)) { New-CardActionToggleVisibility -Title $NextButtonText -TargetElements ("Page" + $CurrentPageIndex.ToString()), ("Page" + ($CurrentPageIndex + 1).ToString()) -Style "Positive" } else { New-CardActionSubmit -Title $FinishButtonText -Style "Positive" } if (-not $NoCancelButton) { New-CardActionSubmit -Title $CancelButtonText -Data @{ Action = "Cancel" } -Style "Destructive" } } } -Id ("Page" + ($CurrentPageIndex).ToString()) -Hidden:($CurrentPageIndex -ne 0)))) } if ($PSCmdlet.ShouldProcess("Creating Wizard with $($WizardPages.Count) pages")) { return $WizardResponse } } |