Skip to content

Commit 5c8eaef

Browse files
authored
Merge pull request #162 from BrammyS/features/157-darkmode-toggle
Features/157 darkmode toggle
2 parents 2c60152 + 69ce7fd commit 5c8eaef

File tree

21 files changed

+150
-57
lines changed

21 files changed

+150
-57
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace GalleryPixels.UI.Application.Services;
2+
3+
public interface IDarkModeService
4+
{
5+
Task UseDarkMode();
6+
Task UseLightMode();
7+
Task RespectOsPreference();
8+
Task<bool> IsDarkMode();
9+
}

src/client/GalleryPixels.UI.Infrastructure/Services/IMagicGrid.cs renamed to src/client/GalleryPixels.UI.Application/Services/IMagicGrid.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace GalleryPixels.UI.Infrastructure.Services;
1+
namespace GalleryPixels.UI.Application.Services;
22

33
public interface IMagicGrid
44
{
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using GalleryPixels.UI.Domain.Models;
2+
3+
namespace GalleryPixels.UI.Application.Services;
4+
5+
public interface IToastService
6+
{
7+
event Func<ToastData, Task>? OnShow;
8+
9+
void ShowSuccess(string message, int dismissAfter = 3);
10+
void ShowError(string message, int dismissAfter = 3);
11+
void ShowWarning(string message, int dismissAfter = 3);
12+
void ShowInfo(string message, int dismissAfter = 3);
13+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
namespace GalleryPixels.UI.Enums;
1+
namespace GalleryPixels.UI.Domain.Models;
22

33
public record ToastData(ToastType Type, string Message, int DismissAfter);

src/client/GalleryPixels.UI/Enums/ToastType.cs renamed to src/client/GalleryPixels.UI.Domain/Models/ToastType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace GalleryPixels.UI.Enums;
1+
namespace GalleryPixels.UI.Domain.Models;
22

33
public enum ToastType
44
{

src/client/GalleryPixels.UI.Infrastructure/DependencyInjection.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@ public static IServiceCollection RegisterInfrastructure(this IServiceCollection
2222
);
2323

2424
services.AddBlazoredLocalStorage();
25+
services.AddScoped<IMagicGrid, MagicGrid>();
26+
services.AddScoped<IDarkModeService, DarkModeService>();
2527
services.AddScoped<ILocalStorageService, LocalStorageService>();
2628
services.AddScoped<IGalleryPixelsApiService, GalleryPixelsApiService>();
29+
services.AddSingleton<IToastService, ToastService>();
30+
2731

2832
return services;
2933
}

src/client/GalleryPixels.UI.Infrastructure/GalleryPixels.UI.Infrastructure.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.3" />
11-
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.3" />
12-
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
10+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.3"/>
11+
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.3"/>
12+
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0"/>
13+
<PackageReference Include="Microsoft.JSInterop" Version="9.0.3"/>
1314
</ItemGroup>
1415

1516
<ItemGroup>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using GalleryPixels.UI.Application.Services;
2+
using Microsoft.JSInterop;
3+
4+
namespace GalleryPixels.UI.Infrastructure.Services;
5+
6+
public class DarkModeService(IJSRuntime jsRuntime) : IDarkModeService
7+
{
8+
public async Task UseDarkMode()
9+
{
10+
await jsRuntime.InvokeVoidAsync("useDarkMode").ConfigureAwait(false);
11+
}
12+
13+
public async Task UseLightMode()
14+
{
15+
await jsRuntime.InvokeVoidAsync("useLightMode").ConfigureAwait(false);
16+
}
17+
18+
public async Task RespectOsPreference()
19+
{
20+
await jsRuntime.InvokeVoidAsync("respectOsPreference").ConfigureAwait(false);
21+
}
22+
23+
public async Task<bool> IsDarkMode()
24+
{
25+
return await jsRuntime.InvokeAsync<bool>("isDarkMode").ConfigureAwait(false);
26+
}
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using GalleryPixels.UI.Application.Services;
2+
using Microsoft.JSInterop;
3+
4+
namespace GalleryPixels.UI.Infrastructure.Services;
5+
6+
public class MagicGrid(IJSRuntime jSRuntime) : IMagicGrid
7+
{
8+
public ValueTask InitAsync(
9+
string containerSelector,
10+
int gutterSize,
11+
int items
12+
)
13+
{
14+
return jSRuntime.InvokeVoidAsync(
15+
"initMasonry",
16+
containerSelector,
17+
gutterSize,
18+
items
19+
);
20+
}
21+
}

src/client/GalleryPixels.UI/Services/ToastService.cs renamed to src/client/GalleryPixels.UI.Infrastructure/Services/ToastService.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
using GalleryPixels.UI.Enums;
1+
using GalleryPixels.UI.Application.Services;
2+
using GalleryPixels.UI.Domain.Models;
23

3-
namespace GalleryPixels.UI.Services;
4+
namespace GalleryPixels.UI.Infrastructure.Services;
45

5-
public class ToastService
6+
public class ToastService : IToastService
67
{
78
public event Func<ToastData, Task>? OnShow;
9+
public void ShowSuccess(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Success, message, dismissAfter));
10+
public void ShowError(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Error, message, dismissAfter));
11+
public void ShowWarning(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Warning, message, dismissAfter));
12+
public void ShowInfo(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Info, message, dismissAfter));
813

914
private void ShowToast(ToastData toastData)
1015
{
1116
OnShow?.Invoke(toastData);
1217
}
13-
14-
public void ShowSuccess(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Success, message, dismissAfter));
15-
public void ShowError(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Error, message, dismissAfter));
16-
public void ShowWarning(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Warning, message, dismissAfter));
17-
public void ShowInfo(string message, int dismissAfter = 3) => ShowToast(new ToastData(ToastType.Info, message, dismissAfter));
1818
}

0 commit comments

Comments
 (0)