Scripts/New-UDCalendar.ps1

<#
.SYNOPSIS
    Calendar component.
.DESCRIPTION
    Allows to show a calendar, with both "onClickDay" and "onChange" events. Also supports Get-UDElement, and the easy mode Get-UDCalElement which retuns a preformatted DateTime object.
.PARAMETER Id
    An id for the component default value will be generated by new-guid.
.EXAMPLE
    PS C:\> <example usage>
    Explanation of what the example does
.INPUTS
    Inputs (if any)
.OUTPUTS
    Output (if any)
.NOTES
    General notes
#>

function New-UDCalendar {
    param(
        [Parameter()]
        [string]$Id = ([Guid]::NewGuid()),
        [Parameter()]
        [object]$OnClickDay,
        [Parameter()]
        [object]$OnChange,
        [Parameter()]
        [DateTime]$StartView = (Get-Date)
    )

    End {
        $activeOnChange = "false"
        $activeOnClickDay = "false"

        if ($null -ne $OnChange) {
            if ($OnChange -is [scriptblock]) {
                $OnChange = New-UDEndpoint -Endpoint $OnChange -Id ($Id + "onChange")
            }
            elseif ($onChange -isnot [UniversalDashboard.Models.Endpoint]) {
                throw "OnChange must be a script block or UDEndpoint."
            }
            $activeOnChange = "true"
        }
        if ($null -ne $OnClickDay) {
            if ($OnClickDay -is [scriptblock]) {
                $OnClickDay = New-UDEndpoint -Endpoint $OnClickDay -Id ($Id + "onClickDay")
            }
            elseif ($OnClickDay -isnot [UniversalDashboard.Models.Endpoint]) {
                throw "OnClickDay must be a script block or UDEndpoint."
            }
            $activeOnClickDay = "true"
        }

        @{
            # The AssetID of the main JS File
            assetId = $AssetId 
            # Tell UD this is a plugin
            isPlugin = $true 
            # This ID must be the same as the one used in the JavaScript to register the control with UD
            type = "ud-calendar"
            # An ID is mandatory
            id = $Id
            activeOnChange = $activeOnChange
            $activeOnClickDay = $activeOnClickDay

            # This is where you can put any other properties. They are passed to the React control's props
            # The keys are case-sensitive in JS.
            StartView = $StartView.GetDateTimeFormats("o")
        }

    }
}