1- import { Snackbar } from "@material-ui/core" ;
1+ import { Icon , Text } from "@gnosis.pm/safe-react-components" ;
2+ import { Fab , Snackbar } from "@material-ui/core" ;
23import MuiAlert from "@material-ui/lab/Alert" ;
34import React , { useContext } from "react" ;
45import styled from "styled-components" ;
56
67import { MessageContext , Message } from "../contexts/MessageContextProvider" ;
78
9+ import { FAQModal } from "./FAQModal" ;
10+
811export function Alert ( props ) {
912 return < MuiAlert elevation = { 6 } variant = "filled" { ...props } /> ;
1013}
1114const HeaderContainer = styled . div `
1215 flex: 1;
1316 width: 100%;
17+ position: absolute;
18+ justify-content: flex-end;
19+ display: flex;
20+ top: 24px;
21+ right: 24px;
22+ z-index: 2;
23+ gap: 8px;
1424` ;
1525
1626const AlertWrapper = styled . div `
@@ -22,31 +32,54 @@ const AlertWrapper = styled.div`
2232` ;
2333
2434export const Header = ( ) : JSX . Element => {
25- const messageContext = useContext ( MessageContext ) ;
26- const messages = messageContext . messages ;
35+ const { messages, showMessages, hideMessages, toggleMessages, removeMessage } = useContext ( MessageContext ) ;
36+
37+ const handleClose = ( event : React . SyntheticEvent | Event , reason ?: string ) => {
38+ if ( reason === "clickaway" ) {
39+ return ;
40+ }
41+
42+ hideMessages ( ) ;
43+ } ;
44+
2745 return (
2846 < HeaderContainer >
29- { messages ?. length > 0 && (
30- < Snackbar
31- anchorOrigin = { { vertical : "top" , horizontal : "right" } }
32- open = { messages ?. length > 0 }
33- onClose = { ( ) => messageContext . setMessages ( [ ] ) }
34- autoHideDuration = { 6000 }
35- style = { { gap : "4px" } }
36- >
37- < AlertWrapper >
38- { messages . map ( ( message : Message , index : number ) => (
39- < Alert
40- severity = { message . severity }
41- key = { "message" + index }
42- onClose = { ( ) => messageContext . removeMessage ( message ) }
43- >
44- { message . message }
45- </ Alert >
46- ) ) }
47- </ AlertWrapper >
48- </ Snackbar >
49- ) }
47+ < Fab
48+ variant = "circular"
49+ size = "small"
50+ className = { messages . length === 0 ? "statusDotButtonEmpty" : "statusDotButtonErrors" }
51+ style = { { textTransform : "none" , width : "34px" , height : "34px" } }
52+ onClick = { toggleMessages }
53+ >
54+ { messages . length === 0 ? (
55+ < Icon color = "white" type = "check" size = "sm" />
56+ ) : (
57+ < Text size = "xl" color = "white" >
58+ { messages . length }
59+ </ Text >
60+ ) }
61+ </ Fab >
62+ < FAQModal />
63+ < Snackbar
64+ anchorOrigin = { { vertical : "top" , horizontal : "right" } }
65+ open = { showMessages }
66+ onClose = { handleClose }
67+ autoHideDuration = { 6000 }
68+ style = { { gap : "4px" , top : "64px" } }
69+ >
70+ < AlertWrapper >
71+ { messages . length === 0 && (
72+ < Alert secerity = "success" key = "successMessage" >
73+ No warnings or errors.
74+ </ Alert >
75+ ) }
76+ { messages . map ( ( message : Message , index : number ) => (
77+ < Alert severity = { message . severity } key = { "message" + index } onClose = { ( ) => removeMessage ( message ) } >
78+ { message . message }
79+ </ Alert >
80+ ) ) }
81+ </ AlertWrapper >
82+ </ Snackbar >
5083 </ HeaderContainer >
5184 ) ;
5285} ;
0 commit comments