Private/UserInteraction/WriteConfirmation.ps1

function JsonMenu.UserInteraction.WriteConfirmation {
    <#
    .SYNOPSIS
        Write a choice to confirm or cancel an action
    .DESCRIPTION
        This function gives a user the choice to confirm or to cancel
        the action
    .EXAMPLE
        The input for the confirmation it this Json:
 
        "confirmation" : {
            "question": "Do you want to continue?",
            "continue": {
                "label": "&Yes",
                "help": "Click 'Y' to continue"
            },
            "cancel": {
                "label": "&No",
                "help": "Click 'N' to cancel"
            }
        }
 
 
    .INPUTS
        [PSObject] Confirmation
        [Bool] AddLineBreakBefore
    .OUTPUTS
        $true or $false
    .NOTES
        The AddLineBreakBefore is Boolean in stead of Switch on purpose
    #>

    [OutputType([Boolean])]
    param (
        [Parameter()]
        [PSObject]
        $Confirmation,
        [Parameter()]
        [Bool]
        $AddLineBreakBefore = $false
    )

    process {
        if ( $Confirmation ) {
            # Get question value
            if ( $Confirmation.Question ) {
                $question = $Confirmation.Question | JsonMenu.Functions.Expand
            }
            else {
                $question = $JsonMenu.Context.Settings.Confirmation.Question | JsonMenu.Functions.Expand
            }

            # Get confirmation label and help
            if ( $Confirmation.Continue ) {
                # defined inline
                # label
                if ( $Confirmation.Continue.Label ) {
                    $continueLabel = $Confirmation.Continue.Label | JsonMenu.Functions.Expand
                }
                else {
                    $continueLabel = $JsonMenu.Context.Settings.Confirmation.Continue.Label | JsonMenu.Functions.Expand
                }
                # help
                if ( $Confirmation.Continue.Help ) {
                    $continueHelp = $Confirmation.Continue.Help | JsonMenu.Functions.Expand
                }
                else {
                    $continueHelp = $JsonMenu.Context.Settings.Confirmation.Continue.Help | JsonMenu.Functions.Expand
                }
            }
            else {
                # defaults
                $continueLabel = $JsonMenu.Context.Settings.Confirmation.Continue.Label | JsonMenu.Functions.Expand
                $continueHelp = $JsonMenu.Context.Settings.Confirmation.Continue.Help | JsonMenu.Functions.Expand
            }

            # Get cancel label and help
            if ( $Confirmation.Cancel ) {
                # defined inline
                # label
                if ( $Confirmation.Cancel.Label ) {
                    $cancelLabel = $Confirmation.Cancel.Label | JsonMenu.Functions.Expand
                }
                else {
                    $cancelLabel = $JsonMenu.Context.Settings.Confirmation.Cancel.Label | JsonMenu.Functions.Expand
                }
                # help
                if ( $Confirmation.Cancel.Help ) {
                    $cancelHelp = $Confirmation.Cancel.Help | JsonMenu.Functions.Expand
                }
                else {
                    $cancelHelp = $JsonMenu.Context.Settings.Confirmation.Cancel.Help | JsonMenu.Functions.Expand
                }
            }
            else {
                $cancelLabel = $JsonMenu.Context.Settings.Confirmation.Cancel.Label
                $cancelHelp = $JsonMenu.Context.Settings.Confirmation.Cancel.Help
            }

            # setup choices
            $choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription]
            $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList $continueLabel, $continueHelp))
            $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList $cancelLabel, $cancelHelp))

            # handle linebreak
            if ( $AddLineBreakBefore ) {
                Write-Host " "
            }

            # prompt for choice and wait for user input
            $decision = $Host.UI.PromptForChoice($question, $null, $choices, -1)

            # return user input
            if ($decision -eq 0) {
                return $true
            }
            else {
                return $false
            }
        }
    }
}