feat: show aspects and shipping in saved listings detail panel

Adds postage/shipping-cost display, item specifics (aspects) panel, and
Relist button stub to the SavedListingsView detail panel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Peter Foster
2026-04-15 09:55:30 +01:00
parent 40c62dbf34
commit 18bd3b910f
2 changed files with 72 additions and 0 deletions

View File

@@ -305,6 +305,26 @@
</TextBlock.Inlines>
</TextBlock>
<!-- Postage + shipping cost -->
<TextBlock x:Name="DetailPostage"
FontSize="12" Margin="0,4,0,0"
Foreground="{DynamicResource MahApps.Brushes.Gray3}"
Visibility="Collapsed"/>
<!-- Item specifics (aspects) -->
<Border x:Name="DetailAspectsPanel" Visibility="Collapsed"
Margin="0,8,0,0" Padding="8,6" CornerRadius="3"
BorderBrush="{DynamicResource MahApps.Brushes.Gray7}" BorderThickness="1">
<StackPanel>
<TextBlock Text="Item Specifics" FontSize="11" FontWeight="SemiBold"
Foreground="{DynamicResource MahApps.Brushes.Gray4}"
Margin="0,0,0,4"/>
<TextBlock x:Name="DetailAspectsText"
FontSize="11" TextWrapping="Wrap"
Foreground="{DynamicResource MahApps.Brushes.Gray3}"/>
</StackPanel>
</Border>
<!-- Description -->
<TextBlock Text="DESCRIPTION" Style="{StaticResource DetailLabel}"/>
<Border BorderThickness="1" CornerRadius="4" Padding="10,8"
@@ -371,6 +391,12 @@
</StackPanel>
</Button.Content>
</Button>
<Button x:Name="RelistBtn"
Content="Relist on eBay"
Click="RelistBtn_Click"
Margin="0,0,8,6"
Style="{DynamicResource MahApps.Styles.Button.Square.Accent}"
Height="34" Padding="14,0" FontSize="12"/>
</WrapPanel>
</StackPanel>

View File

@@ -1,3 +1,4 @@
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
@@ -16,6 +17,8 @@ public partial class SavedListingsView : UserControl
private PriceLookupService? _priceLookup;
private SavedListing? _selected;
public event Action<SavedListing>? RelistRequested;
// Edit mode working state
private List<string> _editPhotoPaths = new();
private List<string> _pendingDeletes = new();
@@ -286,6 +289,42 @@ public partial class SavedListingsView : UserControl
DetailConditionRow.Visibility = Visibility.Collapsed;
}
// Postage + shipping
if (listing.Postage == PostageOption.FreePostage)
{
DetailPostage.Text = "Postage: Free";
DetailPostage.Visibility = Visibility.Visible;
}
else if (listing.Postage == PostageOption.CollectionOnly)
{
DetailPostage.Text = "Postage: Collection Only";
DetailPostage.Visibility = Visibility.Visible;
}
else if (listing.ShippingCost > 0)
{
var label = listing.Postage.ToString()
.Replace("RoyalMail", "Royal Mail ")
.Replace("Tracked", "Tracked ");
DetailPostage.Text = $"Postage: {label} — £{listing.ShippingCost:F2}";
DetailPostage.Visibility = Visibility.Visible;
}
else
{
DetailPostage.Visibility = Visibility.Collapsed;
}
// Aspects
if (listing.Aspects.Count > 0)
{
DetailAspectsText.Text = string.Join(" • ",
listing.Aspects.Select(kv => $"{kv.Key}: {kv.Value}"));
DetailAspectsPanel.Visibility = Visibility.Visible;
}
else
{
DetailAspectsPanel.Visibility = Visibility.Collapsed;
}
// Photos strip
DetailPhotosPanel.Children.Clear();
foreach (var path in listing.PhotoPaths)
@@ -339,6 +378,8 @@ public partial class SavedListingsView : UserControl
EmptyDetail.Visibility = Visibility.Visible;
DetailPanel.Visibility = Visibility.Collapsed;
DetailPanel.Opacity = 0;
DetailPostage.Visibility = Visibility.Collapsed;
DetailAspectsPanel.Visibility = Visibility.Collapsed;
}
private static void OpenImage(string path)
@@ -762,4 +803,9 @@ public partial class SavedListingsView : UserControl
ClearDetail();
RefreshList();
}
private void RelistBtn_Click(object sender, RoutedEventArgs e)
{
// TODO: implement in Task 5
}
}