new-editor-utils.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { useUserSettingsContext } from '@/shared/context/user-settings-context'
  2. import getMeta from '@/utils/meta'
  3. import { isSplitTestEnabled, getSplitTestVariant } from '@/utils/splitTestUtils'
  4. export const ignoringUserCutoffDate =
  5. new URLSearchParams(window.location.search).get('skip-new-user-check') ===
  6. 'true'
  7. const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025
  8. export const isNewUser = () => {
  9. if (ignoringUserCutoffDate) return true
  10. const user = getMeta('ol-user')
  11. if (!user.signUpDate) return false
  12. const createdAt = new Date(user.signUpDate)
  13. return createdAt > NEW_USER_CUTOFF_DATE
  14. }
  15. export const canUseNewEditorViaPrimaryFeatureFlag = () => {
  16. return isSplitTestEnabled('editor-redesign')
  17. }
  18. export const canUseNewEditorViaNewUserFeatureFlag = () => {
  19. const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
  20. return (
  21. !canUseNewEditorViaPrimaryFeatureFlag() &&
  22. isNewUser() &&
  23. (newUserTestVariant === 'new-editor' ||
  24. newUserTestVariant === 'new-editor-old-logs' ||
  25. newUserTestVariant === 'new-editor-new-logs-old-position')
  26. )
  27. }
  28. export const canUseNewEditor = () => {
  29. return (
  30. canUseNewEditorViaPrimaryFeatureFlag() ||
  31. canUseNewEditorViaNewUserFeatureFlag()
  32. )
  33. }
  34. const canUseNewLogs = () => {
  35. const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
  36. const canUseNewLogsViaNewUserFeatureFlag =
  37. isNewUser() &&
  38. (newUserTestVariant === 'new-editor' ||
  39. newUserTestVariant === 'new-editor-new-logs-old-position')
  40. return (
  41. canUseNewEditorViaPrimaryFeatureFlag() || canUseNewLogsViaNewUserFeatureFlag
  42. )
  43. }
  44. export const useIsNewEditorEnabledViaPrimaryFeatureFlag = () => {
  45. const { userSettings } = useUserSettingsContext()
  46. const hasAccess = canUseNewEditorViaPrimaryFeatureFlag()
  47. const enabled = userSettings.enableNewEditor
  48. return hasAccess && enabled
  49. }
  50. export const useIsNewEditorEnabled = () => {
  51. const { userSettings } = useUserSettingsContext()
  52. const hasAccess = canUseNewEditor()
  53. const enabled = userSettings.enableNewEditor
  54. return hasAccess && enabled
  55. }
  56. export const useAreNewErrorLogsEnabled = () => {
  57. const newEditorEnabled = useIsNewEditorEnabled()
  58. return newEditorEnabled && canUseNewLogs()
  59. }
  60. export function useNewEditorVariant() {
  61. const newEditor = useIsNewEditorEnabled()
  62. const newErrorLogs = useAreNewErrorLogsEnabled()
  63. if (!newEditor) return 'default'
  64. if (!newErrorLogs) return 'new-editor-old-logs'
  65. return 'new-editor-new-logs-old-position'
  66. }