|
@@ -2,13 +2,24 @@ import { useUserSettingsContext } from '@/shared/context/user-settings-context'
|
|
|
import getMeta from '@/utils/meta'
|
|
import getMeta from '@/utils/meta'
|
|
|
import { isSplitTestEnabled, getSplitTestVariant } from '@/utils/splitTestUtils'
|
|
import { isSplitTestEnabled, getSplitTestVariant } from '@/utils/splitTestUtils'
|
|
|
|
|
|
|
|
-export const ignoringUserCutoffDate =
|
|
|
|
|
|
|
+const ignoringUserCutoffDate =
|
|
|
new URLSearchParams(window.location.search).get('skip-new-user-check') ===
|
|
new URLSearchParams(window.location.search).get('skip-new-user-check') ===
|
|
|
'true'
|
|
'true'
|
|
|
|
|
|
|
|
-const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
|
|
|
|
|
|
|
+// For E2E tests, allow forcing a user to be treated as an existing user
|
|
|
|
|
+const existingUserOverride =
|
|
|
|
|
+ new URLSearchParams(window.location.search).get('existing-user-override') ===
|
|
|
|
|
+ 'true'
|
|
|
|
|
+
|
|
|
|
|
+// We don't want to enable the new editor on server-pro/CE until we have fully rolled it out on SaaS
|
|
|
|
|
+const { isOverleaf } = getMeta('ol-ExposedSettings')
|
|
|
|
|
+
|
|
|
|
|
+const SPLIT_TEST_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
|
|
|
|
|
+const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 10, 12, 12, 0, 0)) // 12pm GMT on November 12, 2025
|
|
|
|
|
|
|
|
export const isNewUser = () => {
|
|
export const isNewUser = () => {
|
|
|
|
|
+ if (existingUserOverride) return false
|
|
|
|
|
+
|
|
|
if (ignoringUserCutoffDate) return true
|
|
if (ignoringUserCutoffDate) return true
|
|
|
const user = getMeta('ol-user')
|
|
const user = getMeta('ol-user')
|
|
|
|
|
|
|
@@ -18,32 +29,37 @@ export const isNewUser = () => {
|
|
|
return createdAt > NEW_USER_CUTOFF_DATE
|
|
return createdAt > NEW_USER_CUTOFF_DATE
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export const canUseNewEditorViaPrimaryFeatureFlag = () => {
|
|
|
|
|
- return isSplitTestEnabled('editor-redesign')
|
|
|
|
|
-}
|
|
|
|
|
|
|
+export const isSplitTestUser = () => {
|
|
|
|
|
+ if (existingUserOverride) return false
|
|
|
|
|
|
|
|
-export const canUseNewEditorViaNewUserFeatureFlag = () => {
|
|
|
|
|
- const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
|
|
|
|
|
|
|
+ const user = getMeta('ol-user')
|
|
|
|
|
+ if (!user.signUpDate) return false
|
|
|
|
|
|
|
|
|
|
+ const createdAt = new Date(user.signUpDate)
|
|
|
return (
|
|
return (
|
|
|
- !canUseNewEditorViaPrimaryFeatureFlag() &&
|
|
|
|
|
- isNewUser() &&
|
|
|
|
|
- (newUserTestVariant === 'new-editor' ||
|
|
|
|
|
- newUserTestVariant === 'new-editor-old-logs' ||
|
|
|
|
|
- newUserTestVariant === 'new-editor-new-logs-old-position')
|
|
|
|
|
|
|
+ createdAt > SPLIT_TEST_USER_CUTOFF_DATE && createdAt <= NEW_USER_CUTOFF_DATE
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export const canUseNewEditor = () => {
|
|
|
|
|
|
|
+export const canUseNewEditorAsExistingUser = () => {
|
|
|
|
|
+ return !canUseNewEditorAsNewUser() && isSplitTestEnabled('editor-redesign')
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export const canUseNewEditorAsNewUser = () => {
|
|
|
|
|
+ const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
|
|
|
return (
|
|
return (
|
|
|
- canUseNewEditorViaPrimaryFeatureFlag() ||
|
|
|
|
|
- canUseNewEditorViaNewUserFeatureFlag()
|
|
|
|
|
|
|
+ isOverleaf &&
|
|
|
|
|
+ (isNewUser() || (isSplitTestUser() && newUserTestVariant !== 'default'))
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export const useIsNewEditorEnabledViaPrimaryFeatureFlag = () => {
|
|
|
|
|
|
|
+export const canUseNewEditor = () => {
|
|
|
|
|
+ return canUseNewEditorAsExistingUser() || canUseNewEditorAsNewUser()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export const useIsNewEditorEnabledAsExistingUser = () => {
|
|
|
const { userSettings } = useUserSettingsContext()
|
|
const { userSettings } = useUserSettingsContext()
|
|
|
- const hasAccess = canUseNewEditorViaPrimaryFeatureFlag()
|
|
|
|
|
|
|
+ const hasAccess = canUseNewEditorAsExistingUser()
|
|
|
const enabled = userSettings.enableNewEditor
|
|
const enabled = userSettings.enableNewEditor
|
|
|
return hasAccess && enabled
|
|
return hasAccess && enabled
|
|
|
}
|
|
}
|
|
@@ -54,9 +70,3 @@ export const useIsNewEditorEnabled = () => {
|
|
|
const enabled = userSettings.enableNewEditor
|
|
const enabled = userSettings.enableNewEditor
|
|
|
return hasAccess && enabled
|
|
return hasAccess && enabled
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-export function useNewEditorVariant() {
|
|
|
|
|
- const newEditor = useIsNewEditorEnabled()
|
|
|
|
|
- if (!newEditor) return 'default'
|
|
|
|
|
- return 'new-editor-new-logs-old-position'
|
|
|
|
|
-}
|
|
|