From 0a5e7a3231ea2b710434fa1fbea34fa476b63cb1 Mon Sep 17 00:00:00 2001 From: SergeantPanda Date: Fri, 22 Aug 2025 13:34:17 -0500 Subject: [PATCH] Enhance logo upload functionality: allow custom logo names and update handling in LogoForm component. Fixes [Bug]: Logo Manager not allowing a change to name field Fixes #320 --- apps/channels/api_views.py | 6 +++++- frontend/src/api.js | 7 ++++++- frontend/src/components/forms/Logo.jsx | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/channels/api_views.py b/apps/channels/api_views.py index d42d1851..ee3ef8b9 100644 --- a/apps/channels/api_views.py +++ b/apps/channels/api_views.py @@ -1387,10 +1387,14 @@ class LogoViewSet(viewsets.ModelViewSet): except Exception as e: logger.warning(f"Failed to mark logo file as processed in Redis: {e}") + # Get custom name from request data, fallback to filename + custom_name = request.data.get('name', '').strip() + logo_name = custom_name if custom_name else file_name + logo, _ = Logo.objects.get_or_create( url=file_path, defaults={ - "name": file_name, + "name": logo_name, }, ) diff --git a/frontend/src/api.js b/frontend/src/api.js index d34151a2..94205715 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -1331,11 +1331,16 @@ export default class API { } } - static async uploadLogo(file) { + static async uploadLogo(file, name = null) { try { const formData = new FormData(); formData.append('file', file); + // Add custom name if provided + if (name && name.trim()) { + formData.append('name', name.trim()); + } + // Add timeout handling for file uploads const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout diff --git a/frontend/src/components/forms/Logo.jsx b/frontend/src/components/forms/Logo.jsx index 6b8877bf..2452f633 100644 --- a/frontend/src/components/forms/Logo.jsx +++ b/frontend/src/components/forms/Logo.jsx @@ -52,7 +52,7 @@ const LogoForm = ({ logo = null, isOpen, onClose }) => { // If we have a selected file, upload it first if (selectedFile) { try { - const uploadResponse = await API.uploadLogo(selectedFile); + const uploadResponse = await API.uploadLogo(selectedFile, values.name); // Use the uploaded file data instead of form values values.name = uploadResponse.name; values.url = uploadResponse.url;