diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs index 7eadbe4839..590afa7603 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs @@ -1,5 +1,6 @@ using Content.Client._Sunrise.Messenger; using Content.Client.Resources; +using Content.Client.Stylesheets; using Content.Shared._Sunrise.Messenger; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; @@ -21,6 +22,11 @@ public sealed partial class MessagePanel : PanelContainer private ClientEmojiSystem? EmojiSystem => _entitySystemManager.GetEntitySystemOrNull(); private SpriteSystem GetSpriteSystem() => _entitySystemManager.GetEntitySystem(); + /// + /// ID сообщения для идентификации при обновлении + /// + public long MessageId { get; private set; } + private static readonly Type[] MessageTagsAllowed = [ typeof(BoldItalicTag), @@ -38,14 +44,38 @@ public sealed partial class MessagePanel : PanelContainer RobustXamlLoader.Load(this); } + public event Action? OnDeleteMessage; + private Button? _deleteButton; + public void UpdateMessage(MessengerMessage message, bool isOwnMessage, bool isPersonalChat, string? currentUserId) { + MessageId = message.MessageId; SenderLabel.Text = message.SenderName; TimeLabel.Text = message.Timestamp.ToString(@"hh\:mm"); var parsedContent = EmojiSystem?.ParseEmojis(message.Content) ?? message.Content; ContentLabel.SetMessage(FormattedMessage.FromMarkupPermissive(parsedContent), MessageTagsAllowed); + if (isOwnMessage && _deleteButton == null) + { + _deleteButton = new Button + { + Text = "✖", + SetWidth = 24, + SetHeight = 24, + ToolTip = Loc.GetString("messenger-delete-message"), + Margin = new Thickness(2, 0) + }; + _deleteButton.AddStyleClass(StyleClass.ButtonSmall); + _deleteButton.OnPressed += _ => OnDeleteMessage?.Invoke(MessageId); + RightContainer.AddChild(_deleteButton); + } + else if (!isOwnMessage && _deleteButton != null) + { + RightContainer.RemoveChild(_deleteButton); + _deleteButton = null; + } + var roundedButtonTex = _resourceCache.GetTexture("/Textures/Interface/Nano/rounded_button_bordered.svg.96dpi.png"); var roundedStyleBox = new StyleBoxTexture { diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs index 0867950af0..0db7b11624 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs @@ -29,6 +29,14 @@ public sealed partial class MessengerUi : UIFragment SendMessengerMessage(MessengerUiAction.RequestMessages, userInterface, chatId: chatId); _fragment.OnToggleMute += (chatId, isMuted) => SendMessengerMessage(MessengerUiAction.ToggleMute, userInterface, chatId: chatId, isMuted: isMuted); + _fragment.OnAcceptInvite += (groupId) => + SendMessengerMessage(MessengerUiAction.AcceptInvite, userInterface, groupId: groupId); + _fragment.OnDeclineInvite += (groupId) => + SendMessengerMessage(MessengerUiAction.DeclineInvite, userInterface, groupId: groupId); + _fragment.OnLeaveGroup += (groupId) => + SendMessengerMessage(MessengerUiAction.LeaveGroup, userInterface, groupId: groupId); + _fragment.OnDeleteMessage += (chatId, messageId) => + SendMessengerMessage(MessengerUiAction.DeleteMessage, userInterface, chatId: chatId, messageId: messageId); } public override void UpdateState(BoundUserInterfaceState state) @@ -48,9 +56,10 @@ public sealed partial class MessengerUi : UIFragment string? groupName = null, string? userId = null, string? chatId = null, - bool? isMuted = null) + bool? isMuted = null, + long? messageId = null) { - var messengerMessage = new MessengerUiMessageEvent(action, recipientId, groupId, content, groupName, userId, chatId, isMuted); + var messengerMessage = new MessengerUiMessageEvent(action, recipientId, groupId, content, groupName, userId, chatId, isMuted, messageId); var message = new CartridgeUiMessage(messengerMessage); userInterface.SendMessage(message); } diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml index 4c85109c3d..e6d9920aee 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml @@ -9,7 +9,7 @@ VerticalExpand="True"> -