فهرست منبع

Merge pull request #34394 from overleaf/as-link-sharing-groups-split-test

[web] Move group link sharing behind a separate split test

GitOrigin-RevId: c973a9bccb88f427a9f51d121b58a8799993e7c9
MoxAmber 1 ماه پیش
والد
کامیت
bd8a156908

+ 0 - 2
services/web/app/src/Features/Collaborators/CollaboratorsInviteHelper.mjs

@@ -43,7 +43,6 @@ async function encryptToken(token) {
   if (!accessTokenEncryptor) {
   if (!accessTokenEncryptor) {
     throw new Error('Token encryption not configured, could not encrypt token')
     throw new Error('Token encryption not configured, could not encrypt token')
   }
   }
-  logger.debug({ settings: Settings.projectInviteEncryptorOptions })
   return accessTokenEncryptor.promises.encryptJson(token)
   return accessTokenEncryptor.promises.encryptJson(token)
 }
 }
 
 
@@ -51,7 +50,6 @@ async function decryptToken(encryptedToken) {
   if (!accessTokenEncryptor) {
   if (!accessTokenEncryptor) {
     throw new Error('Token encryption not configured, could not encrypt token')
     throw new Error('Token encryption not configured, could not encrypt token')
   }
   }
-  logger.debug({ settings: Settings.projectInviteEncryptorOptions })
   return accessTokenEncryptor.promises.decryptToJson(encryptedToken)
   return accessTokenEncryptor.promises.decryptToJson(encryptedToken)
 }
 }
 
 

+ 1 - 0
services/web/app/src/Features/Project/ProjectController.mjs

@@ -495,6 +495,7 @@ const _ProjectController = {
       'editor-upgrade-button-relocation',
       'editor-upgrade-button-relocation',
       'markdown-visual',
       'markdown-visual',
       'ai-disabled-collaborators',
       'ai-disabled-collaborators',
+      'group-link-sharing',
     ].filter(Boolean)
     ].filter(Boolean)
 
 
     const getUserValues = async userId =>
     const getUserValues = async userId =>

+ 4 - 1
services/web/frontend/js/features/share-project-modal/components/project-access.tsx

@@ -29,6 +29,7 @@ import {
 } from '@/features/share-project-modal/components/share-project-modal'
 } from '@/features/share-project-modal/components/share-project-modal'
 import { ExcludeStrict } from '@ol-types/utils'
 import { ExcludeStrict } from '@ol-types/utils'
 import getMeta from '@/utils/meta'
 import getMeta from '@/utils/meta'
+import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 type ProjectAccessProps = {
 type ProjectAccessProps = {
   setIsInvitedPeopleScreen: React.Dispatch<React.SetStateAction<boolean>>
   setIsInvitedPeopleScreen: React.Dispatch<React.SetStateAction<boolean>>
@@ -50,6 +51,7 @@ function ProjectAccess({
   )
   )
   const { isProjectOwner } = useEditorContext()
   const { isProjectOwner } = useEditorContext()
   const { activeGroupSubscriptions } = getMeta('ol-user')
   const { activeGroupSubscriptions } = getMeta('ol-user')
+  const groupSharingEnabled = useFeatureFlag('group-link-sharing')
 
 
   const {
   const {
     monitorRequest,
     monitorRequest,
@@ -235,7 +237,8 @@ function ProjectAccess({
                     {t('only_invited_people')}
                     {t('only_invited_people')}
                   </DropdownItem>
                   </DropdownItem>
                 </DropdownListItem>
                 </DropdownListItem>
-                {activeGroupSubscriptions &&
+                {groupSharingEnabled &&
+                  activeGroupSubscriptions &&
                   activeGroupSubscriptions.map(subscription => (
                   activeGroupSubscriptions.map(subscription => (
                     <DropdownListItem
                     <DropdownListItem
                       className="d-flex align-items-center"
                       className="d-flex align-items-center"

+ 10 - 2
services/web/frontend/js/features/share-project-modal/components/share-project-modal.tsx

@@ -7,7 +7,10 @@ import React, {
 } from 'react'
 } from 'react'
 import ShareProjectModalContent from './share-project-modal-content'
 import ShareProjectModalContent from './share-project-modal-content'
 import { useProjectContext } from '@/shared/context/project-context'
 import { useProjectContext } from '@/shared/context/project-context'
-import { useSplitTestContext } from '@/shared/context/split-test-context'
+import {
+  useFeatureFlag,
+  useSplitTestContext,
+} from '@/shared/context/split-test-context'
 import { sendMB } from '@/infrastructure/event-tracking'
 import { sendMB } from '@/infrastructure/event-tracking'
 import { useEditorContext } from '@/shared/context/editor-context'
 import { useEditorContext } from '@/shared/context/editor-context'
 import customLocalStorage from '@/infrastructure/local-storage'
 import customLocalStorage from '@/infrastructure/local-storage'
@@ -93,6 +96,7 @@ const ShareProjectModal = React.memo(function ShareProjectModal({
   const { publicAccessLevel } = project || {}
   const { publicAccessLevel } = project || {}
 
 
   const { splitTestVariants } = useSplitTestContext()
   const { splitTestVariants } = useSplitTestContext()
+  const isSharingUpdatesEnabled = useFeatureFlag('sharing-updates')
 
 
   // show the new share modal if project owner
   // show the new share modal if project owner
   // is over collaborator limit or has pending editors (once every 24 hours)
   // is over collaborator limit or has pending editors (once every 24 hours)
@@ -147,6 +151,10 @@ const ShareProjectModal = React.memo(function ShareProjectModal({
   }, [show])
   }, [show])
 
 
   const handleShow = useCallback(async () => {
   const handleShow = useCallback(async () => {
+    if (!isSharingUpdatesEnabled || !isProjectOwner) {
+      return
+    }
+
     if (publicAccessLevel === 'tokenBased') {
     if (publicAccessLevel === 'tokenBased') {
       setSharingLinkData(null)
       setSharingLinkData(null)
       setProjectAccess('legacyLinkSharing')
       setProjectAccess('legacyLinkSharing')
@@ -179,7 +187,7 @@ const ShareProjectModal = React.memo(function ShareProjectModal({
           'generic_something_went_wrong'
           'generic_something_went_wrong'
       )
       )
     }
     }
-  }, [publicAccessLevel, projectId])
+  }, [publicAccessLevel, projectId, isSharingUpdatesEnabled, isProjectOwner])
 
 
   // close the modal if not in flight
   // close the modal if not in flight
   const cancel = useCallback(() => {
   const cancel = useCallback(() => {