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 };