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:
@@ -2,10 +2,6 @@ FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Trust Windows/corporate root CAs before any network operations
|
||||
COPY certs/windows-ca-bundle.crt /usr/local/share/ca-certificates/windows-ca-bundle.crt
|
||||
RUN update-ca-certificates
|
||||
|
||||
# Install system dependencies including Node.js for yt-dlp JavaScript runtime
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
weasyprint \
|
||||
@@ -18,13 +14,18 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libmagic1 \
|
||||
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
||||
&& apt-get install -y --no-install-recommends nodejs \
|
||||
&& update-ca-certificates \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
# Trust Windows/corporate root CAs if present (optional, no-op when certs/ is absent)
|
||||
RUN test -f certs/windows-ca-bundle.crt \
|
||||
&& install -m 644 certs/windows-ca-bundle.crt /usr/local/share/ca-certificates/windows-ca-bundle.crt \
|
||||
&& update-ca-certificates \
|
||||
|| true
|
||||
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user