From f395aca648f2149aacca0095adbbebbda22ffe91 Mon Sep 17 00:00:00 2001 From: Nathan Panchout Date: Thu, 5 Feb 2026 11:18:11 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20fix=20share=20modal=20?= =?UTF-8?q?owner=20message=20shown=20to=20wrong=20user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "only owner" message was displayed to all users when viewing the last owner's access, instead of only showing it to the owner themselves. Also simplify role restriction message logic by checking access.is_explicit instead of comparing available roles. Co-authored-by: Cursor --- .../modals/share/ItemShareModal.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/frontend/apps/drive/src/features/explorer/components/modals/share/ItemShareModal.tsx b/src/frontend/apps/drive/src/features/explorer/components/modals/share/ItemShareModal.tsx index 3ddf5907..f47a748f 100644 --- a/src/frontend/apps/drive/src/features/explorer/components/modals/share/ItemShareModal.tsx +++ b/src/frontend/apps/drive/src/features/explorer/components/modals/share/ItemShareModal.tsx @@ -33,6 +33,7 @@ import { useQueryClient } from "@tanstack/react-query"; import { useRouter } from "next/router"; import { useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; +import { useAuth } from "@/features/auth/Auth"; type WorkspaceShareModalProps = { isOpen: boolean; @@ -47,6 +48,7 @@ export const ItemShareModal = ({ }: WorkspaceShareModalProps) => { const { t } = useTranslation(); const queryClient = useQueryClient(); + const { user } = useAuth(); const copyToClipboard = useClipboard(); const itemId = initialItem.originalId ?? initialItem.id; const { data: item, refetch: refetchItem } = useItem(itemId, { @@ -359,19 +361,24 @@ export const ItemShareModal = ({ accessRoleTopMessage={(access) => { const availableRoles = access.abilities.set_role_to; const maxNbRoles = Object.values(Role).length; - if ( + const isLastOwner = ownerCount === 1 && availableRoles.length === 0 && - access.role === Role.OWNER - ) { + access.role === Role.OWNER; + if (isLastOwner) { + // If the current user is not the last owner, we don't show the message + if (user?.id !== access.user.id) { + return undefined; + } + return t("share_modal.options.top_message.only_owner"); } - if (availableRoles.length === 0 && access.role !== Role.OWNER) { - return t("share_modal.options.top_message.to_lower_role"); + + if (access.is_explicit) { + return undefined; } const canDelete = access.abilities.destroy && access.is_explicit; - const showRedirection = !canDelete || availableRoles.length < maxNbRoles;