@page "/expand" @page "/expand/{messageId}" @inherits LocalizableComponentBase
@if (IsLoading) { } @foreach (var message in Ancestors) { } @foreach (var message in Descendants) { }
@code { [CascadingParameter] CascadingState CascadingState { get; set; } [Inject] NavigationManager Navigation { get; set; } [Inject] IStorage DbStorage { get; set; } [Inject] ILocalStorageService LocalStorage { get; set; } [Inject] IBlazorDownloadFileService BlazorDownloadFileService { get; set; } [Inject] MessagesService MessagesService { get; set; } [Parameter] public string MessageId { get; set; } List Ancestors { get; set; } = new(); Message CurrentMessage { get; set; } = new(); List Descendants { get; set; } = new(); TimeSortingType TimeSortingType { get; set; } = TimeSortingType.Ascending; protected override async Task OnInitializedAsync() { if (MessageId is { Length: 0 }) { Navigation.NavigateTo("/"); return; } var filters = await LocalStorage.GetItemAsync(nameof(ActionBarFilter)); if (filters == default) await LocalStorage.SetItemAsync(nameof(ActionBarFilter), new ActionBarFilter()); else TimeSortingType = filters.TimeSortingType; CurrentMessage = await DbStorage.GetMessage(MessageId); Ancestors = new List { new() { RootMessageId = default, MessageId = "51C698E3-7C28-4C90-9212-48D5C81DE089", User = Faker.GetRandomUser(), MessageType = (MessageType)Random.Shared.Next(0, 4), Title = CurrentMessage?.Title, Content = "

esempio di messaggio precedente a quello espanso

", Medias = new(), CreatedAt = DateTime.UtcNow.AddMinutes(Random.Shared.Next(-5000, 0)), IsFavourite = Random.Shared.Next() % 2 == 0, BoostsCounter = Random.Shared.Next(0,100), IsBoostedByCurrentUser = Random.Shared.Next() % 2 == 0, } }; Descendants = new List { new() { RootMessageId = default, MessageId = "0569A1DF-46FC-4485-9F11-F8CDFB794404", User = Faker.GetRandomUser(), MessageType = (MessageType)Random.Shared.Next(0, 4), Title = CurrentMessage?.Title, Content = "

esempio di messaggio successivo a quello espanso

", Medias = new(), CreatedAt = DateTime.UtcNow.AddMinutes(Random.Shared.Next(-5000, 0)), IsFavourite = Random.Shared.Next() % 2 == 0, BoostsCounter = Random.Shared.Next(0,100), IsBoostedByCurrentUser = Random.Shared.Next() % 2 == 0, } }; IsLoading = false; } void OnTimeSortingChanged(TimeSortingType timeSortingType) { TimeSortingType = timeSortingType; } async Task OnMessageReply(MessageForm messageForm) { var replyMessage = await MessagesService.SubmitMessage(messageForm); Descendants.Add(new() { MessageId = Guid.NewGuid().ToString(), Content = messageForm.Content?.ParseContent(messageForm.ContentType), CreatedAt = DateTime.UtcNow, MessageType = messageForm.MessageType, Medias = messageForm.Media.Select(m => new Media { FileName = m.FileName, AltText = m.AltText, ContentType = m.ContentType, Url = m.Base64Preview, Blob = m.Blob }).ToList(), Title = messageForm.Title, User = new MessageUser { UserId = CascadingState.User.Id, UserName = CascadingState.User.UserName, DisplayName = CascadingState.User.DisplayName, PictureUrl = CascadingState.User.PictureUrl, ProfileUrl = CascadingState.User.ProfileUrl, BackgroundUrl = CascadingState.User.BackgroundUrl }, }); } async ValueTask OnMessageBoost(Message message) { if (message.IsBoostedByCurrentUser) return; var boostedMessage = await MessagesService.BoostUnboostMessage(message); message.BoostsCounter += 1; //Add to the home page in the background } async ValueTask OnMessageFavourite(Message message) { var favouriteMessage = await MessagesService.FavouriteUnfavouriteMessage(message); message.IsFavourite = !message.IsFavourite; } async ValueTask OnMessageDelete(Message message) { var deleteResult = await MessagesService.DeleteMessage(message); } async ValueTask OnMessageMediaDownload(Media media) { await BlazorDownloadFileService.DownloadFileAsync(media.FileName, media.Blob, media.ContentType); } async ValueTask OnUserBlock(MessageUser messageUser) { var blockResult = await MessagesService.BlockUserFromMessage(messageUser); } async ValueTask OnUserDirectMessage(Message message) { var directMessage = await MessagesService.ReplyMessage(message, MessageType.Direct); } async ValueTask OnUserSilence(MessageUser messageUser) { var silenceResult = await MessagesService.SilenceUserFromMessage(messageUser); } }