UNPKG

@sky-mavis/tanto-widget

Version:
101 lines (97 loc) 3.41 kB
'use strict'; var jsxRuntime = require('@emotion/react/jsx-runtime'); var react = require('react'); var wagmi = require('wagmi'); var analytic = require('../../analytic.cjs'); var viewConfigs = require('../../configs/viewConfigs.cjs'); var index = require('../../constants/index.cjs'); var useTantoConfig = require('../../hooks/useTantoConfig.cjs'); var useUnmount = require('../../hooks/useUnmount.cjs'); var route = require('../../types/route.cjs'); var WidgetRouterContext = require('./WidgetRouterContext.cjs'); const WidgetRouterProvider = ({ children }) => { const { disableProfile } = useTantoConfig.useTantoConfig(); const { isConnected } = wagmi.useAccount(); const getInitialView = react.useCallback(route$1 => { if (route$1) return viewConfigs.viewConfigs[route$1]; return isConnected && !disableProfile ? viewConfigs.viewConfigs[route.Route.PROFILE] : viewConfigs.viewConfigs[route.Route.WALLETS]; }, [isConnected, disableProfile]); const [routerState, setRouterState] = react.useState(() => { const initialView = getInitialView(); return { view: initialView, history: [initialView] }; }); const reset = react.useCallback(route => { const initialView = getInitialView(route); setRouterState({ view: initialView, history: [initialView] }); }, [getInitialView]); const goTo = react.useCallback((nextRoute, options) => { if (!isConnected && route.authenticatedRoutes.includes(nextRoute)) return; setRouterState(({ view: currentView, history }) => { const isSameView = nextRoute === currentView.route; const newView = { route: nextRoute, title: options?.title ?? currentView.title, content: options?.content ?? viewConfigs.viewConfigs[nextRoute].content, showBackButton: options?.showBackButton ?? (!isSameView && history.length > 0), ...options }; return { view: newView, history: isSameView ? history : [...history, newView] }; }); }, [isConnected]); const goBack = react.useCallback(() => { setRouterState(prevRouterState => { const { history } = prevRouterState; if (history.length <= 1) return prevRouterState; const newHistory = history.slice(0, -1); return { view: newHistory[newHistory.length - 1], history: newHistory }; }); }, []); react.useEffect(() => { const { route: route$1 } = routerState.view; const shouldReset = isConnected && !disableProfile && route.publicRoutes.includes(route$1) || !isConnected && route.authenticatedRoutes.includes(route$1); if (shouldReset) reset(); }, [isConnected, disableProfile, routerState.view.route, reset]); useUnmount.useUnmount(() => { if (route.internalRoutes.includes(routerState.view.route)) setTimeout(reset, index.VISIBILITY_TRANSITION_DURATION); }); react.useEffect(() => { analytic.analytic.sendScreen(routerState.view.route); }, [routerState.view.route]); const contextValue = react.useMemo(() => ({ view: routerState.view, history: routerState.history, goTo, goBack, reset }), [routerState, goTo, goBack, reset]); return jsxRuntime.jsx(WidgetRouterContext.WidgetRouterContext.Provider, { value: contextValue, children: children }); }; exports.WidgetRouterProvider = WidgetRouterProvider;