/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import {styled, colors, Glyph} from 'flipper'; import React, {useState, memo} from 'react'; import {connect} from 'react-redux'; import {FlipperError, dismissError} from '../reducers/connections'; import {State as Store} from '../reducers/index'; import {ErrorBlock, ButtonGroup, Button} from 'flipper'; import {FlexColumn, FlexRow} from 'flipper'; type StateFromProps = { errors: FlipperError[]; }; type DispatchFromProps = { dismissError: typeof dismissError; }; type Props = DispatchFromProps & StateFromProps; const ErrorBar = memo(function ErrorBar(props: Props) { const [collapsed, setCollapsed] = useState(true); if (!props.errors.length) { return null; } const errorCount = props.errors.reduce( (sum, error) => sum + (error.occurrences || 1), 0, ); const urgentErrors = props.errors.filter((e) => e.urgent); return ( {(collapsed ? urgentErrors : props.errors).map((error, index) => ( props.dismissError(index)} key={index} error={error} /> ))} setCollapsed((c) => !c)} title="Show / hide errors"> {collapsed && errorCount} ); }); export default connect( ({connections: {errors}}) => ({ errors, }), { dismissError, }, )(ErrorBar); function ErrorTile({ onDismiss, error, }: { onDismiss: () => void; error: FlipperError; }) { const [collapsed, setCollapsed] = useState(true); return ( {(error.details || error.error) && (