Private/UDElements/Systems/UDElement-system_lastContact.ps1

function UDElement-system_lastContact
{
    param (
        $refreshInterval,
        $lastContactDays,
        $unDrawColor
    )


    New-UDElement -Tag "system_lastContact" -Id "system_lastContact" -RefreshInterval $refreshInterval -AutoRefresh -Content {

        $VerticalBarChartOptions = @{
            legend = @{
                display = $false
            }
            scales = @{
                yAxes = @(
                    @{
                        ticks      = @{
                            beginAtZero = $true
                        }
                        scaleLabel = @{
                            display     = $true
                            labelString = "Number of Systems"
                        }
                    }
                )
            }
        }

        $LastContactCount = $Cache:DisplaySystems | Select-Object -Property lastContact | Measure-Object | Select-Object -ExpandProperty "Count"
        $Script:LastContactColors = Get-AlternatingColors -Rows:("$LastContactCount") -Color1:('#006cac') -Color2:('#2cc692')
        New-UDChart -Title "Last Contact Date" -Type Bar -AutoRefresh -RefreshInterval $refreshInterval -Endpoint {
            try
            {
                $Cache:DisplaySystems | Select-Object -Property lastContact | ForEach-Object {
                    [PSCustomObject]@{
                        LastContactDate = (Get-Date($_.lastContact)).ToString("yyyy-MM-dd")
                    }
                } | Group-Object -Property LastContactDate | Select-Object Name, Count | Out-UDChartData -LabelProperty "Name" -DataProperty "Count" -BackgroundColor $LastContactColors -HoverBackgroundColor $LastContactColors
            }
            catch
            {
                0 | Out-UDChartData -DataProperty "Count" -LabelProperty "Name"
            }
        } -Options $VerticalBarChartOptions -OnClick {
            $TabNames = $Cache:DisplaySystems | Select-Object -Property lastContact | ForEach-Object {
                [PSCustomObject]@{
                    LastContactDate = (Get-Date($_.lastContact)).ToString("yyyy-MM-dd")
                }
            } | Group-Object -Property LastContactDate | Select-Object Name
            Show-UDModal -Content {
                New-UDTabContainer -Tabs {
                    foreach ($TabName in $TabNames)
                    {
                        New-UDTab -Text $TabName.Name -Content {
                            $script:LastContact = $TabName.Name
                            New-UDGrid -Header @("Hostname", "Operating System", "Last Contact Date", "System ID") -Properties @("Hostname", "OS", "LastContactDate", "SystemID") -Endpoint {
                                $Cache:DisplaySystems | Where-Object { (Get-Date($_.lastContact)).ToString("yyyy-MM-dd") -like $LastContact } | ForEach-Object {
                                    [PSCustomObject]@{
                                        Hostname        = $_.hostname;
                                        OS              = $_.os + " " + $_.version;
                                        LastContactDate = (Get-Date($_.lastContact)).ToString("yyyy-MM-dd");
                                        SystemID        = $_._id;
                                    }
                                } | Out-UDGridData
                            }
                        }
                    }
                }
            }
        }
    }
}