Skip to content

Commit

Permalink
Simplier design
Browse files Browse the repository at this point in the history
  • Loading branch information
chrissainty committed Mar 24, 2020
1 parent 07c58b6 commit 8b060f3
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 132 deletions.
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# VS Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# User-specific files
*.rsuser
*.suo
Expand Down
9 changes: 0 additions & 9 deletions App.razor
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
@inject IJSRuntime JSRuntime
@inject QueryStringManager QSManager

<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
Expand All @@ -11,11 +10,3 @@
</LayoutView>
</NotFound>
</Router>

@code {

protected override void OnInitialized()
{
JSRuntime.InvokeVoidAsync("queryStringHelper.Initialise", DotNetObjectReference.Create<QueryStringManager>(QSManager));
}
}
37 changes: 37 additions & 0 deletions NavigationManagerExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.WebUtilities;

namespace BlazorQueryString
{
public static class NavigationManagerExtensions
{
public static bool TryGetQueryString<T>(this NavigationManager navManager, string key, out T value)
{
var uri = navManager.ToAbsoluteUri(navManager.Uri);

if (QueryHelpers.ParseQuery(uri.Query).TryGetValue(key, out var valueFromQueryString))
{
if (typeof(T) == typeof(int) && int.TryParse(valueFromQueryString, out var valueAsInt))
{
value = (T)(object)valueAsInt;
return true;
}

if (typeof(T) == typeof(string))
{
value = (T)(object)valueFromQueryString.ToString();
return true;
}

if (typeof(T) == typeof(decimal) && decimal.TryParse(valueFromQueryString, out var valueAsDecimal))
{
value = (T)(object)valueAsDecimal;
return true;
}
}

value = default;
return false;
}
}
}
56 changes: 27 additions & 29 deletions Pages/Counter.razor
Original file line number Diff line number Diff line change
@@ -1,49 +1,47 @@
@page "/counter"
@inject QueryStringManager QSManager
@inject NavigationManager NavManager

<h1>Counter</h1>

<hr />
<p>Current count: @currentCount</p>
<p>Current count as string: @currentCountAsString</p>
<p>Current count as decimal: @currentCountAsDecimal</p>
<p>Missing querystring: @missingQuerystring</p>
<hr />
<p>Initial count as string: @initialCountAsString</p>
<p>Initial count as decimal: @initialCountAsDecimal</p>

<button class="btn btn-primary" @onclick="@(() => currentCount++)">Click me</button>

<hr />

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
<a href="/Counter?initialCount=10">Start counter at 10.</a> |
<a href="/Counter?initialCount=20">Start counter at 20.</a> |
<a href="/Counter?initialCount=30">Start counter at 30.</a>

<hr />

<a href="/Counter?startingCount=10">Start counter at 10.</a>
<a href="/Counter?startingCount=20">Start counter at 20.</a>
<a href="/Counter?startingCount=30">Start counter at 30.</a>
<button class="btn btn-primary" @onclick="@(() => NavManager.NavigateTo("Counter?initialCount=10"))">Start Counter at 10</button>
<button class="btn btn-primary" @onclick="@(() => NavManager.NavigateTo("Counter?initialCount=20"))">Start Counter at 20</button>
<button class="btn btn-primary" @onclick="@(() => NavManager.NavigateTo("Counter?initialCount=30"))">Start Counter at 30</button>

@code {
private int currentCount = 0;
private string currentCountAsString = "";
private decimal currentCountAsDecimal = 0m;
private string missingQuerystring;
private string initialCountAsString = "";
private decimal initialCountAsDecimal = 0m;

protected override void OnInitialized()
{
QSManager.TryGetQueryString<int>("startingCount", out currentCount);
QSManager.TryGetQueryString<string>("startingCount", out currentCountAsString);
QSManager.TryGetQueryString<decimal>("startingCount", out currentCountAsDecimal);
QSManager.TryGetQueryString<string>("missing", out missingQuerystring);

QSManager.QueryStringChanged += UpdateQueryStringValues;
}

private void UpdateQueryStringValues(object o, QueryStringChangedEventArgs args)
{
QSManager.TryGetQueryString<int>(args.QueryStringKeyValuePairs, "startingCount", out currentCount);
QSManager.TryGetQueryString<string>(args.QueryStringKeyValuePairs, "startingCount", out currentCountAsString);
QSManager.TryGetQueryString<decimal>(args.QueryStringKeyValuePairs, "startingCount", out currentCountAsDecimal);
QSManager.TryGetQueryString<string>(args.QueryStringKeyValuePairs, "missing", out missingQuerystring);

StateHasChanged();
GetQueryStringValues();
NavManager.LocationChanged += (o, e) =>
{
GetQueryStringValues();
StateHasChanged();
};
}

private void IncrementCount()
private void GetQueryStringValues()
{
currentCount++;
NavManager.TryGetQueryString<int>("initialCount", out currentCount);
NavManager.TryGetQueryString<string>("initialCount", out initialCountAsString);
NavManager.TryGetQueryString<decimal>("initialCount", out initialCountAsDecimal);
}
}
1 change: 0 additions & 1 deletion Pages/_Host.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,5 @@
</div>

<script src="_framework/blazor.server.js"></script>
<script src="/QueryStringHelper.js"></script>
</body>
</html>
74 changes: 0 additions & 74 deletions QueryStringManager.cs

This file was deleted.

1 change: 0 additions & 1 deletion Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public void ConfigureServices(IServiceCollection services)
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddScoped<QueryStringManager>();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
Expand Down
18 changes: 0 additions & 18 deletions wwwroot/QueryStringHelper.js

This file was deleted.

0 comments on commit 8b060f3

Please sign in to comment.