Starts in:
2 DAYS
5 HRS
16 MIN
17 SEC
Starts in:
2 D
5 H
16 M
17 S
Open Closed

Menu not rendering after user logs in in Blazor wasm app #4363


User avatar
0
ccernat created
  • ABP Framework version: v7.0
  • UI type: Blazor wasm
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no

Hi!

I have a strange situation in which, after publishing the apps on Azure, after the user logs in with Azure B2C as external identity provider, the menu is not rendering and gravatar image is unclickable.

Only after I do a refresh of the page the menu is rendered and user menu by clicking the gravatar starts working.

On local dev env, no problem, it works.

My menu contributor for the Blazor app looks like this. Does anyone encountered this problem? Am I doing too many checks before adding the menu items? The menu is rendered based on various roles and other things.

private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
{
bool IsDoctorApproved = false;
bool IsDoctorClinicAdmin = false;
var l = context.GetLocalizer<MHUResource>();
var currentUser = context.ServiceProvider.GetRequiredService<ICurrentUser>();       


if(currentUser != null && currentUser.IsAuthenticated)
{
    context.Menu.AddItem(new ApplicationMenuItem(
                     MHUMenus.Home,
                     l["Menu:Home"],
                     "/",
                     icon: "fas fa-home",
                     order: 1
                 ));
    if (currentUser.IsInRole("Doctor"))
    {
        var doctorAppService = context.ServiceProvider.GetRequiredService<IDoctorsAppService>();
        var clinicAppService = context.ServiceProvider.GetRequiredService<IClinicsAppService>();
        var FilterDoctors = new GetDoctorsInput
        {
            IdentityUserId = currentUser.Id.Value
        };
        var result = await doctorAppService.GetListAsync(FilterDoctors);
        if (result.Items.Any())
        {
            var currentDoctor = result.Items.FirstOrDefault().Doctor;
            IsDoctorApproved = currentDoctor.IsApproved;
            var clinic = await clinicAppService.GetAsync(currentDoctor.ClinicId.Value);
            IsDoctorClinicAdmin = clinic.AdministratorId == currentDoctor.Id;
        }
        if (IsDoctorApproved)
        {
            context.Menu.AddItem(new ApplicationMenuItem(
                          MHUMenus.Home,
                          l["Menu:MySubmissions"],
                          "/doctor-submissions",
                          icon: "fas fa-book-medical",
                          requiredPermissionName: null,
                          order: 2
                        ));
            context.Menu.AddItem(new ApplicationMenuItem(
                          MHUMenus.Home,
                          l["Menu:Payments"],
                          "/payments",
                          icon: "far fa-credit-card",
                          requiredPermissionName: null,
                          order: 5
                        ));
            context.Menu.AddItem(new ApplicationMenuItem(
                          MHUMenus.Home,
                          l["Menu:Patients"],
                          "/doctor-patients",
                          icon: "fas fa-user-injured",
                          requiredPermissionName: null,
                          order: 3
                        ));
            
        }
        if (IsDoctorClinicAdmin)
        {
            context.Menu.AddItem(new ApplicationMenuItem(
                      MHUMenus.Home,
                      l["Menu:MyClinic"],
                      "/myclinic",
                      icon: "fas fa-clinic-medical",
                      requiredPermissionName: null,
                      order: 4
                    ));
        }
    }
    else if (currentUser.IsInRole("Patient"))
    {
        context.Menu.AddItem(new ApplicationMenuItem(
          MHUMenus.Home,
          l["Menu:MySubmissions"],
          "/patient-submissions",
          icon: "fas fa-book-medical",
          requiredPermissionName: null,
          order: 2
        ));
        context.Menu.AddItem(new ApplicationMenuItem(
           MHUMenus.Home,
           l["Menu:MyDocuments"],
           "/mydocuments",
           icon: "fa fa-folder",
           requiredPermissionName: null,
           order: 3
        ));
        context.Menu.AddItem(new ApplicationMenuItem(
           MHUMenus.Home,
           l["Menu:Certificates"],
           "/certificates",
           icon: "fas fa-certificate",
           requiredPermissionName: null,
           order: 4
        ));
    }
    else if(currentUser.IsInRole("MHUVO"))
    {
        context.Menu.Items.Clear();
        context.Menu.AddItem(new ApplicationMenuItem(
           MHUMenus.Home,
           l["Menu:Dashboard"],
           "/vo-dashboard",
           icon: "fas fa-house-medical-circle-check",
           requiredPermissionName: null,
           order: 1
        ));
    }
    else if(currentUser.IsInRole("MHURO"))
    {
        context.Menu.Items.Clear();
        context.Menu.AddItem(new ApplicationMenuItem(
           MHUMenus.Home,
           l["Menu:Dashboard"],
           "/ro-dashboard",
           icon: "fas fa-house-medical-circle-check",
           requiredPermissionName: null,
           order: 1
        ));
    }
    else if (currentUser.IsInRole("MHUDR"))
    {
        context.Menu.Items.Clear();
        context.Menu.AddItem(new ApplicationMenuItem(
           MHUMenus.Home,
           l["Menu:Dashboard"],
           "/mhu-doctor",
           icon: "fas fa-file-medical",
           requiredPermissionName: null,
           order: 1
        ));
    }
}

11 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Please check the Network panel of your browser. Is there any failed request?

  • User Avatar
    0
    ccernat created

    Hi

    Unfortunately no, I cannot see any failed request.

    Anyhow, the website is: delete

    I created a test username, please login with:

    Username: delete Pass: delete

    You will see the behavior. After refreshing the page, menu is displayed, but at first login -- not rendered and gravatar's user menu not working.

    Tks a bunch.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    It looks like your server doesn't have WebSocket enabled.

    https://learn.microsoft.com/en-us/aspnet/core/fundamentals/websockets?view=aspnetcore-5.0#iisiis-express-support

  • User Avatar
    0
    ccernat created

    Hi!

    Indeed, WS were not enabled. I enabled them, but, unfortunately, still the same behavior. :(

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    I will check again.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    We will fix that in next version. thanks

  • User Avatar
    0
    ccernat created

    Hi,

    Can I do smth until then?

    If not, is it possible to have a rough estimation when the new version gonna be released, to know when I should expect to deploy in production?

    Tks alot, maliming!

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    I reported it to the development team, it should be soon. Lepton X 2.0 patch

  • User Avatar
    0
    ccernat created

    Hi, Support Team!

    Any news about the 2.0 LeptonX release?

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    It will be updated in 24 hours.

  • User Avatar
    0
    ccernat created

    Tks! Closing!

    LE: I updated all my packages to 2.0.1 LeptonX, but still have the same problem: menu is not rendering when user logs in, I still have to refresh it.

Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06