From 90fd9930db107123826dba760f8d9c6ce65b5f09 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 3 Feb 2026 20:11:47 +0000 Subject: [PATCH] handle remove logo --- client/src/Pages/StatusPage/Create/index.tsx | 6 ++++-- .../repositories/status-pages/MongoStatusPagesRepository.ts | 6 ++++-- server/src/validation/joi.ts | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/client/src/Pages/StatusPage/Create/index.tsx b/client/src/Pages/StatusPage/Create/index.tsx index a9b85064f..0175c925a 100644 --- a/client/src/Pages/StatusPage/Create/index.tsx +++ b/client/src/Pages/StatusPage/Create/index.tsx @@ -94,8 +94,10 @@ const CreateStatusPage = () => { }); // Handle logo upload - if (data.logo?.data && data.logo.data !== "") { - // Only upload if it's a blob URL (new upload), not base64 (existing) + if (data.logo === null) { + // Signal to remove the logo + fd.append("removeLogo", "true"); + } else if (data.logo?.data && data.logo.data !== "") { if (data.logo.data.startsWith("blob:")) { try { const imageResult = await axios.get(data.logo.data, { diff --git a/server/src/repositories/status-pages/MongoStatusPagesRepository.ts b/server/src/repositories/status-pages/MongoStatusPagesRepository.ts index 921bf90f7..a19e738fd 100644 --- a/server/src/repositories/status-pages/MongoStatusPagesRepository.ts +++ b/server/src/repositories/status-pages/MongoStatusPagesRepository.ts @@ -105,14 +105,16 @@ class MongoStatusPagesRepository implements IStatusPagesRepository { return this.mapDocuments(statusPages); }; - updateById = async (id: string, teamId: string, image: Express.Multer.File | undefined, patch: Partial): Promise => { - const { logo: _logo, ...restPatch } = patch; + updateById = async (id: string, teamId: string, image: Express.Multer.File | undefined, patch: Partial & { removeLogo?: string }): Promise => { + const { logo: _logo, removeLogo, ...restPatch } = patch; const updateData: StatusPageUpdateData = { ...restPatch }; if (image) { updateData.logo = { data: image.buffer as Buffer, contentType: image.mimetype, }; + } else if (removeLogo === "true") { + updateData.logo = null; } const statusPage = await StatusPageModel.findOneAndUpdate({ teamId, _id: id }, updateData, { diff --git a/server/src/validation/joi.ts b/server/src/validation/joi.ts index 4ce471c79..d31e01420 100755 --- a/server/src/validation/joi.ts +++ b/server/src/validation/joi.ts @@ -480,6 +480,7 @@ const createStatusPageBodyValidation = joi.object({ showCharts: joi.boolean().optional(), showUptimePercentage: joi.boolean(), showAdminLoginLink: joi.boolean().optional(), + removeLogo: joi.string().valid("true", "false").optional(), }); const imageValidation = joi