Skip to content

Commit bfb9eff

Browse files
committed
Add CampaignDetail view and model view
1 parent 9bdfddc commit bfb9eff

4 files changed

Lines changed: 232 additions & 0 deletions

File tree

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public static void RegisterDependencies(bool useMockServices)
4949
builder.RegisterType<ProfileViewModel>();
5050
builder.RegisterType<SettingsViewModel>();
5151
builder.RegisterType<CampaignViewModel>();
52+
builder.RegisterType<CampaignDetailsViewModel>();
5253

5354
// Services
5455
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
using System;
2+
3+
namespace eShopOnContainers.Core.ViewModels
4+
{
5+
using System.Threading.Tasks;
6+
using System.Windows.Input;
7+
using eShopOnContainers.Core.Helpers;
8+
using Xamarin.Forms;
9+
using Models.Marketing;
10+
using Services.Marketing;
11+
using Base;
12+
13+
public class CampaignDetailsViewModel : ViewModelBase
14+
{
15+
private CampaignItem _campaign;
16+
private readonly ICampaignService _campaignService;
17+
private string _campaignAvailability;
18+
19+
20+
public CampaignDetailsViewModel(ICampaignService campaignService)
21+
{
22+
_campaignService = campaignService;
23+
}
24+
25+
public CampaignItem Campaign
26+
{
27+
get => _campaign;
28+
set
29+
{
30+
_campaign = value;
31+
RaisePropertyChanged(() => Campaign);
32+
}
33+
}
34+
35+
public string Name
36+
{
37+
get => _campaign.Name;
38+
set
39+
{
40+
_campaign.Name = value;
41+
RaisePropertyChanged(() => Name);
42+
}
43+
}
44+
45+
public string Description
46+
{
47+
get => _campaign.Description;
48+
set
49+
{
50+
_campaign.Description = value;
51+
RaisePropertyChanged(() => Description);
52+
}
53+
}
54+
55+
public string PictureUri
56+
{
57+
get => _campaign.PictureUri;
58+
set
59+
{
60+
_campaign.PictureUri = value;
61+
RaisePropertyChanged(() => PictureUri);
62+
}
63+
}
64+
65+
public string From
66+
{
67+
get => _campaign.From.ToString("MMMM dd, yyyy");
68+
}
69+
70+
public string To
71+
{
72+
get => _campaign.To.ToString("MMMM dd, yyyy");
73+
}
74+
75+
//public string CampaignAvailability
76+
//{
77+
// get => $"{_campaign.From:MMMM dd, yyyy} until {_campaign.To:MMMM dd, yyyy}";
78+
// set
79+
// {
80+
// _campaignAvailability = value;
81+
// RaisePropertyChanged(() => CampaignAvailability);
82+
// }
83+
//}
84+
85+
86+
public override async Task InitializeAsync(object navigationData)
87+
{
88+
if (navigationData is int)
89+
{
90+
IsBusy = true;
91+
92+
// Get campaign by id
93+
Campaign = await _campaignService.GetCampaignByIdAsync((int) navigationData, Settings.AuthAccessToken);
94+
95+
IsBusy = false;
96+
}
97+
}
98+
}
99+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
4+
x:Class="eShopOnContainers.Core.Views.CampaignDetailsView"
5+
xmlns:viewModelBase="clr-namespace:eShopOnContainers.Core.ViewModels.Base;assembly=eShopOnContainers.Core"
6+
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
7+
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
8+
xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
9+
viewModelBase:ViewModelLocator.AutoWireViewModel="true"
10+
Title="Campaign Details">
11+
<ContentPage.Resources>
12+
<ResourceDictionary>
13+
<Style x:Key="CampaignStyle"
14+
TargetType="{x:Type StackLayout}">
15+
<Setter Property="VerticalOptions"
16+
Value="Center" />
17+
<Setter Property="Margin"
18+
Value="0" />
19+
</Style>
20+
<Style x:Key="SettingsTitleStyle"
21+
TargetType="{x:Type Label}">
22+
<Setter Property="FontFamily"
23+
Value="{StaticResource MontserratRegular}" />
24+
<Setter Property="FontSize"
25+
Value="{StaticResource MediumSize}" />
26+
<Setter Property="HorizontalOptions"
27+
Value="Start" />
28+
<Setter Property="VerticalOptions"
29+
Value="Center" />
30+
<Setter Property="Margin"
31+
Value="12, 0" />
32+
</Style>
33+
34+
<Style x:Key="SettingsDescriptionStyle"
35+
TargetType="{x:Type Label}"
36+
BasedOn="{StaticResource SettingsTitleStyle}">
37+
<Setter Property="FontSize"
38+
Value="{StaticResource LittleSize}" />
39+
</Style>
40+
</ResourceDictionary>
41+
</ContentPage.Resources>
42+
<Grid
43+
ColumnSpacing="0"
44+
RowSpacing="0">
45+
<Grid.RowDefinitions>
46+
<RowDefinition Height="Auto" />
47+
</Grid.RowDefinitions>
48+
<!-- CAMPAIGN DETAILS -->
49+
<ScrollView>
50+
<StackLayout
51+
x:Name="Campaign">
52+
<Grid>
53+
<Grid.ColumnDefinitions>
54+
<ColumnDefinition Width="*" />
55+
<ColumnDefinition Width="Auto" />
56+
</Grid.ColumnDefinitions>
57+
<Grid.RowDefinitions>
58+
<RowDefinition Height="1" />
59+
<RowDefinition Height="Auto" />
60+
<RowDefinition Height="Auto" />
61+
<RowDefinition Height="1" />
62+
</Grid.RowDefinitions>
63+
<Grid
64+
Grid.Row="0"
65+
Grid.Column="0"
66+
Grid.ColumnSpan="2"
67+
BackgroundColor="Gray"/>
68+
<StackLayout
69+
Style ="{StaticResource CampaignStyle}"
70+
Grid.Column="0"
71+
Grid.Row="1">
72+
<Image
73+
Grid.Column="0"
74+
Grid.Row="0"
75+
Source="{Binding Campaign.PictureUri, Converter={StaticResource ImageConverter}}"
76+
Aspect="AspectFit"
77+
VerticalOptions="Start"
78+
Margin="12,0,0,0" />
79+
<Label
80+
Text="{Binding Campaign.Name}"
81+
TextColor="{StaticResource GreenColor}"
82+
Style="{StaticResource SettingsTitleStyle}"/>
83+
<Label
84+
Text="{Binding Campaign.Description}"
85+
Style="{StaticResource SettingsDescriptionStyle}"/>
86+
<StackLayout
87+
Style ="{StaticResource CampaignStyle}"
88+
Grid.Row="2"
89+
HorizontalOptions="Center"
90+
Margin="12,0,0,0" >
91+
<Label
92+
Text="{Binding Campaign.From, StringFormat='From {0:MMMM dd, yyyy}'}"
93+
Style="{StaticResource SettingsDescriptionStyle}"/>
94+
<Label
95+
Text="{Binding Campaign.To, StringFormat='until {0:MMMM dd, yyyy}'}"
96+
Style="{StaticResource SettingsDescriptionStyle}"/>
97+
</StackLayout>
98+
</StackLayout>
99+
</Grid>
100+
</StackLayout>
101+
</ScrollView>
102+
<!-- INDICATOR -->
103+
<ActivityIndicator
104+
Grid.Row="0"
105+
Grid.RowSpan="2"
106+
Color="{StaticResource LightGreenColor}"
107+
IsRunning="{Binding IsBusy}"
108+
IsVisible="{Binding IsBusy}"
109+
VerticalOptions="Center"
110+
HorizontalOptions="Center">
111+
<ActivityIndicator.WidthRequest>
112+
<OnPlatform
113+
x:TypeArguments="x:Double"
114+
iOS="100"
115+
Android="100"
116+
WinPhone="400" />
117+
</ActivityIndicator.WidthRequest>
118+
</ActivityIndicator>
119+
</Grid>
120+
</ContentPage>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Xamarin.Forms;
2+
3+
namespace eShopOnContainers.Core.Views
4+
{
5+
public partial class CampaignDetailsView : ContentPage
6+
{
7+
public CampaignDetailsView()
8+
{
9+
InitializeComponent();
10+
}
11+
}
12+
}

0 commit comments

Comments
 (0)