import React, { useContext, useRef, useState } from 'react'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import Navigator from './Navigator'; import { WidgetContainerProps } from './types'; import { ApplicationContext, MiniAppContext } from '../Context'; import Localize from './Localize'; import { defaultTheme } from '../Consts'; import { NavigationContainer as ReactNavigationContainer, NavigationContainerRef, NavigationIndependentTree, } from '@react-navigation/native'; import { getModalOptions } from './utils'; import { createStackNavigator } from '@react-navigation/stack'; import ModalScreen from './ModalScreen'; import { View } from 'react-native'; const Stack = createStackNavigator(); const WidgetContent: React.FC = ({ route }: any) => { const Component = route?.params?.screen; return ( { route?.params?.setHeight?.(e.nativeEvent.layout.height); }} > ); }; const WidgetContainer: React.FC = ({ widget, theme = defaultTheme, maxApi, localize = new Localize({ vi: {}, en: {} }), }) => { const [height, setHeight] = useState(undefined); const context = useContext(MiniAppContext); const navigationRef = useRef>(null); const isReady = useRef(false); const navigator = useRef(new Navigator(navigationRef, isReady, true)); const [currentContext, setCurrentContext] = useState({}); let headerBackground = context?.designConfig?.headerBar; let headerGradient = theme.colors?.gradient; if (theme.assets?.headerBackground) { headerBackground = theme.assets?.headerBackground; } if (context?.designConfig?.headerGradient) { headerGradient = context?.designConfig?.headerGradient; } /** * inject data for navigator */ navigator.current.maxApi = maxApi; const translate = (data?: string | { vi: string; en: string }) => { if (data && typeof data !== 'string') { return localize?.translateData(data); } return localize?.translate(data as string); }; navigator.current.setCurrentContext = setCurrentContext; return ( { isReady.current = true; }} > ); }; export { WidgetContainer };