Skip to content

Commit

Permalink
Code(WEB::Drawer): Implement logic for changing chat session title
Browse files Browse the repository at this point in the history
  • Loading branch information
ktutak1337 committed May 5, 2024
1 parent c39a80a commit 2c4de3c
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 3 deletions.
27 changes: 25 additions & 2 deletions src/Client/StellarChat.Client.Web/Components/ChatHistoryItem.razor
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,17 @@
@ChatSessionItem?.Title
</MudListItem>
<MudMenu Class="" Icon="@Icons.Material.Filled.MoreVert">
<MudMenuItem>Rename</MudMenuItem>
<MudMenuItem OnClick="OpenChangeTitleDialog">Rename</MudMenuItem>
<MudMenuItem OnClick="DeleteChat">Delete</MudMenuItem>
</MudMenu>
</div>
<MudDivider />

@code
@code
{
[Parameter] public ChatSessionResponse? ChatSessionItem { get; set; }
[Parameter] public EventCallback<ChatSessionResponse> OnDeleteChat { get; set; }
[Parameter] public EventCallback<ChangeTitleInfo> OnChangeTitle { get; set; }

private void NavigateToChat()
{
Expand All @@ -28,4 +29,26 @@

private async Task DeleteChat()
=> await OnDeleteChat.InvokeAsync(ChatSessionItem);

private async Task OpenChangeTitleDialog()
{
var parameters = new DialogParameters();
parameters.Add(nameof(ChatSessionItem), ChatSessionItem);

var options = new DialogOptions { CloseOnEscapeKey = true };
var dialog = _dialogService.Show<ChangeChatSessionTitleDialog>("Change title", parameters, options);

var result = await dialog.Result;

if (!result.Canceled)
{
var updatedTitle = result.Data as string;

if (!string.IsNullOrEmpty(updatedTitle))
{
var changeTitleInfo = new ChangeTitleInfo(ChatSessionItem!.Id, updatedTitle);
await OnChangeTitle.InvokeAsync(changeTitleInfo);
}
}
}
}
19 changes: 18 additions & 1 deletion src/Client/StellarChat.Client.Web/Components/Drawer.razor
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@
<MudList Clickable="true">
@foreach (var chatSession in ChatSessions)
{
<ChatHistoryItem ChatSessionItem="@chatSession" OnDeleteChat="DeleteChatSession" />
<ChatHistoryItem ChatSessionItem="@chatSession"
OnChangeTitle="ChangeChatSessionTitle"
OnDeleteChat="DeleteChatSession" />
}
</MudList>
</div>
Expand All @@ -57,8 +59,23 @@
protected override async Task OnInitializedAsync()
=> await LoadChatSessions();

private async Task ChangeChatSessionTitle(ChangeTitleInfo changeTitleInfo)
{
var (chatId, newTitle) = changeTitleInfo;

await _chatService.ChangeChatSessionTitle(chatId, newTitle!);

var chatSession = ChatSessions.SingleOrDefault(x => x.Id == chatId);

if (chatSession is not null)
{
ChatSessions[ChatSessions.IndexOf(chatSession)] = chatSession with { Title = newTitle! };
}
}

private async Task DeleteChatSession(ChatSessionResponse chatSession)
{
Console.WriteLine($"chatSession.Id: {chatSession.Id}");
await _chatService.DeleteChatSession(chatSession.Id);
ChatSessions.Remove(chatSession);
}
Expand Down
3 changes: 3 additions & 0 deletions src/Client/StellarChat.Client.Web/Models/ChangeTitleInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace StellarChat.Client.Web.Models;

public record ChangeTitleInfo(Guid Id, string Title);
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ public async ValueTask<Paged<ChatSessionResponse>> BrowseChatSessions(int page =
return result!;
}

public async ValueTask ChangeChatSessionTitle(Guid id, string title)
{
var httpClient = _httpClientFactory.CreateClient("WebAPI");

var payload = new ChangeChatSessionTitleRequest(id, title);

await httpClient.PutAsJsonAsync($"/chat-history/sessions/{id}", payload);
}

public async ValueTask DeleteChatSession(Guid id)
{
var httpClient = _httpClientFactory.CreateClient("WebAPI");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ namespace StellarChat.Client.Web.Services.Chat;
public interface IChatService
{
ValueTask<Paged<ChatSessionResponse>> BrowseChatSessions(int page = 0, int pageSize = 0);
ValueTask ChangeChatSessionTitle(Guid id, string title);
ValueTask DeleteChatSession(Guid id);
}
1 change: 1 addition & 0 deletions src/Client/StellarChat.Client.Web/_Imports.razor
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
@using StellarChat.Client.Web.Components
@using StellarChat.Shared.Contracts.Chat
@using StellarChat.Client.Web.Services.Chat
@using StellarChat.Client.Web.Models

0 comments on commit 2c4de3c

Please sign in to comment.