From 8ff3664ddef35eaba16d5bb019129f57c98bcfd1 Mon Sep 17 00:00:00 2001 From: Ishpaul Singh Date: Mon, 3 Mar 2025 01:18:48 +0530 Subject: [PATCH 1/6] close MigratedUserWelcomeModal if user is not a migrated user --- src/components/FeatureTrainingModal.tsx | 14 ++++++++-- src/components/MigratedUserWelcomeModal.tsx | 29 ++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 32c86a0af4767..6b6f93ab3e240 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -93,6 +93,9 @@ type BaseFeatureTrainingModalProps = { /** Modal width */ width?: number; + + /** Whether to disable the modal */ + isVisible?: boolean; }; type FeatureTrainingModalVideoProps = { @@ -140,6 +143,7 @@ function FeatureTrainingModal({ contentInnerContainerStyles, contentOuterContainerStyles, modalInnerContainerStyle, + isVisible: isVisibleProp = true, }: FeatureTrainingModalProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -154,8 +158,14 @@ function FeatureTrainingModal({ const {isOffline} = useNetwork(); useEffect(() => { - InteractionManager.runAfterInteractions(() => setIsModalVisible(true)); - }, []); + InteractionManager.runAfterInteractions(() => { + if (!isVisibleProp) { + setIsModalVisible(false) + return; + } + setIsModalVisible(true); + }); + }, [isVisibleProp]); useEffect(() => { if (isVideoStatusLocked) { diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 6a1221797bda8..339e22abc5623 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -1,5 +1,6 @@ -import React, {useLayoutEffect} from 'react'; +import React, {useEffect, useLayoutEffect, useState} from 'react'; import {View} from 'react-native'; +import {useOnyx} from 'react-native-onyx'; import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; @@ -7,8 +8,13 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {dismissProductTraining} from '@libs/actions/Welcome'; import convertToLTR from '@libs/convertToLTR'; import {parseFSAttributes} from '@libs/Fullstory'; +import Navigation from '@libs/Navigation/Navigation'; +import {tryNewDotOnyxSelector} from '@libs/onboardingSelectors'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; +import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; import type {FeatureListItem} from './FeatureList'; import FeatureTrainingModal from './FeatureTrainingModal'; import Icon from './Icon'; @@ -36,6 +42,26 @@ function OnboardingWelcomeVideo() { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const {shouldUseNarrowLayout} = useResponsiveLayout(); + const [isModalVisible, setIsModalVisible] = useState(true); + + const [tryNewDot, tryNewDotdMetadata] = useOnyx(ONYXKEYS.NVP_TRYNEWDOT, { + selector: tryNewDotOnyxSelector, + }); + const [dismissedProductTraining, dismissedProductTrainingMetadata] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING); + + const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; + + useEffect(() => { + if (isLoadingOnyxValue(tryNewDotdMetadata, dismissedProductTrainingMetadata)) { + return; + } + + if (hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) { + return; + } + setIsModalVisible(false); + Navigation.navigate(ROUTES.HOME); + }, [hasBeenAddedToNudgeMigration, dismissedProductTraining?.migratedUserWelcomeModal, setIsModalVisible, tryNewDotdMetadata, dismissedProductTrainingMetadata]); /** * Extracts values from the non-scraped attribute WEB_PROP_ATTR at build time @@ -62,6 +88,7 @@ function OnboardingWelcomeVideo() { contentInnerContainerStyles={[styles.mb5, styles.gap2]} contentOuterContainerStyles={!shouldUseNarrowLayout && [styles.mt8, styles.mh8]} modalInnerContainerStyle={{...styles.pt0, ...(shouldUseNarrowLayout ? {} : styles.pb8)}} + isVisible={isModalVisible} > Date: Mon, 3 Mar 2025 01:27:19 +0530 Subject: [PATCH 2/6] prettier --- src/components/FeatureTrainingModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 6b6f93ab3e240..eaad7e655997c 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -160,7 +160,7 @@ function FeatureTrainingModal({ useEffect(() => { InteractionManager.runAfterInteractions(() => { if (!isVisibleProp) { - setIsModalVisible(false) + setIsModalVisible(false); return; } setIsModalVisible(true); From 3cd1ecc72c0966efec5e4377e66bb5a9d45118d2 Mon Sep 17 00:00:00 2001 From: Ishpaul Singh Date: Thu, 6 Mar 2025 00:33:27 +0530 Subject: [PATCH 3/6] Navigate to default search query --- src/components/MigratedUserWelcomeModal.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 339e22abc5623..d4090d4f0f766 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -15,6 +15,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; +import {buildCannedSearchQuery} from '@libs/SearchQueryUtils'; import type {FeatureListItem} from './FeatureList'; import FeatureTrainingModal from './FeatureTrainingModal'; import Icon from './Icon'; @@ -49,19 +50,20 @@ function OnboardingWelcomeVideo() { }); const [dismissedProductTraining, dismissedProductTrainingMetadata] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING); - const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; useEffect(() => { if (isLoadingOnyxValue(tryNewDotdMetadata, dismissedProductTrainingMetadata)) { return; } + const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; if (hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) { return; } setIsModalVisible(false); - Navigation.navigate(ROUTES.HOME); - }, [hasBeenAddedToNudgeMigration, dismissedProductTraining?.migratedUserWelcomeModal, setIsModalVisible, tryNewDotdMetadata, dismissedProductTrainingMetadata]); + const defaultCannedQuery = buildCannedSearchQuery(); + Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: defaultCannedQuery})); + }, [dismissedProductTraining?.migratedUserWelcomeModal, setIsModalVisible, tryNewDotdMetadata, dismissedProductTrainingMetadata, tryNewDot]); /** * Extracts values from the non-scraped attribute WEB_PROP_ATTR at build time From b446235e771f0079fcabc780c5f948324f2bc40b Mon Sep 17 00:00:00 2001 From: Ishpaul Singh Date: Thu, 6 Mar 2025 00:39:39 +0530 Subject: [PATCH 4/6] fixes lint --- src/components/MigratedUserWelcomeModal.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index d4090d4f0f766..73653391d2ec3 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -10,12 +10,12 @@ import convertToLTR from '@libs/convertToLTR'; import {parseFSAttributes} from '@libs/Fullstory'; import Navigation from '@libs/Navigation/Navigation'; import {tryNewDotOnyxSelector} from '@libs/onboardingSelectors'; +import {buildCannedSearchQuery} from '@libs/SearchQueryUtils'; import variables from '@styles/variables'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; -import {buildCannedSearchQuery} from '@libs/SearchQueryUtils'; import type {FeatureListItem} from './FeatureList'; import FeatureTrainingModal from './FeatureTrainingModal'; import Icon from './Icon'; @@ -50,7 +50,6 @@ function OnboardingWelcomeVideo() { }); const [dismissedProductTraining, dismissedProductTrainingMetadata] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING); - useEffect(() => { if (isLoadingOnyxValue(tryNewDotdMetadata, dismissedProductTrainingMetadata)) { return; From bfb85c51e318198c2c3486d5cdd0a2bc1b59b149 Mon Sep 17 00:00:00 2001 From: Ishpaul Singh <104348397+ishpaul777@users.noreply.github.com> Date: Mon, 10 Mar 2025 21:12:40 +0530 Subject: [PATCH 5/6] Update src/components/FeatureTrainingModal.tsx --- src/components/FeatureTrainingModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index eaad7e655997c..8cd25c575c603 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -94,7 +94,7 @@ type BaseFeatureTrainingModalProps = { /** Modal width */ width?: number; - /** Whether to disable the modal */ + /** Whether the modal is visible */ isVisible?: boolean; }; From c443f561890113d3a6371d2ce03fdb9253f9ba64 Mon Sep 17 00:00:00 2001 From: Ishpaul Singh Date: Mon, 10 Mar 2025 21:23:08 +0530 Subject: [PATCH 6/6] change variable name --- src/components/FeatureTrainingModal.tsx | 10 +++++----- src/components/MigratedUserWelcomeModal.tsx | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 8cd25c575c603..613d786230f25 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -94,8 +94,8 @@ type BaseFeatureTrainingModalProps = { /** Modal width */ width?: number; - /** Whether the modal is visible */ - isVisible?: boolean; + /** Whether to disable the modal */ + isModalDisabled?: boolean; }; type FeatureTrainingModalVideoProps = { @@ -143,7 +143,7 @@ function FeatureTrainingModal({ contentInnerContainerStyles, contentOuterContainerStyles, modalInnerContainerStyle, - isVisible: isVisibleProp = true, + isModalDisabled = true, }: FeatureTrainingModalProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -159,13 +159,13 @@ function FeatureTrainingModal({ useEffect(() => { InteractionManager.runAfterInteractions(() => { - if (!isVisibleProp) { + if (!isModalDisabled) { setIsModalVisible(false); return; } setIsModalVisible(true); }); - }, [isVisibleProp]); + }, [isModalDisabled]); useEffect(() => { if (isVideoStatusLocked) { diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 73653391d2ec3..67ab58f1912c8 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -43,7 +43,7 @@ function OnboardingWelcomeVideo() { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const {shouldUseNarrowLayout} = useResponsiveLayout(); - const [isModalVisible, setIsModalVisible] = useState(true); + const [isModalDisabled, setIsModalDisabled] = useState(true); const [tryNewDot, tryNewDotdMetadata] = useOnyx(ONYXKEYS.NVP_TRYNEWDOT, { selector: tryNewDotOnyxSelector, @@ -59,10 +59,10 @@ function OnboardingWelcomeVideo() { if (hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) { return; } - setIsModalVisible(false); + setIsModalDisabled(false); const defaultCannedQuery = buildCannedSearchQuery(); Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: defaultCannedQuery})); - }, [dismissedProductTraining?.migratedUserWelcomeModal, setIsModalVisible, tryNewDotdMetadata, dismissedProductTrainingMetadata, tryNewDot]); + }, [dismissedProductTraining?.migratedUserWelcomeModal, setIsModalDisabled, tryNewDotdMetadata, dismissedProductTrainingMetadata, tryNewDot]); /** * Extracts values from the non-scraped attribute WEB_PROP_ATTR at build time @@ -89,7 +89,7 @@ function OnboardingWelcomeVideo() { contentInnerContainerStyles={[styles.mb5, styles.gap2]} contentOuterContainerStyles={!shouldUseNarrowLayout && [styles.mt8, styles.mh8]} modalInnerContainerStyle={{...styles.pt0, ...(shouldUseNarrowLayout ? {} : styles.pb8)}} - isVisible={isModalVisible} + isModalDisabled={isModalDisabled} >