diff --git a/native/components/community-joiner-modal.react.js b/native/components/community-joiner-modal.react.js --- a/native/components/community-joiner-modal.react.js +++ b/native/components/community-joiner-modal.react.js @@ -15,9 +15,12 @@ import type { ClientCommunityInfoWithCommunityName } from 'lib/types/community-types.js'; import Modal from './modal.react.js'; +import type { NUXTip } from './nux-tips-context.react.js'; +import { nuxTip } from './nux-tips-context.react.js'; import CommunityList from '../components/community-list.react.js'; import type { RootNavigationProp } from '../navigation/root-navigator.react.js'; import type { NavigationRoute } from '../navigation/route-names.js'; +import { NUXTipOverlayBackdropRouteName } from '../navigation/route-names.js'; import { useSelector } from '../redux/redux-utils.js'; import { useColors, useStyles } from '../themes/colors.js'; import { @@ -28,8 +31,11 @@ export type CommunityJoinerModalParams = { +communities: $ReadOnlyArray, + +showCommunityDirectoryTip?: boolean, }; +const orderedTips: $ReadOnlyArray = [nuxTip.COMMUNITY_DIRECTORY]; + type Props = { +navigation: RootNavigationProp<'CommunityJoinerModal'>, +route: NavigationRoute<'CommunityJoinerModal'>, @@ -41,8 +47,9 @@ ]; function CommunityJoinerModal(props: Props): React.Node { - const { params } = props.route; - const { communities } = params; + const { navigation, route } = props; + const { navigate, goBack } = navigation; + const { communities, showCommunityDirectoryTip } = route.params; const viewerID = useSelector( state => state.currentUserInfo && state.currentUserInfo.id, @@ -191,8 +198,19 @@ [tabProps, styles.tabBarContainer], ); + const onClose = React.useCallback(() => { + if (showCommunityDirectoryTip) { + navigate<'NUXTipOverlayBackdrop'>({ + name: NUXTipOverlayBackdropRouteName, + params: { orderedTips }, + }); + } else { + goBack(); + } + }, [showCommunityDirectoryTip, navigate, goBack]); + return ( - + Discover communities diff --git a/native/components/directory-prompt-bottom-sheet.react.js b/native/components/directory-prompt-bottom-sheet.react.js --- a/native/components/directory-prompt-bottom-sheet.react.js +++ b/native/components/directory-prompt-bottom-sheet.react.js @@ -61,7 +61,7 @@ goBack(); navigate<'CommunityJoinerModal'>({ name: CommunityJoinerModalRouteName, - params: { communities }, + params: { communities, showCommunityDirectoryTip: true }, }); }, [communities, goBack, navigate]); diff --git a/native/components/modal.react.js b/native/components/modal.react.js --- a/native/components/modal.react.js +++ b/native/components/modal.react.js @@ -20,6 +20,7 @@ +modalStyle?: ViewStyle, +safeAreaEdges?: $ReadOnlyArray<'top' | 'right' | 'bottom' | 'left'>, +disableClosing?: boolean, + +onRequestClose?: () => void, }>; function Modal(props: Props): React.Node { const navigation = useNavigation(); @@ -27,10 +28,12 @@ if (props.disableClosing) { return; } - if (navigation.isFocused()) { + if (props.onRequestClose) { + props.onRequestClose(); + } else if (navigation.isFocused()) { navigation.goBack(); } - }, [navigation, props.disableClosing]); + }, [navigation, props]); const styles = useStyles(unboundStyles); const { containerStyle, modalStyle, children, safeAreaEdges } = props;