CodeBeamOrg / CodeBeam.MudBlazor.Extensions

Useful third party extension components for MudBlazor, from the contributors.
https://mudextensions.codebeam.org/
MIT License
348 stars 60 forks source link

MudSelectExtended - Not binding values when using WebAssembly #358

Closed miguelmachado17 closed 3 weeks ago

miguelmachado17 commented 2 months ago

Hello,

I don't seem to be able to automatically select values whenever i'm using WebAssembly. On the first render (using server mode) it's able to select the values passed to the variable "selectedApplicationUsers" automatically, but the same doens't happen when i reload the page and use WASM instead.

(First Render) Captura de ecrã 2024-03-07 125512

(Second Render) Captura de ecrã 2024-03-07 125549

Below is the code that i currently using.

<MudSelectExtended T="ApplicationUser"
                   ItemCollection="applicationUsers"
                   @bind-SelectedValues="selectedApplicationUsers"
                   Label="Users"
                   ToStringFunc="@(v => v?.FirstName)"
                   Variant="Variant.Text"
                   ValuePresenter="ValuePresenter.Chip"
                   Virtualize="true"
                   ChipCloseable="true"
                   ChipVariant="MudBlazor.Variant.Filled"
                   ChipSize="MudBlazor.Size.Small"
                   MultiSelection="true"
                   MultiSelectionTextFunc="@(new Func<List<ApplicationUser>, string>(GetMultiSelectionText))" />

public List<TaskUser>? taskUsers { get; set; }
public List<ApplicationUser> applicationUsers { get; set; } = new List<ApplicationUser>();
public List<ApplicationUser> usersInTask { get; set; } = new List<ApplicationUser>();
public IEnumerable<ApplicationUser> selectedApplicationUsers { get; set; } = new List<ApplicationUser>();

protected override async Task OnInitializedAsync()
{
  applicationUsers = await ApplicationUserSevice.GetAll();
  taskUsers = await TaskUserService.GetAllByMainTaskId(mainTask.Id);
  foreach (var taskData in taskUsers)
  {
      ApplicationUser? user = await ApplicationUserSevice.GetById(taskData.ApplicationUserId);
      usersInTask.Add(user);
  }
  selectedApplicationUsers = usersInTask;
  MudDialog.StateHasChanged();
  await base.OnInitializedAsync();
}

private string GetMultiSelectionText(List<ApplicationUser> selectedValues)
{
    return $"{string.Join(", ", selectedValues.Select(x => x.FirstName))}";
}

I checked, and the API calls are working and retrieving the exact same data as when using server mode.

Is this a bug or am i doing something wrong?