521 lines
29 KiB
XML

<?xml version="1.0" encoding="utf-8" ?>
<controls:BaseContentPage
x:Class="gehGassiApp.Views.ProfileView"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:behaviors="clr-namespace:gehGassiApp.Behaviors"
xmlns:controls="clr-namespace:gehGassiApp.Controls"
xmlns:i="clr-namespace:gehGassiApp.Constants"
xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls"
xmlns:res="clr-namespace:gehGassiApp.Resources"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
ControlTemplate="{StaticResource MenuPageTemplate}">
<controls:BaseContentPage.TitleView>
<controls:ShellTitleViewNoLogoControl
Initials="{Binding CurrentAppUser.Initials}"
Photo="{Binding CurrentAppUser.Photo}"
ViewModel="{Binding .}" />
</controls:BaseContentPage.TitleView>
<ContentPage.Content>
<Grid>
<ScrollView
x:Name="rootScrollView"
Padding="20"
HorizontalOptions="Fill"
IsVisible="{Binding IsNotLoading}">
<VerticalStackLayout
x:Name="rootVerticalStackLayout"
SizeChanged="rootVerticalStackLayout_SizeChanged"
Spacing="0">
<Grid
Margin="{StaticResource MarginBig}"
ColumnDefinitions="*,150,*"
VerticalOptions="Start">
<Border
Grid.Row="0"
Grid.Column="0"
Margin="10,10,0,0"
Padding="2"
BackgroundColor="{StaticResource Primary_DarkBlue}"
HorizontalOptions="Start"
IsVisible="{Binding AppUser.Verified}"
Stroke="{StaticResource Primary_White}"
StrokeShape="RoundRectangle 50"
VerticalOptions="Start">
<Image HeightRequest="32">
<Image.Source>
<FontImageSource
FontFamily="IconMoon"
Glyph="{x:Static i:IconsMoon.Icon_Check}"
Color="{StaticResource Primary_White}" />
</Image.Source>
</Image>
</Border>
<controls:RoundImageControl
Grid.Column="1"
Margin="0,15,0,0"
BorderBackgroundColor="{StaticResource Primary_White}"
BorderHeight="120"
BorderOpacity="1"
BorderStroke="{StaticResource Primary_White}"
BorderStrokeShape="RoundRectangle 12"
BorderStrokeThickness="2"
BorderWidth="120"
CornerRadius="12"
HorizontalOptions="Center"
ImageHeight="120"
ImageOpacity="1"
ImageSource="{Binding AppUser.Photo, Converter={StaticResource MissingPhotoConverter}, ConverterParameter='Human'}"
ImageWidth="120"
VerticalOptions="Start" />
<Button
Grid.Column="1"
Padding="0"
Background="{StaticResource Primary_DarkBlue_Brush}"
BorderColor="{StaticResource Primary_DarkBlue}"
BorderWidth="2"
Command="{Binding ChoosePhotoOptionCommand}"
ContentLayout="Left, 0"
CornerRadius="20"
HeightRequest="40"
HorizontalOptions="End"
Text=""
VerticalOptions="Start"
WidthRequest="40">
<Button.ImageSource>
<FontImageSource
FontFamily="MaterialIconsRegular"
Glyph="photo_camera"
Size="20"
Color="{StaticResource Primary_White}" />
</Button.ImageSource>
</Button>
<Button
Grid.Column="1"
Padding="0"
Background="{StaticResource Primary_DarkBlue}"
BorderColor="{StaticResource Primary_DarkBlue}"
BorderWidth="2"
Command="{Binding RotateRightCommand}"
ContentLayout="Left, 0"
CornerRadius="20"
HeightRequest="40"
HorizontalOptions="Start"
IsVisible="{Binding IsNewPhoto}"
Text=""
VerticalOptions="Start"
WidthRequest="40">
<Button.ImageSource>
<FontImageSource
FontFamily="IconMoon"
Glyph="{x:Static i:IconsMoon.Icon_Rotate_CW}"
Size="20"
Color="{StaticResource Primary_White}" />
</Button.ImageSource>
</Button>
<Button
Grid.Column="1"
Margin="0,15,0,0"
Padding="0"
Background="{StaticResource Primary_DarkBlue}"
BorderColor="{StaticResource Primary_DarkBlue}"
BorderWidth="2"
Command="{Binding FlipVerticalCommand}"
ContentLayout="Left, 0"
CornerRadius="20"
HeightRequest="40"
HorizontalOptions="Start"
IsVisible="{Binding IsNewPhoto}"
Text=""
VerticalOptions="Center"
WidthRequest="40">
<Button.ImageSource>
<FontImageSource
FontFamily="IconMoon"
Glyph="{x:Static i:IconsMoon.Icon_Reflect}"
Size="20"
Color="{StaticResource Primary_White}" />
</Button.ImageSource>
</Button>
<Button
Grid.Column="1"
Margin="0,0,0,-15"
Padding="0"
Background="{StaticResource Primary_DarkBlue}"
BorderColor="{StaticResource Primary_DarkBlue}"
BorderWidth="2"
Command="{Binding RotateLeftCommand}"
ContentLayout="Left, 0"
CornerRadius="20"
HeightRequest="40"
HorizontalOptions="Start"
IsVisible="{Binding IsNewPhoto}"
Text=""
VerticalOptions="End"
WidthRequest="40">
<Button.ImageSource>
<FontImageSource
FontFamily="IconMoon"
Glyph="{x:Static i:IconsMoon.Icon_Rotate_CCW}"
Size="18"
Color="{StaticResource Primary_White}" />
</Button.ImageSource>
</Button>
</Grid>
<VerticalStackLayout
HorizontalOptions="Fill"
Spacing="0"
VerticalOptions="Start">
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Name_Question}" />
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="firstName"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_FirstName}"
Text="{Binding AppUser.FirstName, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="firstNameValidation"
Flags="ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="150"
MinimumLength="1" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="lastName"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_LastName}"
Text="{Binding AppUser.LastName, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="lastNameValidation"
Flags="ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="150"
MinimumLength="1" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Age_Question}" />
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<Grid>
<Entry
Keyboard="Default"
Placeholder="{Binding BirthdateFormat}"
Text="{Binding BirthDay}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
Flags="ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="10"
MinimumLength="0" />
<behaviors:DateValidationBehavior
x:Name="birthdayValidation"
Flags="ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaxDate="{Binding MaxDate}"
MinDate="01/01/1900" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
<Image HeightRequest="25" HorizontalOptions="End">
<Image.Source>
<FontImageSource
FontFamily="IconMoon"
Glyph="{x:Static i:IconsMoon.Icon_Calendar}"
Size="25"
Color="{StaticResource Primary_DarkBlue}" />
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ShowBirthdayCalendarCommand}" CommandParameter="{x:Reference birthDatePicker}" />
</Image.GestureRecognizers>
</Image>
<DatePicker
x:Name="birthDatePicker"
Date="{Binding BirthDate}"
HeightRequest="0"
MaximumDate="{Binding MaxDate}"
MinimumDate="01/01/1900"
WidthRequest="0" />
</Grid>
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Sex_Question}" />
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<controls:PickerWithChevron
x:Name="sexPicker"
Title="{x:Static res:Text.Profile_Sex_Question}"
ios:Picker.UpdateMode="WhenFinished"
HorizontalOptions="Fill"
ItemDisplayBinding="{Binding Text}"
ItemsSource="{Binding SexItems}"
SelectedItem="{Binding SelectedSex}" />
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Address_Question}" />
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="addressLine1"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_Address_Line1}"
Text="{Binding AppUser.Address.AddressLine1, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="addressLine1Validation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="100"
MinimumLength="1" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="addressLine2"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_Address_Line2}"
Text="{Binding AppUser.Address.AddressLine2, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="addressLine2Validation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="100"
MinimumLength="0" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="zip"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_Address_Zip}"
Text="{Binding AppUser.Address.Zip, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="zipValidation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="20"
MinimumLength="1" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="city"
Keyboard="Text"
Placeholder="{x:Static res:Text.Common_Address_City}"
Text="{Binding AppUser.Address.City, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="cityValidation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="100"
MinimumLength="1" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<controls:PickerWithChevron
Title="{x:Static res:Text.Common_SelectCountry}"
ios:Picker.UpdateMode="WhenFinished"
HorizontalOptions="Fill"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding Countries}"
SelectedItem="{Binding SelectedCountry}" />
</Border>
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<controls:PickerWithChevron
Title="{x:Static res:Text.Common_SelectState}"
ios:Picker.UpdateMode="WhenFinished"
HorizontalOptions="Fill"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding States}"
SelectedItem="{Binding SelectedState}" />
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Contact_Question}" />
<Border Margin="{StaticResource MarginSmall}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="mobile"
Keyboard="Telephone"
Placeholder="{x:Static res:Text.Common_Contact_Mobile}"
Text="{Binding AppUser.Contact.Mobile, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="mobileValidation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="100"
MinimumLength="0" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<Entry
x:Name="phone"
Keyboard="Telephone"
Placeholder="{x:Static res:Text.Common_Contact_Phone}"
Text="{Binding AppUser.Contact.Phone, Converter={StaticResource NullToEmptyStringConverter}}">
<Entry.Behaviors>
<toolkit:TextValidationBehavior
x:Name="phoneValidation"
Flags="ValidateOnAttaching,ValidateOnValueChanged"
InvalidStyle="{StaticResource InvalidEntryStyle}"
MaximumLength="100"
MinimumLength="0" />
<behaviors:SelectAllFocusedEntryBehavior />
</Entry.Behaviors>
</Entry>
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_Nationality_Question}" />
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<controls:PickerWithChevron
Title="{x:Static res:Text.Common_SelectCountry}"
ios:Picker.UpdateMode="WhenFinished"
HorizontalOptions="Fill"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding Nationalitites}"
SelectedItem="{Binding SelectedNationality}" />
</Border>
<Label
Margin="{StaticResource MarginLabel}"
Style="{StaticResource Inter_Blue}"
Text="{x:Static res:Text.Profile_MainResidence_Question}" />
<Border Margin="{StaticResource MarginBig}" Style="{StaticResource EntryBorder}">
<controls:PickerWithChevron
Title="{x:Static res:Text.Common_SelectCountry}"
ios:Picker.UpdateMode="WhenFinished"
HorizontalOptions="Fill"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding MainResidences}"
SelectedItem="{Binding SelectedMainResidence}" />
</Border>
<!-- <Grid Margin="{StaticResource MarginVerySmall}" ColumnDefinitions="*,*">
<Label
Grid.Column="0"
LineBreakMode="TailTruncation"
Style="{StaticResource BodySMedium_Blue}"
Text="{x:Static res:Text.Profile_AutoPayout}"
VerticalOptions="Center" />
<Switch
Grid.Column="1"
HorizontalOptions="End"
IsToggled="{Binding AppUser.AutoPayout}"
VerticalOptions="Center">
<Switch.IsEnabled>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}">
<Binding Converter="{StaticResource IsNotNullOrEmptyToBooleanConverter}" Path="AppUser.PaymentId" />
<Binding Converter="{StaticResource IsNotNullOrEmptyToBooleanConverter}" Path="AppUser.BankId" />
<Binding Path="AppUser.KycPassed" />
</MultiBinding>
</Switch.IsEnabled>
</Switch>
</Grid>
<Label
Margin="{StaticResource MarginBig}"
Style="{StaticResource BodyCaption_GreyDark}"
Text="{x:Static res:Text.Profile_AutoPayout_Desc}" /> -->
<ActivityIndicator
HorizontalOptions="Center"
IsRunning="{Binding IsBusy}"
IsVisible="{Binding IsBusy}"
Scale="1"
VerticalOptions="Center" />
</VerticalStackLayout>
<ActivityIndicator
HorizontalOptions="Center"
IsRunning="{Binding IsSaving}"
IsVisible="{Binding IsSaving}"
Scale="1"
VerticalOptions="Center" />
<Button
x:Name="btnSave"
Command="{Binding SaveCommand}"
Text="{Static res:Text.Button_Done}">
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}">
<Binding Path="IsValid" Source="{x:Reference firstNameValidation}" />
<Binding Path="IsValid" Source="{x:Reference lastNameValidation}" />
<Binding Path="IsValid" Source="{x:Reference birthdayValidation}" />
<Binding Path="IsValid" Source="{x:Reference addressLine1Validation}" />
<Binding Path="IsValid" Source="{x:Reference addressLine2Validation}" />
<Binding Path="IsValid" Source="{x:Reference zipValidation}" />
<Binding Path="IsValid" Source="{x:Reference cityValidation}" />
<Binding Path="IsValid" Source="{x:Reference mobileValidation}" />
<Binding Path="IsValid" Source="{x:Reference phoneValidation}" />
<Binding Path="AddressSelectionValid" />
<Binding Path="IsNotBusy" />
</MultiBinding>
</Button.IsEnabled>
</Button>
</VerticalStackLayout>
</ScrollView>
<VerticalStackLayout IsVisible="{Binding IsLoading}" VerticalOptions="Center">
<ActivityIndicator
HorizontalOptions="Center"
IsRunning="{Binding IsLoading}"
IsVisible="{Binding IsLoading}"
Scale="2"
VerticalOptions="Center" />
</VerticalStackLayout>
</Grid>
</ContentPage.Content>
</controls:BaseContentPage>