From d0b2a66f08f4e8b7dc8e56922fa41b5680f5dd94 Mon Sep 17 00:00:00 2001 From: jbpenrath Date: Wed, 6 Aug 2025 09:45:39 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20draftBody=20can=20be?= =?UTF-8?q?=20null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was an error in the openapi schema and we are not aware that message.draftBody could be null so when it was the case, the frontend throws an error when rendering the `MessageForm` component. --- src/backend/core/api/openapi.json | 1 + src/backend/core/api/serializers.py | 2 +- src/frontend/src/features/api/gen/models/message.ts | 3 ++- .../src/features/forms/components/message-form/index.tsx | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/core/api/openapi.json b/src/backend/core/api/openapi.json index d0b58518..b985f918 100644 --- a/src/backend/core/api/openapi.json +++ b/src/backend/core/api/openapi.json @@ -4696,6 +4696,7 @@ }, "draftBody": { "type": "string", + "nullable": true, "readOnly": true }, "attachments": { diff --git a/src/backend/core/api/serializers.py b/src/backend/core/api/serializers.py index 4fe86f11..c070faf9 100644 --- a/src/backend/core/api/serializers.py +++ b/src/backend/core/api/serializers.py @@ -532,7 +532,7 @@ class MessageSerializer(serializers.ModelSerializer): """Return the list of HTML body parts (JMAP style).""" return instance.get_parsed_field("htmlBody") or [] - @extend_schema_field(serializers.CharField()) + @extend_schema_field(serializers.CharField(allow_null=True)) def get_draftBody(self, instance): # pylint: disable=invalid-name """Return an arbitrary JSON object representing the draft body.""" return ( diff --git a/src/frontend/src/features/api/gen/models/message.ts b/src/frontend/src/features/api/gen/models/message.ts index 9078fd7a..005378ab 100644 --- a/src/frontend/src/features/api/gen/models/message.ts +++ b/src/frontend/src/features/api/gen/models/message.ts @@ -29,7 +29,8 @@ export interface Message { readonly updated_at: string; readonly htmlBody: readonly MessageHtmlBodyItem[]; readonly textBody: readonly MessageTextBodyItem[]; - readonly draftBody: string; + /** @nullable */ + readonly draftBody: string | null; readonly attachments: readonly Attachment[]; readonly sender: Contact; readonly to: readonly Contact[]; diff --git a/src/frontend/src/features/forms/components/message-form/index.tsx b/src/frontend/src/features/forms/components/message-form/index.tsx index b4f9529b..92385c1b 100644 --- a/src/frontend/src/features/forms/components/message-form/index.tsx +++ b/src/frontend/src/features/forms/components/message-form/index.tsx @@ -145,7 +145,7 @@ export const MessageForm = ({ } const formDefaultValues = useMemo(() => { - const [draftBody, draftDriveAttachments] = MailHelper.extractDriveAttachmentsFromDraft(draft?.draftBody); + const [draftBody, draftDriveAttachments] = MailHelper.extractDriveAttachmentsFromDraft(draft?.draftBody ?? ''); return { from: defaultSenderId ?? '', to: draft?.to?.map(contact => contact.email) ?? recipients,