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