From d96e13719a7e66d910b9e82c59e528eb9937a5a7 Mon Sep 17 00:00:00 2001 From: Beau Findlay Date: Thu, 7 Mar 2024 20:43:56 +0000 Subject: [PATCH] Track if home has already been rendered in local storage --- BeauFindlay/BeauFindlay/Pages/Home.razor | 50 +++++++++++++----------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/BeauFindlay/BeauFindlay/Pages/Home.razor b/BeauFindlay/BeauFindlay/Pages/Home.razor index 78efa2e..9fe35ec 100644 --- a/BeauFindlay/BeauFindlay/Pages/Home.razor +++ b/BeauFindlay/BeauFindlay/Pages/Home.razor @@ -2,9 +2,11 @@ @implements IDisposable +@inject IJSRuntime JSRuntime + Home - Beau Findlay -@if (isFirstRender) +@if (!hasPreviouslyRendered) {

@@ -14,12 +16,12 @@

-

+

- +

@@ -28,38 +30,42 @@ } else { -

- Hi, I'm Beau. -

+

Hi, I'm Beau.

-

- I'm a UK-based software engineer and I love building cool stuff. -

+

I'm a UK-based software engineer and I love building cool stuff.

-

- A bit about me -

+

A bit about me

-

- I mostly specialise in back-end C#/.NET development and I build systems that scale for hundreds-of-thousands of global users. -

+

I mostly specialise in back-end C#/.NET development and I've built systems that scale for hundreds-of-thousands of global users.

-

- I'm currently heading up the tech as CTO at a cool startup called un:hurd. -

+

I'm currently heading up the tech as CTO at a cool startup called un:hurd.

} @code { - private bool isFirstRender = true; + private const string ComponentKey = "ComponentRendered_Home"; + private bool hasPreviouslyRendered; - protected override void OnAfterRender(bool firstRender) + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { - isFirstRender = false; - Typewriter.OnAllTypingCompleted += HandleTypingCompleted; + + var renderedBeforeAsString = await JSRuntime.InvokeAsync("localStorage.getItem", ComponentKey); + + var previousValue = hasPreviouslyRendered; + hasPreviouslyRendered = !string.IsNullOrEmpty(renderedBeforeAsString) && bool.Parse(renderedBeforeAsString); + + if (!hasPreviouslyRendered) + { + await JSRuntime.InvokeVoidAsync("localStorage.setItem", ComponentKey, "true"); + } + + if (previousValue != hasPreviouslyRendered) + { + StateHasChanged(); + } } }