1/** 2 * Copyright (c) 650 Industries. 3 * Copyright (c) Meta Platforms, Inc. and affiliates. 4 * 5 * This source code is licensed under the MIT license found in the 6 * LICENSE file in the root directory of this source tree. 7 */ 8import React, { useCallback, useMemo } from 'react'; 9import { StyleSheet, View } from 'react-native'; 10import * as LogBoxData from '../Data/LogBoxData'; 11import { useLogs } from '../Data/LogContext'; 12import { useRejectionHandler } from '../useRejectionHandler'; 13import { ErrorToast } from './ErrorToast'; 14export function ErrorToastContainer() { 15 useRejectionHandler(); 16 const { logs, isDisabled } = useLogs(); 17 if (!logs.length || isDisabled) { 18 return null; 19 } 20 return React.createElement(ErrorToastStack, { logs: logs }); 21} 22function ErrorToastStack({ logs }) { 23 const onDismissWarns = useCallback(() => { 24 LogBoxData.clearWarnings(); 25 }, []); 26 const onDismissErrors = useCallback(() => { 27 LogBoxData.clearErrors(); 28 }, []); 29 const setSelectedLog = useCallback((index) => { 30 LogBoxData.setSelectedLog(index); 31 }, []); 32 function openLog(log) { 33 let index = logs.length - 1; 34 // Stop at zero because if we don't find any log, we'll open the first log. 35 while (index > 0 && logs[index] !== log) { 36 index -= 1; 37 } 38 setSelectedLog(index); 39 } 40 const warnings = useMemo(() => logs.filter((log) => log.level === 'warn'), [logs]); 41 const errors = useMemo(() => logs.filter((log) => log.level === 'error' || log.level === 'fatal'), [logs]); 42 return (React.createElement(View, { style: styles.list }, 43 warnings.length > 0 && (React.createElement(ErrorToast, { log: warnings[warnings.length - 1], level: "warn", totalLogCount: warnings.length, onPressOpen: () => openLog(warnings[warnings.length - 1]), onPressDismiss: onDismissWarns })), 44 errors.length > 0 && (React.createElement(ErrorToast, { log: errors[errors.length - 1], level: "error", totalLogCount: errors.length, onPressOpen: () => openLog(errors[errors.length - 1]), onPressDismiss: onDismissErrors })))); 45} 46const styles = StyleSheet.create({ 47 list: { 48 bottom: 6, 49 left: 10, 50 right: 10, 51 position: 'absolute', 52 maxWidth: 320, 53 }, 54}); 55export default LogBoxData.withSubscription(ErrorToastContainer); 56//# sourceMappingURL=ErrorToastContainer.web.js.map