diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor new file mode 100644 index 0000000..97a356b --- /dev/null +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor @@ -0,0 +1,55 @@ +@if (IsVisible) +{ +
+} + +@code { + [Inject] private IJSRuntime Js { get; set; } = default!; + [Parameter] public EventCallback OnClick { get; set; } + [Parameter] public bool AllowBodyScroll { get; set; } + [Parameter] public BackdropFilterColor Color { get; set; } = BackdropFilterColor.Overlay; + [Parameter] public bool CloseOnClick { get; set; } = true; + [Parameter] public bool IsVisible { get; set; } + + public async Task Show() + { + IsVisible = true; + await HandleBodyOverflow(); + } + + public async Task Hide() + { + IsVisible = false; + await HandleBodyOverflow(); + } + + private async Task HandleBodyOverflow() + { + try + { + if (AllowBodyScroll) return; + + if (IsVisible) + { + await Js.InvokeVoidAsync("setBodyOverflow", "hidden"); + } + else + { + await Js.InvokeVoidAsync("setBodyOverflow", "auto"); + } + } + catch (Exception) + { + // ignored because js not loaded + } + } + + private async Task HandleBackdropClicked() + { + if (!CloseOnClick) return; + + await Hide(); + await OnClick.InvokeAsync(); + } + +} \ No newline at end of file diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.css b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.css new file mode 100644 index 0000000..5d089d1 --- /dev/null +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.css @@ -0,0 +1,13 @@ +.backdrop-filter { + position: fixed; + inset: 0; + z-index: var(--index-backdrop); +} + + .backdrop-filter.overlay { + background-color: var(--grey-filter); + } + + .backdrop-filter.transparent { + background-color: transparent; + } diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.js b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.js new file mode 100644 index 0000000..3f2b25b --- /dev/null +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilter.razor.js @@ -0,0 +1,3 @@ +window.setBodyOverflow = (overflow) => { + document.getElementsByTagName('html')[0].style.overflow = overflow; +} diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilterColor.cs b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilterColor.cs new file mode 100644 index 0000000..16cddd2 --- /dev/null +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/BackdropFilter/BackdropFilterColor.cs @@ -0,0 +1,7 @@ +namespace GameIdeas.BlazorApp.Shared.Components.BackdropFilter; + +public enum BackdropFilterColor +{ + Overlay, + Transparent +} diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Search/SearchInput.razor b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Search/SearchInput.razor index 911db66..8ceeca7 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Search/SearchInput.razor +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Shared/Components/Search/SearchInput.razor @@ -1,10 +1,12 @@