go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/frontend/ui/src/components/error_snackbar/feedback_snackbar.tsx (about)

     1  // Copyright 2022 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  import { useContext } from 'react';
    16  
    17  import Alert from '@mui/material/Alert';
    18  import Snackbar from '@mui/material/Snackbar';
    19  
    20  import {
    21    SnackbarContext,
    22    snackContextDefaultState,
    23  } from '@/context/snackbar_context';
    24  
    25  const FeedbackSnackbar = () => {
    26    const { snack, setSnack } = useContext(SnackbarContext);
    27  
    28    const handleClose = () => {
    29      setSnack(snackContextDefaultState);
    30    };
    31  
    32    return (
    33      <Snackbar
    34        data-testid="snackbar"
    35        open={snack.open}
    36        autoHideDuration={6000}
    37        anchorOrigin={{ horizontal: 'center', vertical: 'bottom' }}
    38        onClose={handleClose}>
    39        <Alert onClose={handleClose} severity={snack.severity} sx={{ width: '100%' }}>
    40          {snack.message}
    41        </Alert>
    42      </Snackbar>
    43    );
    44  };
    45  
    46  export default FeedbackSnackbar;