Add chat settings modal & reply previews

Introduce a full ChatSettingsModal component for managing group chats (rename/icon upload, add/remove members, toggle moderators, leave/delete) and wire it into ChatRoomPage with a settings button. Add reply preview support end-to-end: new ReplyToSerializer and members_detail in backend serializers, updated frontend Message model (reply_to now contains preview object), and UI changes to Message to render reply excerpts. Improve socket handling to attach reply previews when available. Tweak backend Dockerfile to optionally install Windows/corporate CA bundle only if present and move pip install after copying source. Add Czech translations and small tooling/.claude config enhancements.
This commit is contained in:
2026-05-29 00:41:43 +02:00
parent 8269d044a2
commit 3d1965e5e6
8 changed files with 574 additions and 14 deletions

View File

@@ -40,8 +40,18 @@ class MessageHistorySerializer(serializers.ModelSerializer):
read_only_fields = ['archived_at']
class ReplyToSerializer(serializers.ModelSerializer):
sender = MessageSenderSerializer(read_only=True)
class Meta:
model = Message
fields = ['id', 'content', 'sender']
read_only_fields = ['id', 'content', 'sender']
class MessageSerializer(serializers.ModelSerializer):
sender = MessageSenderSerializer(read_only=True)
reply_to = ReplyToSerializer(read_only=True)
media_files = MessageFileSerializer(many=True, read_only=True)
reactions = MessageReactionSerializer(many=True, read_only=True)
@@ -79,6 +89,7 @@ class MessageSendSerializer(serializers.Serializer):
class ChatSerializer(serializers.ModelSerializer):
unread_count = serializers.SerializerMethodField(read_only=True)
members_detail = MessageSenderSerializer(source='members', many=True, read_only=True)
@extend_schema_field(serializers.IntegerField())
def get_unread_count(self, obj):
@@ -98,8 +109,9 @@ class ChatSerializer(serializers.ModelSerializer):
'id', 'chat_type', 'owner', 'name',
'icon', 'banner', 'members', 'moderators',
'hub', 'created_at', 'updated_at', 'unread_count',
'members_detail',
]
read_only_fields = ['owner', 'created_at', 'updated_at', 'unread_count']
read_only_fields = ['owner', 'created_at', 'updated_at', 'unread_count', 'members_detail']
class ChatMemberSerializer(serializers.Serializer):