From 668e725dc532674580aeb305b48b996463835858 Mon Sep 17 00:00:00 2001
From: AlexisG <merkkur39@gmail.com>
Date: Thu, 30 Jan 2025 15:16:39 +0100
Subject: [PATCH 1/4] fix: The edit button must be displayed for OO shares with
 write access

---
 src/modules/views/OnlyOffice/Toolbar/index.jsx | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/modules/views/OnlyOffice/Toolbar/index.jsx b/src/modules/views/OnlyOffice/Toolbar/index.jsx
index d86f71a819..c696a17832 100644
--- a/src/modules/views/OnlyOffice/Toolbar/index.jsx
+++ b/src/modules/views/OnlyOffice/Toolbar/index.jsx
@@ -22,12 +22,14 @@ import HomeIcon from 'modules/views/OnlyOffice/Toolbar/HomeIcon'
 import HomeLinker from 'modules/views/OnlyOffice/Toolbar/HomeLinker'
 import Separator from 'modules/views/OnlyOffice/Toolbar/Separator'
 import Sharing from 'modules/views/OnlyOffice/Toolbar/Sharing'
+import { isOfficeEditingEnabled } from 'modules/views/OnlyOffice/helpers'
 import { useFileWithPath } from 'modules/views/hooks'
 
 const Toolbar = ({ sharingInfos }) => {
-  const { isMobile } = useBreakpoints()
+  const { isMobile, isDesktop } = useBreakpoints()
+  const { isEditorReady, isReadOnly, isTrashed, fileId, isPublic } =
+    useOnlyOfficeContext()
   const { t } = useI18n()
-  const { fileId, isPublic, isEditorReady } = useOnlyOfficeContext()
   const {
     addSharingLink,
     syncSharingLink,
@@ -65,6 +67,12 @@ const Toolbar = ({ sharingInfos }) => {
       isSharingShortcutCreated
     }
   )
+  const showEditButton =
+    !isMobile &&
+    isEditorReady &&
+    !isReadOnly &&
+    !isTrashed &&
+    isOfficeEditingEnabled(isDesktop)
 
   return (
     <>
@@ -94,6 +102,7 @@ const Toolbar = ({ sharingInfos }) => {
           isSharingShortcutCreated={isSharingShortcutCreated}
         />
       )}
+      {showEditButton && <EditButton />}
 
       {isPublic && (
         <PublicToolbarMoreMenu files={[fileWithPath]} actions={actions} />

From d75d05b31752bc7b6efd79b14a6980a64ae3a691 Mon Sep 17 00:00:00 2001
From: AlexisG <merkkur39@gmail.com>
Date: Thu, 30 Jan 2025 15:17:52 +0100
Subject: [PATCH 2/4] feat(OO): Use `isEditorModeView` instead `editorMode`

---
 src/modules/views/OnlyOffice/Toolbar/EditButton.jsx | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx b/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
index 7f1a38e422..5f4f8bbc4c 100644
--- a/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
+++ b/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
@@ -8,7 +8,6 @@ import LightbulbIcon from 'cozy-ui/transpiled/react/Icons/Lightbulb'
 import RenameIcon from 'cozy-ui/transpiled/react/Icons/Rename'
 import Tooltip from 'cozy-ui/transpiled/react/Tooltip'
 import Typography from 'cozy-ui/transpiled/react/Typography'
-import useBreakpoints from 'cozy-ui/transpiled/react/providers/Breakpoints'
 import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n'
 import { makeStyles } from 'cozy-ui/transpiled/react/styles'
 
@@ -109,8 +108,7 @@ const EditButton = ({ openTooltip }) => {
 }
 
 const EditButtonWrapper = () => {
-  const { isMobile } = useBreakpoints()
-  const { editorMode } = useOnlyOfficeContext()
+  const { isEditorModeView } = useOnlyOfficeContext()
 
   const { data: settings, ...appSettingsQueryResult } = useQuery(
     getAppSettingQuery.definition,
@@ -119,11 +117,7 @@ const EditButtonWrapper = () => {
   const hideOOEditTooltip = settings?.[0]?.hideOOEditTooltip
   const openTooltip = isQueryLoading(appSettingsQueryResult)
     ? false
-    : !hideOOEditTooltip && editorMode === 'view' && canWriteOfficeDocument()
-
-  if (isMobile) {
-    return null
-  }
+    : !hideOOEditTooltip && isEditorModeView && canWriteOfficeDocument()
 
   return <EditButton openTooltip={openTooltip} />
 }

From f3d0511d04bee6998d778f19aacb9be68f45d953 Mon Sep 17 00:00:00 2001
From: AlexisG <merkkur39@gmail.com>
Date: Thu, 30 Jan 2025 16:32:52 +0100
Subject: [PATCH 3/4] fix(OO): Hide `OpenSharingLinkButton` to Cozy to Cozy
 sharing

And `SharingBannerPlugin`
---
 src/modules/views/OnlyOffice/Title.jsx         | 12 +++++++++---
 src/modules/views/OnlyOffice/Toolbar/index.jsx | 12 ++++++++++--
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/modules/views/OnlyOffice/Title.jsx b/src/modules/views/OnlyOffice/Title.jsx
index 7ddd4869c9..f4d225f08c 100644
--- a/src/modules/views/OnlyOffice/Title.jsx
+++ b/src/modules/views/OnlyOffice/Title.jsx
@@ -1,4 +1,5 @@
 import React from 'react'
+import { useSearchParams } from 'react-router-dom'
 
 import { SharingBannerPlugin, OpenSharingLinkFabButton } from 'cozy-sharing'
 import { useSharingInfos } from 'cozy-sharing'
@@ -20,6 +21,7 @@ const useStyles = makeStyles(theme => ({
 }))
 
 const Title = () => {
+  const [searchParams] = useSearchParams(window.location.search)
   const { isMobile } = useBreakpoints()
   const { fileId, isPublic, isEditorModeView, isTrashed } =
     useOnlyOfficeContext()
@@ -30,15 +32,19 @@ const Title = () => {
   // Check if the sharing shortcut has already been created (but not synced)
   const isShareAlreadyAdded = !loading && isSharingShortcutCreated
   // Check if you are sharing Cozy to Cozy (Link sharing is on the `/public` route)
-  const isPreview = window.location.pathname === '/preview'
+  const isCozyToCozySharing = window.location.pathname === '/preview'
+  // Check if you are sharing Cozy to Cozy synced (Also on the `/public` route)
+  const isCozyToCozySharingSynced = searchParams.has('username')
   // Show the sharing banner plugin only on shared links view and cozy to cozy sharing view(not added)
   const isSharingBannerPluginDisplayed =
-    isPublic && (!isShareAlreadyAdded || !isPreview)
+    isPublic &&
+    (!isShareAlreadyAdded || !isCozyToCozySharing) &&
+    !isCozyToCozySharingSynced
 
   const showDialogToolbar = isEditorModeView || !isMobile
 
   const isAddToMyCozyFabDisplayed =
-    isMobile && isPreview && !isShareAlreadyAdded
+    isMobile && isCozyToCozySharing && !isShareAlreadyAdded
 
   return (
     <div style={{ zIndex: 'var(--zIndex-nav)' }}>
diff --git a/src/modules/views/OnlyOffice/Toolbar/index.jsx b/src/modules/views/OnlyOffice/Toolbar/index.jsx
index c696a17832..9c4ce172eb 100644
--- a/src/modules/views/OnlyOffice/Toolbar/index.jsx
+++ b/src/modules/views/OnlyOffice/Toolbar/index.jsx
@@ -1,4 +1,5 @@
 import React from 'react'
+import { useSearchParams } from 'react-router-dom'
 
 import {
   addToCozySharingLink,
@@ -27,6 +28,7 @@ import { useFileWithPath } from 'modules/views/hooks'
 
 const Toolbar = ({ sharingInfos }) => {
   const { isMobile, isDesktop } = useBreakpoints()
+  const [searchParams] = useSearchParams(window.location.search)
   const { isEditorReady, isReadOnly, isTrashed, fileId, isPublic } =
     useOnlyOfficeContext()
   const { t } = useI18n()
@@ -50,6 +52,8 @@ const Toolbar = ({ sharingInfos }) => {
   const isShareNotAdded = !loading && !isSharingShortcutCreated
   // Check if you are sharing Cozy to Cozy (Link sharing is on the `/public` route)
   const isCozyToCozySharing = window.location.pathname === '/preview'
+  // Check if you are sharing Cozy to Cozy synced (Also on the `/public` route)
+  const isCozyToCozySharingSynced = searchParams.has('username')
 
   // addSharingLink exists only in cozy to cozy sharing
   const link = isCozyToCozySharing ? addSharingLink : createCozyLink
@@ -74,6 +78,9 @@ const Toolbar = ({ sharingInfos }) => {
     !isTrashed &&
     isOfficeEditingEnabled(isDesktop)
 
+  const showSharingLinkButton =
+    isPublic && !isMobile && isShareNotAdded && !isCozyToCozySharingSynced
+
   return (
     <>
       <FilesRealTimeQueries />
@@ -96,15 +103,16 @@ const Toolbar = ({ sharingInfos }) => {
         )}
         <FileName fileWithPath={fileWithPath} isPublic={isPublic} />
       </div>
-      {isPublic && !isMobile && isShareNotAdded && (
+      {showSharingLinkButton && (
         <OpenSharingLinkButton
           link={link}
           isSharingShortcutCreated={isSharingShortcutCreated}
+          variant={showEditButton ? 'secondary' : 'primary'}
         />
       )}
       {showEditButton && <EditButton />}
 
-      {isPublic && (
+      {isPublic && !isCozyToCozySharingSynced && (
         <PublicToolbarMoreMenu files={[fileWithPath]} actions={actions} />
       )}
 

From f0eda8a1553ac165e189380cce1b15f3fd41c05b Mon Sep 17 00:00:00 2001
From: AlexisG <merkkur39@gmail.com>
Date: Thu, 30 Jan 2025 16:35:11 +0100
Subject: [PATCH 4/4] fix(OO): Hide tooltip on Edit button

Being in the public view, queries are not allowed,
so the tooltip cannot save its hidden state when
the user chooses it.
---
 src/modules/views/OnlyOffice/Toolbar/EditButton.jsx | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx b/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
index 5f4f8bbc4c..909d633ae5 100644
--- a/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
+++ b/src/modules/views/OnlyOffice/Toolbar/EditButton.jsx
@@ -107,7 +107,7 @@ const EditButton = ({ openTooltip }) => {
   )
 }
 
-const EditButtonWrapper = () => {
+const EditButtonWithQuery = () => {
   const { isEditorModeView } = useOnlyOfficeContext()
 
   const { data: settings, ...appSettingsQueryResult } = useQuery(
@@ -122,4 +122,14 @@ const EditButtonWrapper = () => {
   return <EditButton openTooltip={openTooltip} />
 }
 
+const EditButtonWrapper = () => {
+  const { isPublic } = useOnlyOfficeContext()
+
+  if (isPublic) {
+    return <EditButtonWithQuery />
+  }
+
+  return <EditButton openTooltip={false} />
+}
+
 export default EditButtonWrapper