new-editor-utils.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. // TODO: change this when we have a launch date
  8. const NEW_USER_CUTOFF_DATE = new Date('2100-01-01')
  9. export const isNewUser = () => {
  10. if (ignoringUserCutoffDate) return true
  11. const user = getMeta('ol-user')
  12. if (!user.signUpDate) return false
  13. const createdAt = new Date(user.signUpDate)
  14. return createdAt > NEW_USER_CUTOFF_DATE
  15. }
  16. export const canUseNewEditorViaPrimaryFeatureFlag = () => {
  17. return isSplitTestEnabled('editor-redesign')
  18. }
  19. export const canUseNewEditorViaNewUserFeatureFlag = () => {
  20. const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
  21. return (
  22. !canUseNewEditorViaPrimaryFeatureFlag() &&
  23. isNewUser() &&
  24. (newUserTestVariant === 'new-editor' ||
  25. newUserTestVariant === 'new-editor-old-logs' ||
  26. newUserTestVariant === 'new-editor-new-logs-old-position')
  27. )
  28. }
  29. export const canUseNewEditor = () => {
  30. return (
  31. canUseNewEditorViaPrimaryFeatureFlag() ||
  32. canUseNewEditorViaNewUserFeatureFlag()
  33. )
  34. }
  35. const canUseNewLogsPosition = () => {
  36. const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
  37. const canUseNewLogsViaNewUserFeatureFlag =
  38. isNewUser() && newUserTestVariant === 'new-editor'
  39. return (
  40. canUseNewEditorViaPrimaryFeatureFlag() || canUseNewLogsViaNewUserFeatureFlag
  41. )
  42. }
  43. const canUseNewLogs = () => {
  44. const newUserTestVariant = getSplitTestVariant('editor-redesign-new-users')
  45. const canUseNewLogsViaNewUserFeatureFlag =
  46. isNewUser() &&
  47. (newUserTestVariant === 'new-editor' ||
  48. newUserTestVariant === 'new-editor-new-logs-old-position')
  49. return (
  50. canUseNewEditorViaPrimaryFeatureFlag() || canUseNewLogsViaNewUserFeatureFlag
  51. )
  52. }
  53. export const useIsNewEditorEnabledViaPrimaryFeatureFlag = () => {
  54. const { userSettings } = useUserSettingsContext()
  55. const hasAccess = canUseNewEditorViaPrimaryFeatureFlag()
  56. const enabled = userSettings.enableNewEditor
  57. return hasAccess && enabled
  58. }
  59. export const useIsNewEditorEnabled = () => {
  60. const { userSettings } = useUserSettingsContext()
  61. const hasAccess = canUseNewEditor()
  62. const enabled = userSettings.enableNewEditor
  63. return hasAccess && enabled
  64. }
  65. export const useIsNewErrorLogsPositionEnabled = () => {
  66. const newEditorEnabled = useIsNewEditorEnabled()
  67. return newEditorEnabled && canUseNewLogsPosition()
  68. }
  69. export const useAreNewErrorLogsEnabled = () => {
  70. const newEditorEnabled = useIsNewEditorEnabled()
  71. return newEditorEnabled && canUseNewLogs()
  72. }