Demo contacts page.

This commit is contained in:
Burak Kaan Köse
2025-10-29 19:35:04 +01:00
parent 3db1fd0dde
commit b0ac6e4e55
25 changed files with 970 additions and 16 deletions
@@ -0,0 +1,98 @@
<ContentDialog
x:Class="Wino.Dialogs.ContactEditDialog"
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:domain="using:Wino.Core.Domain"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="Edit Contact"
HorizontalContentAlignment="Stretch"
DefaultButton="Primary"
IsPrimaryButtonEnabled="True"
PrimaryButtonClick="SaveClicked"
PrimaryButtonText="Save"
SecondaryButtonClick="CancelClicked"
SecondaryButtonText="Cancel"
Style="{StaticResource WinoDialogStyle}"
mc:Ignorable="d">
<ContentDialog.Resources>
<x:Double x:Key="ContentDialogMaxWidth">400</x:Double>
</ContentDialog.Resources>
<StackPanel Spacing="16">
<!-- Contact Name -->
<TextBox
x:Name="ContactNameTextBox"
Header="Name"
PlaceholderText="Contact name"
TextChanged="ValidateInput" />
<!-- Email Address -->
<TextBox
x:Name="EmailAddressTextBox"
Header="Email Address"
PlaceholderText="contact@example.com"
TextChanged="ValidateInput" />
<!-- Contact Photo -->
<StackPanel>
<TextBlock
Margin="0,0,0,8"
FontWeight="SemiBold"
Text="Photo" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<PersonPicture
x:Name="ContactPhotoPersonPicture"
Grid.Column="0"
Width="64"
Height="64"
Margin="0,0,16,0" />
<StackPanel
Grid.Column="1"
VerticalAlignment="Center"
Spacing="8">
<Button
x:Name="ChoosePhotoButton"
Click="ChoosePhotoClicked"
Content="Choose Photo" />
<Button
x:Name="RemovePhotoButton"
Click="RemovePhotoClicked"
Content="Remove Photo" />
</StackPanel>
</Grid>
</StackPanel>
<!-- Contact Status Info -->
<Border
x:Name="RootContactInfoBorder"
Padding="12,8"
Background="{ThemeResource AccentFillColorDefaultBrush}"
CornerRadius="4"
Visibility="Collapsed">
<TextBlock
Foreground="{ThemeResource TextOnAccentFillColorPrimaryBrush}"
Text="This is a root contact and cannot be deleted."
TextWrapping="Wrap" />
</Border>
<Border
x:Name="OverriddenContactInfoBorder"
Padding="12,8"
Background="{ThemeResource SystemFillColorCautionBrush}"
CornerRadius="4"
Visibility="Collapsed">
<TextBlock
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
Text="This contact has been manually modified."
TextWrapping="Wrap" />
</Border>
</StackPanel>
</ContentDialog>
@@ -0,0 +1,97 @@
using System;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Interfaces;
namespace Wino.Dialogs;
public sealed partial class ContactEditDialog : ContentDialog
{
private AccountContact _contact;
private IDialogServiceBase? _dialogService;
public AccountContact Contact => _contact;
public ContactEditDialog(AccountContact? contact = null, IDialogServiceBase? dialogService = null)
{
InitializeComponent();
_contact = contact ?? new AccountContact();
_dialogService = dialogService;
LoadContactData();
ValidateInput();
}
private void LoadContactData()
{
if (_contact != null)
{
ContactNameTextBox.Text = _contact.Name ?? string.Empty;
EmailAddressTextBox.Text = _contact.Address ?? string.Empty;
// Show info badges
if (_contact.IsRootContact)
{
RootContactInfoBorder.Visibility = Visibility.Visible;
}
if (_contact.IsOverridden)
{
OverriddenContactInfoBorder.Visibility = Visibility.Visible;
}
}
}
private void ChoosePhotoClicked(object sender, RoutedEventArgs e)
{
// TODO: Implement photo picker
}
private void RemovePhotoClicked(object sender, RoutedEventArgs e)
{
ContactPhotoPersonPicture.ProfilePicture = null;
RemovePhotoButton.Visibility = Visibility.Collapsed;
}
private void ValidateInput(object? sender = null, TextChangedEventArgs? e = null)
{
var hasName = !string.IsNullOrWhiteSpace(ContactNameTextBox.Text);
var hasEmail = !string.IsNullOrWhiteSpace(EmailAddressTextBox.Text);
var isValidEmail = hasEmail && IsValidEmail(EmailAddressTextBox.Text);
IsPrimaryButtonEnabled = hasName && isValidEmail;
}
private bool IsValidEmail(string email)
{
try
{
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch
{
return false;
}
}
private void SaveClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
// Update contact data
_contact.Name = ContactNameTextBox.Text?.Trim();
_contact.Address = EmailAddressTextBox.Text?.Trim();
// Mark as overridden if this was a user edit
if (!string.IsNullOrEmpty(_contact.Address))
{
_contact.IsOverridden = true;
}
}
private void CancelClicked(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
// Nothing to do, dialog will close
}
}