diff --git a/src/app/Scenes/Onboarding/Auth2/components/AuthModal.tsx b/src/app/Scenes/Onboarding/Auth2/components/AuthModal.tsx index 734a437641a..2258ddde950 100644 --- a/src/app/Scenes/Onboarding/Auth2/components/AuthModal.tsx +++ b/src/app/Scenes/Onboarding/Auth2/components/AuthModal.tsx @@ -1,7 +1,8 @@ import { Box, Flex, useTheme } from "@artsy/palette-mobile" import { AuthContext } from "app/Scenes/Onboarding/Auth2/AuthContext" +import { useOnboardingAuth2Tracking } from "app/Scenes/Onboarding/Auth2/hooks/useOnboardingAuth2Tracking" import { MotiView } from "moti" -import { useMemo } from "react" +import { useEffect, useMemo } from "react" import { Dimensions } from "react-native" import { Easing } from "react-native-reanimated" import { useSafeAreaInsets } from "react-native-safe-area-context" @@ -24,6 +25,12 @@ export const AuthModal: React.FC = ({ children }) => { const { color, space } = useTheme() const insets = useSafeAreaInsets() + const tracking = useOnboardingAuth2Tracking() + + useEffect(() => { + tracking.authImpression() + }, []) + const screenHeight = Dimensions.get("window").height const height = useMemo(() => { diff --git a/src/app/Scenes/Onboarding/Auth2/hooks/useOnboardingAuth2Tracking.tsx b/src/app/Scenes/Onboarding/Auth2/hooks/useOnboardingAuth2Tracking.tsx new file mode 100644 index 00000000000..6eed4ea49bf --- /dev/null +++ b/src/app/Scenes/Onboarding/Auth2/hooks/useOnboardingAuth2Tracking.tsx @@ -0,0 +1,17 @@ +import { ActionType, AuthImpression } from "@artsy/cohesion" +import { useTracking } from "react-tracking" + +export const useOnboardingAuth2Tracking = () => { + const { trackEvent } = useTracking() + + return { + authImpression: () => { + const payload: Partial = { + action: ActionType.authImpression, + trigger: "tap", + } + + trackEvent(payload) + }, + } +} diff --git a/src/app/Scenes/Onboarding/Auth2/scenes/ForgotPasswordStep.tsx b/src/app/Scenes/Onboarding/Auth2/scenes/ForgotPasswordStep.tsx index b8bf9b37eb2..b8129513b7e 100644 --- a/src/app/Scenes/Onboarding/Auth2/scenes/ForgotPasswordStep.tsx +++ b/src/app/Scenes/Onboarding/Auth2/scenes/ForgotPasswordStep.tsx @@ -28,7 +28,7 @@ export const ForgotPasswordStep: React.FC = () => { if (!res) { setErrors({ email: - "Couldn’t send reset password link. Please try again, or contact support@artsy.net", + "Couldn't send reset password link. Please try again, or contact support@artsy.net", }) } else { navigation.setParams({ requestedPasswordReset: true }) @@ -48,6 +48,7 @@ export const ForgotPasswordStep: React.FC = () => { const ForgotPasswordStepForm: React.FC = () => { const { dirty, + errors, handleChange, handleSubmit, isSubmitting, @@ -86,7 +87,7 @@ const ForgotPasswordStepForm: React.FC = () => { - Forgot Password? + Forgot Password? {!requestedPasswordReset && ( @@ -97,7 +98,8 @@ const ForgotPasswordStepForm: React.FC = () => { {!!requestedPasswordReset ? ( - Password reset link sent. Please check your email. + Password reset link set—check your email. Please note, you must wait 5 minutes to + receive another link. ) : ( <> @@ -117,6 +119,7 @@ const ForgotPasswordStepForm: React.FC = () => { testID="email-address" textContentType="emailAddress" value={values.email} + error={errors.email} onChangeText={(text) => { handleChange("email")(text.trim()) }} diff --git a/src/app/Scenes/Onboarding/OnboardingCreateAccount/EmailSubscriptionCheckbox.tsx b/src/app/Scenes/Onboarding/OnboardingCreateAccount/EmailSubscriptionCheckbox.tsx index 5650c0d2176..f4c9d37d24c 100644 --- a/src/app/Scenes/Onboarding/OnboardingCreateAccount/EmailSubscriptionCheckbox.tsx +++ b/src/app/Scenes/Onboarding/OnboardingCreateAccount/EmailSubscriptionCheckbox.tsx @@ -1,4 +1,5 @@ import { Flex, Text, Touchable, Checkbox } from "@artsy/palette-mobile" +import { useFeatureFlag } from "app/utils/hooks/useFeatureFlag" interface EmailSubscriptionCheckboxProps { checked: boolean @@ -11,14 +12,24 @@ export const EmailSubscriptionCheckbox: React.FC checked, error, }) => { + const signupLoginFusionEnabled = useFeatureFlag("AREnableSignupLoginFusion") + return ( setChecked(!checked)}> setChecked(!checked)} mt={0.5}> - - Dive deeper into the art market with Artsy emails. Subscribe to hear about our products, - services, editorials, and other promotional content. Unsubscribe at any time. - + {signupLoginFusionEnabled ? ( + + Get Artsy's emails on the art market, products, services, editorial, and promotional + content. Unsubscribe at any time. + + ) : ( + + Dive deeper into the art market with Artsy emails. Subscribe to hear about our + products, services, editorials, and other promotional content. Unsubscribe at any + time. + + )} diff --git a/src/app/store/AuthModel.ts b/src/app/store/AuthModel.ts index 60ccc7f5fcb..f18d3422292 100644 --- a/src/app/store/AuthModel.ts +++ b/src/app/store/AuthModel.ts @@ -1,4 +1,4 @@ -import { ActionType, AuthService, CreatedAccount } from "@artsy/cohesion" +import { ActionType, AuthService, CreatedAccount, ResetYourPassword } from "@artsy/cohesion" import Braze from "@braze/react-native-sdk" import { appleAuth } from "@invertase/react-native-apple-authentication" import CookieManager from "@react-native-cookies/cookies" @@ -278,6 +278,8 @@ export const getAuthModel = (): AuthModel => ({ // For security purposes we don't want to disclose when a user is not found // this is indicated by 400 on gravity side, treat as success if (result.ok || result.status === 400) { + postEventToProviders(tracks.resetYourPassword()) + return true } return false @@ -880,4 +882,8 @@ const tracks = { action: ActionType.successfullyLoggedIn, service, }), + resetYourPassword: (): Partial => ({ + action: ActionType.resetYourPassword, + trigger: "tap", + }), }