Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 25 additions & 24 deletions UndoAssessment.sln
Original file line number Diff line number Diff line change
@@ -1,60 +1,61 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 25.0.1705.6
# Visual Studio Version 17
VisualStudioVersion = 17.6.33723.286
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UndoAssessment.Android", "UndoAssessment\UndoAssessment.Android\UndoAssessment.Android.csproj", "{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UndoAssessment.iOS", "UndoAssessment\UndoAssessment.iOS\UndoAssessment.iOS.csproj", "{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UndoAssessment", "UndoAssessment\UndoAssessment\UndoAssessment.csproj", "{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UndoAssessment", "UndoAssessment\UndoAssessment\UndoAssessment.csproj", "{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Release|iPhoneSimulator = Release|iPhoneSimulator
Debug|iPhone = Debug|iPhone
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Release|Any CPU = Release|Any CPU
Release|iPhone = Release|iPhone
Release|iPhoneSimulator = Release|iPhoneSimulator
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|Any CPU.Build.0 = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhone.Build.0 = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|Any CPU.Build.0 = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhone.ActiveCfg = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhone.Build.0 = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B08F8340-7FAF-4AB2-A9DA-BA5B14FE5FDE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhone.ActiveCfg = Debug|iPhone
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhone.Build.0 = Debug|iPhone
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhone.ActiveCfg = Release|iPhone
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhone.Build.0 = Release|iPhone
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{4F77CCCB-68DC-4CC7-A528-DB6FF48741D0}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|Any CPU.Build.0 = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhone.Build.0 = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|Any CPU.Build.0 = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhone.ActiveCfg = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhone.Build.0 = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7ED4972A-D279-4E63-B4F5-3D15590D4AA1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
19 changes: 10 additions & 9 deletions UndoAssessment/UndoAssessment/App.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
using System;
using UndoAssessment.Services;
using UndoAssessment.Services.DataProvider;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using UndoAssessment.Services;
using UndoAssessment.Views;

namespace UndoAssessment
{
public partial class App : Application
{

public App ()
public App()
{
InitializeComponent();

DependencyService.Register<MockDataStore>();
DependencyService.Register<MockItemDataStore>();
DependencyService.Register<MockUserDataStore>();
DependencyService.Register<DataProvider>();

MainPage = new AppShell();
}

protected override void OnStart ()
protected override void OnStart()
{
}

protected override void OnSleep ()
protected override void OnSleep()
{
}

protected override void OnResume ()
protected override void OnResume()
{
}
}
Expand Down
1 change: 1 addition & 0 deletions UndoAssessment/UndoAssessment/AppShell.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<TabBar>
<ShellContent Title="About" Icon="icon_about.png" Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
<ShellContent Title="Browse" Icon="icon_feed.png" ContentTemplate="{DataTemplate local:ItemsPage}" />
<ShellContent Title="Users" ContentTemplate="{DataTemplate local:UsersPage}" />
</TabBar>

<!--
Expand Down
9 changes: 4 additions & 5 deletions UndoAssessment/UndoAssessment/AppShell.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using UndoAssessment.ViewModels;
using UndoAssessment.Views;
using UndoAssessment.Views;
using Xamarin.Forms;

namespace UndoAssessment
Expand All @@ -11,10 +8,12 @@ public partial class AppShell : Xamarin.Forms.Shell
public AppShell()
{
InitializeComponent();

Routing.RegisterRoute(nameof(ItemDetailPage), typeof(ItemDetailPage));
Routing.RegisterRoute(nameof(NewItemPage), typeof(NewItemPage));
Routing.RegisterRoute(nameof(UserDetailPage), typeof(UserDetailPage));
Routing.RegisterRoute(nameof(NewUserPage), typeof(NewUserPage));
}

}
}

20 changes: 20 additions & 0 deletions UndoAssessment/UndoAssessment/Converters/InverseBoolConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Globalization;
using Xamarin.Forms;

namespace UndoAssessment.Converters
{
//ToDo: the converter can be replace from the Xamarin Community Toolkit package
public class InverseBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return !(bool)value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
7 changes: 7 additions & 0 deletions UndoAssessment/UndoAssessment/Models/IEntity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace UndoAssessment.Models
{
public interface IEntity
{
string Id { get; set; }
}
}
6 changes: 2 additions & 4 deletions UndoAssessment/UndoAssessment/Models/Item.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;

namespace UndoAssessment.Models
namespace UndoAssessment.Models
{
public class Item
public class Item : IEntity
{
public string Id { get; set; }
public string Text { get; set; }
Expand Down
9 changes: 9 additions & 0 deletions UndoAssessment/UndoAssessment/Models/User.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace UndoAssessment.Models
{
public class User : IEntity
{
public string Id { get; set; }
public string Name { get; set; }
public uint Age { get; set; }
}
}
22 changes: 22 additions & 0 deletions UndoAssessment/UndoAssessment/Services/ApiResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;

namespace UndoAssessment.Services
{
public class ApiResponse
{
public bool IsSuccess { get; set; }
public string ErrorMessage { get; set; }
public ApiResponseModel Result { get; set; }
}

public class ApiResponseModel
{
public string Message { get; set; }
public DateTime Date { get; set; }

public override string ToString()
{
return $"Message: {Message}, date: {Date}";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using UndoAssessment.Models;

namespace UndoAssessment.Services.DataProvider
{
internal class DataProvider : IDataProvider
{
private const string Url = "https://malkarakundostagingpublicapi.azurewebsites.net/";
private const string SuccessPartUrl = "success";
private const string FailPartUrl = "fail";

public async Task<IEnumerable<Item>> GetItems()
{
var items = Enumerable.Range(0, 11)
.Select(ind =>
new Item
{
Id = ind.ToString(),
Text = ind.ToString(),
Description = ind.ToString()
});

return await Task.FromResult(items);
}

public async Task<ApiResponse> MakeApiRequest(bool flag)
{
try
{
using (HttpClient client = new HttpClient())
{
var urlformat = $"{Url}{(flag ? SuccessPartUrl : FailPartUrl)}";
var response = await client.GetAsync(urlformat);

if (response.IsSuccessStatusCode)
{
var responseBody = await response.Content.ReadAsStringAsync();
var result = ParseResponse(responseBody);

return new ApiResponse
{
IsSuccess = true,
Result = result
};
}
else
{
// Read the error message from the response
var errorMessage = await response.Content.ReadAsStringAsync();

// Return an error result with the error message
return new ApiResponse
{
IsSuccess = false,
ErrorMessage = errorMessage
};
}
}
}
catch (Exception ex)
{
return new ApiResponse
{
IsSuccess = false,
ErrorMessage = ex.Message
};
}
}

private static ApiResponseModel ParseResponse(string responseBody)
{
// ToDo: it can be replace to JsonConvert, it for needs install a package
// {\"message\":\"Success message\",\"date\":\"11.07.2023 12:50:30\"}
// var data = JsonConvert.DeserializeObject<ApiResponseModel>(responseBody);
// return new ApiResponseModel()
// {
// Message = date.Message,
// Date = date.Date
// };

// Fictitious response
return new ApiResponseModel()
{
Message = "Success message",
Date = DateTime.UtcNow
};
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using UndoAssessment.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace UndoAssessment.Services.DataProvider
{
public interface IDataProvider
{
Task<IEnumerable<Item>> GetItems();

Task<ApiResponse> MakeApiRequest(bool flag);
}
}
Loading