Files
dashcaddy/desktop/AddServiceDialog.xaml
T
Hermes 86e4c9fc81 wip: Windows desktop app scaffold (WinUI 3/.NET 8) + NSIS installer + docs
Owner decision pending (STATE.md DC-100 tick): adopt/ship/park.
Preserved from fragile git stash to named branch 2026-08-23.
NOTE: requires a Windows build machine (WinUI XAML compiler + MSIX do not
cross-build on Linux) — see WINDOWS_APP_BUILD.md in this tree.
Secret-scanned clean 2026-08-23 (no keys/tokens/PEM in tree).
2026-08-22 23:50:34 -07:00

83 lines
5.4 KiB
XML

<ContentDialog
x:Class="DashCaddy.Desktop.AddServiceDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:DashCaddy.Desktop.ViewModels"
mc:Ignorable="d"
Title="Add New Service"
PrimaryButtonText="Create"
CloseButtonText="Cancel"
DefaultButton="Primary"
Width="500">
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="500">
<StackPanel Spacing="16" Margin="8">
<!-- Service Type Selection -->
<StackPanel Spacing="8">
<TextBlock Text="How would you like to add this service?" FontWeight="SemiBold" />
<RadioButtons x:Name="AddMethodRadio" SelectedIndex="0" SelectionChanged="AddMethod_SelectionChanged">
<RadioButton Content="From Template (Plex, Home Assistant, etc.)" Tag="template" />
<RadioButton Content="Import Docker Compose File" Tag="compose" />
<RadioButton Content="Custom Service (Manual)" Tag="custom" />
</RadioButtons>
</StackPanel>
<!-- Template Selection -->
<StackPanel x:Name="TemplatePanel" Spacing="12" Visibility="Visible">
<TextBlock Text="Select Template" FontWeight="SemiBold" />
<ComboBox x:Name="TemplateCombo" ItemsSource="{x:Bind ViewModel.Templates}"
DisplayMemberPath="Name" Style="{StaticResource ComboBoxStyle}"
SelectionChanged="TemplateCombo_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:ServiceTemplate">
<StackPanel Orientation="Horizontal" Spacing="12">
<TextBlock Text="{x:Bind Icon}" FontSize="20" />
<StackPanel>
<TextBlock Text="{x:Bind Name}" FontWeight="Medium" />
<TextBlock Text="{x:Bind Description}" FontSize="12" Foreground="{ThemeResource SystemControlForegroundBaseMediumBrush}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<!-- Template Variables -->
<StackPanel x:Name="VariablesPanel" Spacing="12" Visibility="Collapsed">
<TextBlock Text="Configuration" FontWeight="SemiBold" />
<ItemsControl x:Name="VariablesList" ItemsSource="{x:Bind ViewModel.TemplateVariables}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Spacing="4" Margin="0,4">
<TextBlock Text="{Binding Key}" FontWeight="Medium" />
<TextBox Text="{Binding Value, Mode=TwoWay}" Style="{StaticResource InputFieldStyle}"
PlaceholderText="{Binding Placeholder}" />
<TextBlock Text="{Binding Description}" FontSize="11" Foreground="{ThemeResource SystemControlForegroundBaseMediumBrush}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</StackPanel>
<!-- Compose Import -->
<StackPanel x:Name="ComposePanel" Spacing="12" Visibility="Collapsed">
<TextBlock Text="Docker Compose File" FontWeight="SemiBold" />
<Button Content="Select docker-compose.yml" Click="BrowseCompose_Click" Style="{StaticResource AccentButtonStyle}" />
<TextBlock x:Name="ComposePathText" Text="No file selected" FontSize="12" Foreground="{ThemeResource SystemControlForegroundBaseMediumBrush}" />
</StackPanel>
<!-- Custom Service -->
<StackPanel x:Name="CustomPanel" Spacing="12" Visibility="Collapsed">
<TextBlock Text="Service Details" FontWeight="SemiBold" />
<TextBox x:Name="CustomName" Header="Service Name" PlaceholderText="My Service" Style="{StaticResource InputFieldStyle}" />
<TextBox x:Name="CustomImage" Header="Docker Image" PlaceholderText="nginx:latest" Style="{StaticResource InputFieldStyle}" />
<TextBox x:Name="CustomPort" Header="Port" PlaceholderText="80" Style="{StaticResource InputFieldStyle}" />
<TextBox x:Name="CustomDomain" Header="Domain (optional)" PlaceholderText="service.example.com" Style="{StaticResource InputFieldStyle}" />
<TextBox x:Name="CustomVolumes" Header="Volumes (one per line)" PlaceholderText="E:/data:/data&#x0a;E:/config:/config" Style="{StaticResource InputFieldStyle}" MinHeight="80" AcceptsReturn="True" />
<TextBox x:Name="CustomEnv" Header="Environment Variables (KEY=value, one per line)" PlaceholderText="TZ=America/Los_Angeles&#x0a;DEBUG=true" Style="{StaticResource InputFieldStyle}" MinHeight="80" AcceptsReturn="True" />
</StackPanel>
</StackPanel>
</ScrollViewer>
</ContentDialog>