diff --git a/native/components/nux-tips-context.react.js b/native/components/nux-tips-context.react.js --- a/native/components/nux-tips-context.react.js +++ b/native/components/nux-tips-context.react.js @@ -10,9 +10,11 @@ CommunityDrawerTipRouteName, MutedTabTipRouteName, HomeTabTipRouteName, + IntroTipRouteName, } from '../navigation/route-names.js'; const nuxTip = Object.freeze({ + INTRO: 'intro', COMMUNITY_DRAWER: 'community_drawer', HOME: 'home', MUTED: 'muted', @@ -22,7 +24,7 @@ type NUXTipParams = { +nextTip: ?NUXTip, - +tooltipLocation: 'below' | 'above', + +tooltipLocation: 'below' | 'above' | 'absolute', +nextRouteName: ?NUXTipRouteNames, +exitingCallback?: ( navigation: AppNavigationProp, @@ -34,6 +36,11 @@ const nuxTipParams: { +[NUXTipParamsKeys]: NUXTipParams } = { [firstNUXTipKey]: { + nextTip: nuxTip.INTRO, + tooltipLocation: 'absolute', + nextRouteName: IntroTipRouteName, + }, + [nuxTip.INTRO]: { nextTip: nuxTip.COMMUNITY_DRAWER, tooltipLocation: 'below', nextRouteName: CommunityDrawerTipRouteName, @@ -102,6 +109,9 @@ const tipsProps = React.useMemo(() => { const result: { [tip: NUXTip]: TipProps } = {}; for (const type of values(nuxTip)) { + if (nuxTipParams[type].tooltipLocation === 'absolute') { + continue; + } if (!tipsPropsState[type]) { return null; } diff --git a/native/navigation/app-navigator.react.js b/native/navigation/app-navigator.react.js --- a/native/navigation/app-navigator.react.js +++ b/native/navigation/app-navigator.react.js @@ -8,6 +8,7 @@ import { CommunityDrawerNavigator } from './community-drawer-navigator.react.js'; import CommunityDrawerTip from './community-drawer-tip.react.js'; import HomeTabTip from './home-tab-tip.react.js'; +import IntroTip from './intro-tip.react.js'; import MutedTabTip from './muted-tab-tip.react.js'; import NUXTipOverlayBackdrop from './nux-tip-overlay-backdrop.react.js'; import { createOverlayNavigator } from './overlay-navigator.react.js'; @@ -21,6 +22,7 @@ CommunityDrawerTipRouteName, MutedTabTipRouteName, NUXTipOverlayBackdropRouteName, + IntroTipRouteName, } from './route-names.js'; import { UserAvatarCameraModalRouteName, @@ -163,6 +165,7 @@ name={VideoPlaybackModalRouteName} component={VideoPlaybackModal} /> + > = + createNUXTipsOverlay(undefined, introTipText); + +export default HomeTabTip; diff --git a/native/navigation/overlay-navigator.react.js b/native/navigation/overlay-navigator.react.js --- a/native/navigation/overlay-navigator.react.js +++ b/native/navigation/overlay-navigator.react.js @@ -43,10 +43,12 @@ MutedTabTipRouteName, NUXTipOverlayBackdropRouteName, HomeTabTipRouteName, + IntroTipRouteName, } from './route-names.js'; import { isMessageTooltipKey } from '../chat/utils.js'; const newReanimatedRoutes = new Set([ + IntroTipRouteName, CommunityDrawerTipRouteName, HomeTabTipRouteName, MutedTabTipRouteName, diff --git a/native/navigation/route-names.js b/native/navigation/route-names.js --- a/native/navigation/route-names.js +++ b/native/navigation/route-names.js @@ -168,6 +168,7 @@ export const TagFarcasterChannelByNameRouteName = 'TagFarcasterChannelByName'; export const ThreadSettingsNotificationsRouteName = 'ThreadSettingsNotifications'; +export const IntroTipRouteName = 'IntroTip'; export const CommunityDrawerTipRouteName = 'CommunityDrawerTip'; export const HomeTabTipRouteName = 'HomeTabTip'; export const MutedTabTipRouteName = 'MutedTabTip'; @@ -203,6 +204,7 @@ }; export type NUXTipRouteNames = + | typeof IntroTipRouteName | typeof CommunityDrawerTipRouteName | typeof HomeTabTipRouteName | typeof MutedTabTipRouteName; @@ -234,6 +236,7 @@ +ThreadAvatarCameraModal: ThreadAvatarCameraModalParams, +VideoPlaybackModal: VideoPlaybackModalParams, +TogglePinModal: TogglePinModalParams, + +IntroTip: NUXTipsOverlayParams, +CommunityDrawerTip: NUXTipsOverlayParams, +HomeTabTip: NUXTipsOverlayParams, +MutedTabTip: NUXTipsOverlayParams,