import * as React from 'react'; import { SafeAreaProviderCompat } from '@react-navigation/elements'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; // import { enableFreeze } from 'react-native-screens'; import { ThemeProvider } from 'styled-components/native'; import ErrorBoundary from '@wcpos/components/src/error-boundary'; import Portal from '@wcpos/components/src/portal'; import { SnackbarProvider } from '@wcpos/components/src/snackbar'; import getTheme from '@wcpos/themes'; import { AppStateProvider } from './contexts/app-state'; import { TranslationProvider } from './contexts/translations'; import RootError from './root-error'; import RootNavigator from './screens'; import Splash from './screens/splash'; // import WarningMessage from './warning-message'; // import polyfills import 'setimmediate'; // https://github.com/software-mansion/react-native-reanimated/issues/4140 // import './polyfills'; // enable freeze // enableFreeze(true); /** * Initial Props * - only web at the moment, but may be useful for other platforms in the future */ let initialProps: Record = {}; if (window && window.initialProps) { initialProps = Object.freeze(window.initialProps); // prevent accidental mutation } /** * */ const App = () => { const theme = React.useMemo( () => getTheme({ name: 'default', mode: 'light', }), [] ); /** * NOTE: * The first ErrorBoundary is a catchall, it should use only pure React Native, * ie: it is not dependent on theme or custom components * The second ErrorBoundary uses the theme and custom components */ return ( } > } > ); }; export default App;