dashboards/HerdManager/pages/Farms.ps1
|
$farmsPage = New-UDPage -Name "Farms" -Content { $dbPath = $script:DatabasePath New-UDTypography -Text "🚜 Farm Management" -Variant h4 -Style $HerdStyles.Typography.PageTitle # Add New Farm Section New-UDCard -Title "Add New Farm" -Style $HerdStyles.Card.Default -Content { New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 12 -MediumSize 6 -Content { New-UDTextbox -Id 'new-farm-name' -Label 'Farm Name *' -FullWidth } New-UDGrid -Item -ExtraSmallSize 12 -MediumSize 6 -Content { New-UDTextbox -Id 'new-farm-contact' -Label 'Contact Person' -FullWidth } } New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 12 -Content { New-UDTextbox -Id 'new-farm-address' -Label 'Street Address' -FullWidth } } New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 12 -MediumSize 4 -Content { New-UDTextbox -Id 'new-farm-city' -Label 'City' -FullWidth } New-UDGrid -Item -ExtraSmallSize 6 -MediumSize 4 -Content { New-UDTextbox -Id 'new-farm-state' -Label 'State' -FullWidth } New-UDGrid -Item -ExtraSmallSize 6 -MediumSize 4 -Content { New-UDTextbox -Id 'new-farm-zip' -Label 'Zip Code' -FullWidth } } New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 12 -MediumSize 6 -Content { New-UDTextbox -Id 'new-farm-phone' -Label 'Phone Number' -FullWidth } New-UDGrid -Item -ExtraSmallSize 12 -MediumSize 6 -Content { New-UDTextbox -Id 'new-farm-email' -Label 'Email Address' -FullWidth } } New-UDTextbox -Id 'new-farm-notes' -Label 'Notes' -Multiline -Rows 3 -FullWidth New-UDElement -Tag 'br' New-UDCheckbox -Id 'new-farm-is-origin' -Label 'This farm is a cattle origin (can be selected when adding cattle)' New-UDElement -Tag 'br' New-UDButton -Text "➕ Add Farm" -Variant contained -FullWidth -Style @{ backgroundColor = '#2e7d32' color = 'white' marginTop = '10px' } -OnClick { $farmName = (Get-UDElement -Id 'new-farm-name').value $contactPerson = (Get-UDElement -Id 'new-farm-contact').value $address = (Get-UDElement -Id 'new-farm-address').value $city = (Get-UDElement -Id 'new-farm-city').value $state = (Get-UDElement -Id 'new-farm-state').value $zip = (Get-UDElement -Id 'new-farm-zip').value $phone = (Get-UDElement -Id 'new-farm-phone').value $email = (Get-UDElement -Id 'new-farm-email').value $notes = (Get-UDElement -Id 'new-farm-notes').value $isOrigin = [Boolean]::Parse($(Get-UDElement -Id 'new-farm-is-origin').checked) if (-not $farmName) { Show-UDToast -Message "Farm name is required" -MessageColor red return } # Ensure we don't emit stray values to the pipeline and only # include the IsOrigin switch when checked. Passing a raw # boolean or text into a switch parameter via splatting can # sometimes produce unexpected parsing behavior when the # scriptblock is serialized by the dashboard engine. try { $farmParams = @{ FarmName = $farmName ContactPerson = $contactPerson Address = $address City = $city State = $state ZipCode = $zip PhoneNumber = $phone Email = $email Notes = $notes # IsOrigin will be added below only when true } if ($isOrigin -eq $true) { # Add switch key only when checked so Add-Farm receives # the switch as a SwitchParameter object (so .IsPresent # is available inside the function). $farmParams['IsOrigin'] = [System.Management.Automation.SwitchParameter]::new($true) } Add-Farm @farmParams Show-UDToast -Message "Farm added successfully!" -MessageColor green # Clear form Set-UDElement -Id 'new-farm-name' -Properties @{value = '' } Set-UDElement -Id 'new-farm-contact' -Properties @{value = '' } Set-UDElement -Id 'new-farm-address' -Properties @{value = '' } Set-UDElement -Id 'new-farm-city' -Properties @{value = '' } Set-UDElement -Id 'new-farm-state' -Properties @{value = '' } Set-UDElement -Id 'new-farm-zip' -Properties @{value = '' } Set-UDElement -Id 'new-farm-phone' -Properties @{value = '' } Set-UDElement -Id 'new-farm-email' -Properties @{value = '' } Set-UDElement -Id 'new-farm-notes' -Properties @{value = '' } Sync-UDElement -Id 'farms-table' } catch { Show-UDToast -Message "Error adding farm: $($_.Exception.Message)" -MessageColor red } } } # Farms Table New-UDCard -Title "All Farms" -Content { New-UDDynamic -Id 'farms-table' -Content { $farms = Get-Farm -All if (-not $farms) { New-UDTypography -Text "No farms found. Add your first farm above!" -Variant body2 -Style @{ color = '#666' textAlign = 'center' marginTop = '20px' } } else { New-UDTable -Data $farms -Columns @( New-UDTableColumn -Property FarmName -Title "Farm Name" -ShowSort New-UDTableColumn -Property ContactPerson -Title "Contact" -ShowSort New-UDTableColumn -Property City -Title "City" -ShowSort New-UDTableColumn -Property State -Title "State" -ShowSort New-UDTableColumn -Property PhoneNumber -Title "Phone" -ShowSort New-UDTableColumn -Property Email -Title "Email" -ShowSort New-UDTableColumn -Property IsOrigin -Title "Is Origin" -Render { if ($EventData.IsOrigin -eq 1) { New-UDChip -Label "Origin" -Size small -Style @{backgroundColor = '#2196f3'; color = 'white' } } else { New-UDChip -Label "-" -Size small -Style @{backgroundColor = '#e0e0e0'; color = '#666' } } } New-UDTableColumn -Property IsActive -Title "Active" -Render { if ($EventData.IsActive -eq 1) { New-UDChip -Label "Active" -Size small -Style @{backgroundColor = '#4caf50'; color = 'white' } } else { New-UDChip -Label "Inactive" -Size small -Style @{backgroundColor = '#9e9e9e'; color = 'white' } } } New-UDTableColumn -Property Actions -Title "Actions" -Render { New-UDButton -Text "✏️ Edit" -Size small -Variant text -OnClick { $farm = $EventData Show-UDModal -Content { New-UDTypography -Text "Edit Farm: $($farm.FarmName)" -Variant h5 -Style @{ color = '#2e7d32' marginBottom = '20px' } New-UDTextbox -Id 'edit-farm-name' -Label 'Farm Name' -Value $farm.FarmName -FullWidth New-UDElement -Tag 'br' New-UDTextbox -Id 'edit-farm-contact' -Label 'Contact Person' -Value $farm.ContactPerson -FullWidth New-UDElement -Tag 'br' New-UDTextbox -Id 'edit-farm-address' -Label 'Street Address' -Value $farm.Address -FullWidth New-UDElement -Tag 'br' New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 4 -Content { New-UDTextbox -Id 'edit-farm-city' -Label 'City' -Value $farm.City -FullWidth } New-UDGrid -Item -ExtraSmallSize 4 -Content { New-UDTextbox -Id 'edit-farm-state' -Label 'State' -Value $farm.State -FullWidth } New-UDGrid -Item -ExtraSmallSize 4 -Content { New-UDTextbox -Id 'edit-farm-zip' -Label 'Zip' -Value $farm.ZipCode -FullWidth } } New-UDTextbox -Id 'edit-farm-phone' -Label 'Phone' -Value $farm.PhoneNumber -FullWidth New-UDElement -Tag 'br' New-UDTextbox -Id 'edit-farm-email' -Label 'Email' -Value $farm.Email -FullWidth New-UDElement -Tag 'br' New-UDTextbox -Id 'edit-farm-notes' -Label 'Notes' -Value $farm.Notes -Multiline -Rows 3 -FullWidth New-UDElement -Tag 'br' New-UDCheckbox -Id 'edit-farm-is-origin' -Label 'This farm is a cattle origin' -Checked ($farm.IsOrigin -eq 1) New-UDElement -Tag 'br' New-UDCheckbox -Id 'edit-farm-active' -Label 'Active' -Checked ($farm.IsActive -eq 1) } -Footer { New-UDButton -Text "Cancel" -OnClick { Hide-UDModal } New-UDButton -Text "Save Changes" -Variant contained -Style @{backgroundColor = '#2e7d32'; color = 'white' } -OnClick { $farmName = (Get-UDElement -Id 'edit-farm-name').value $contactPerson = (Get-UDElement -Id 'edit-farm-contact').value $address = (Get-UDElement -Id 'edit-farm-address').value $city = (Get-UDElement -Id 'edit-farm-city').value $state = (Get-UDElement -Id 'edit-farm-state').value $zip = (Get-UDElement -Id 'edit-farm-zip').value $phone = (Get-UDElement -Id 'edit-farm-phone').value $email = (Get-UDElement -Id 'edit-farm-email').value $notes = (Get-UDElement -Id 'edit-farm-notes').value $isOrigin = $(if ((Get-UDElement -Id 'edit-farm-is-origin').checked) { 1 } else { 0 }) $isActive = $(if ((Get-UDElement -Id 'edit-farm-active').checked) { 1 } else { 0 }) try { Update-Farm -FarmID $farm.FarmID -FarmName $farmName -ContactPerson $contactPerson ` -Address $address -City $city -State $state -ZipCode $zip ` -PhoneNumber $phone -Email $email -Notes $notes -IsOrigin $isOrigin -IsActive $isActive Show-UDToast -Message "Farm updated successfully!" -MessageColor green Hide-UDModal Sync-UDElement -Id 'farms-table' } catch { Show-UDToast -Message "Error updating farm: $($_.Exception.Message)" -MessageColor red } } } -FullWidth -MaxWidth 'md' } } ) -ShowPagination -PageSize 10 -ShowSearch -Dense } } } } -Url "/farms" -Icon (New-UDIcon -Icon 'Tractor') |