Files
overleaf-cep/services/web/frontend/js/features/ide-redesign/utils/new-editor-utils.ts
T
Jakob Ackermann f3f6a8a8e0 [web] add clsi-cache prompts (#29281)
* [web] add clsi-cache prompts

* [web] add new editor variant to segmentation

* [web] add tests for useNewEditorVariant

* [web] adjust start of using clsi-cache in split-test

GitOrigin-RevId: c9c5b1eff2ceefb65ef82516d9074cb971cb4c48
2025-10-24 08:05:42 +00:00

99 lines
3.1 KiB
TypeScript

import { useUserSettingsContext } from '@/shared/context/user-settings-context'
import getMeta from '@/utils/meta'
import { isSplitTestEnabled, getSplitTestVariant } from '@/utils/splitTestUtils'
export const ignoringUserCutoffDate =
new URLSearchParams(window.location.search).get('skip-new-user-check') ===
'true'
const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
export const isNewUser = () => {
if (ignoringUserCutoffDate) return true
const user = getMeta('ol-user')
if (!user.signUpDate) return false
const createdAt = new Date(user.signUpDate)
return createdAt > NEW_USER_CUTOFF_DATE
}
export const canUseNewEditorViaPrimaryFeatureFlag = () => {
return isSplitTestEnabled('editor-redesign')
}
export const canUseNewEditorViaNewUserFeatureFlag = () => {
const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
return (
!canUseNewEditorViaPrimaryFeatureFlag() &&
isNewUser() &&
(newUserTestVariant === 'new-editor' ||
newUserTestVariant === 'new-editor-old-logs' ||
newUserTestVariant === 'new-editor-new-logs-old-position')
)
}
export const canUseNewEditor = () => {
return (
canUseNewEditorViaPrimaryFeatureFlag() ||
canUseNewEditorViaNewUserFeatureFlag()
)
}
const canUseNewLogsPosition = () => {
const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
const canUseNewLogsViaNewUserFeatureFlag =
isNewUser() && newUserTestVariant === 'new-editor'
return (
canUseNewEditorViaPrimaryFeatureFlag() || canUseNewLogsViaNewUserFeatureFlag
)
}
const canUseNewLogs = () => {
const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
const canUseNewLogsViaNewUserFeatureFlag =
isNewUser() &&
(newUserTestVariant === 'new-editor' ||
newUserTestVariant === 'new-editor-new-logs-old-position')
return (
canUseNewEditorViaPrimaryFeatureFlag() || canUseNewLogsViaNewUserFeatureFlag
)
}
export const useIsNewEditorEnabledViaPrimaryFeatureFlag = () => {
const { userSettings } = useUserSettingsContext()
const hasAccess = canUseNewEditorViaPrimaryFeatureFlag()
const enabled = userSettings.enableNewEditor
return hasAccess && enabled
}
export const useIsNewEditorEnabled = () => {
const { userSettings } = useUserSettingsContext()
const hasAccess = canUseNewEditor()
const enabled = userSettings.enableNewEditor
return hasAccess && enabled
}
export const useIsNewErrorLogsPositionEnabled = () => {
const newEditorEnabled = useIsNewEditorEnabled()
return newEditorEnabled && canUseNewLogsPosition()
}
export const useAreNewErrorLogsEnabled = () => {
const newEditorEnabled = useIsNewEditorEnabled()
return newEditorEnabled && canUseNewLogs()
}
export function useNewEditorVariant() {
const newEditor = useIsNewEditorEnabled()
const newErrorLogs = useAreNewErrorLogsEnabled()
const newErrorLogsPosition = useIsNewErrorLogsPositionEnabled()
if (!newEditor) return 'default'
if (!newErrorLogs) return 'new-editor-old-logs'
if (!newErrorLogsPosition) return 'new-editor-new-logs-old-position'
return 'new-editor'
}