@material-ui/core#SnackbarContent JavaScript Examples
The following examples show how to use
@material-ui/core#SnackbarContent.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ReconnectingNotification.js From symbl-twilio-video-react with Apache License 2.0 | 6 votes |
export default function ReconnectingNotification() {
const classes = useStyles();
const roomState = useRoomState();
let content = undefined;
if (roomState === 'reconnecting') {
content = "Reconnecting"
}
return (
<Snackbar anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} open={roomState === 'reconnecting'}>
<SnackbarContent
className={classes.snackbar}
message={
<span className={classes.message}>
<InfoIcon className={classes.icon} />
{content}…
</span>
}
/>
</Snackbar>
);
}
Example #2
Source File: PopupPage.js From spl-token-wallet with Apache License 2.0 | 5 votes |
function ApproveConnectionForm({ origin, onApprove }) {
const wallet = useWallet();
const { accounts, hardwareWalletAccount } = useWalletSelector();
// TODO better way to do this
const account = accounts
.concat([hardwareWalletAccount])
.find((account) => account && account.address.equals(wallet.publicKey));
const classes = useStyles();
const [autoApprove, setAutoApprove] = useState(false);
let [dismissed, setDismissed] = useLocalStorageState(
'dismissedAutoApproveWarning',
false,
);
return (
<Card>
<CardContent>
<Typography variant="h6" component="h1" gutterBottom>
Allow this site to access your Solana account?
</Typography>
<div className={classes.connection}>
<Typography>{origin}</Typography>
<ImportExportIcon fontSize="large" />
<Typography>{account.name}</Typography>
<Typography variant="caption">
({wallet.publicKey.toBase58()})
</Typography>
</div>
<Typography>Only connect with sites you trust.</Typography>
<Divider className={classes.divider} />
<FormControlLabel
control={
<Switch
checked={autoApprove}
onChange={() => setAutoApprove(!autoApprove)}
color="primary"
/>
}
label={`Automatically approve transactions from ${origin}`}
/>
{!dismissed && autoApprove && (
<SnackbarContent
className={classes.warningContainer}
message={
<div>
<span className={classes.warningTitle}>
<WarningIcon className={classes.warningIcon} />
Use at your own risk.
</span>
<Typography className={classes.warningMessage}>
This setting allows sending some transactions on your behalf
without requesting your permission for the remainder of this
session.
</Typography>
</div>
}
action={[
<Button onClick={() => setDismissed('1')}>I understand</Button>,
]}
classes={{ root: classes.snackbarRoot }}
/>
)}
</CardContent>
<CardActions className={classes.actions}>
<Button onClick={window.close}>Cancel</Button>
<Button
color="primary"
onClick={() => onApprove(autoApprove)}
disabled={!dismissed && autoApprove}
>
Connect
</Button>
</CardActions>
</Card>
);
}
Example #3
Source File: index.js From Recess with MIT License | 4 votes |
function Homepage({ posts, user }) {
const classes = useStyles();
const history = useHistory();
const [Id, setId] = useState("");
const [modalExp, setModal] = useState(false);
const [value, setValue] = useState({});
const [isVal, setIsVal] = useState(false);
const [modalComments, setModalComments] = useState([]);
const [comment, setComment] = useState("");
const [open, setOpen] = useState(!user);
const postComment = (event) => {
event.preventDefault();
db.collection("posts").doc(Id).collection("comments").add({
username: user.displayName,
text: comment,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
});
setComment("");
};
useEffect(() => {
setTimeout(() => {
setOpen(user);
}, 5000);
}, []);
useEffect(() => {
let unsubscribe;
if (Id) {
unsubscribe = db
.collection("posts")
.doc(Id)
.collection("comments")
.orderBy("timestamp", "desc")
.onSnapshot((snapshot) => {
const tempComments = [];
for (let doc of snapshot.docs) {
tempComments.unshift(doc.data());
}
setModalComments(tempComments);
});
}
setModal(true);
}, [Id]);
useEffect(() => {
if (history.location.pathname === "/") history.replace("/home");
}, []);
useEffect(() => {
posts.forEach((post) => {
if (post.id === Id) {
console.log(Id + " " + post.id);
setValue((prev) => ({ ...prev, ...post }));
setIsVal(true);
}
});
}, [Id]);
return (
<>
{/* Login warning */}
{!user && (
<Snackbar
open={open}
anchorOrigin={{
vertical: "center",
horizontal: "top",
}}
>
<SnackbarContent
style={{
backgroundColor: "teal",
}}
message={<h2>Login or Signup to post and comment!</h2>}
/>
</Snackbar>
)}
{/* // Displaying all posts */}
{posts.map(({ id, post }) => (
<Post
setId={setId}
key={id}
postId={id}
user={user}
username={post.username}
imageUrl={post.imageUrl}
avatarURL={post.avatarURL}
caption={post.caption}
/>
))}
{/* // Modal for View all comments */}
{isVal && (
<Modal className={classes.modal} open={modalExp}>
<div className={classes.modalContainer}>
<div className={classes.modalHeader}>
<h1 className={classes.modalUsername}>{value.post.username}</h1>
<h1
className={classes.closeModal}
onClick={() => setModal(false)}
>
✖
</h1>
</div>
<div className={classes.modalMain}>
<div className={classes.postImageHolder}>
<div className={classes.postImageContainer}>
<img
src={value.post.imageUrl}
className={classes.postImage}
/>
</div>
</div>
<aside className={classes.commentContainer}>
<div className={classes.postedComments}>
{modalComments &&
modalComments.map((comment, index) => (
<p key={`comment-index-${index}`}>
<strong> {comment.username} </strong> <br></br>
{comment.text}
</p>
))}
</div>
<div className={classes.postCommentsContainer}>
{user && (
<form className={classes.postCommentBox}>
<input
className={classes.postCommentInput}
type="text"
placeholder="Add a comment.."
value={comment}
onChange={(e) => setComment(e.target.value)}
/>
<button
className={classes.postCommentButton}
type="submit"
disabled={!comment}
onClick={postComment}
>
Post
</button>
</form>
)}
</div>
</aside>
</div>
</div>
</Modal>
)}
</>
);
}
Example #4
Source File: Contacts.js From developer-portfolio with Apache License 2.0 | 4 votes |
function Contacts() {
const [open, setOpen] = useState(false);
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [message, setMessage] = useState('');
const [success, setSuccess] = useState(false);
const [errMsg, setErrMsg] = useState('');
const { theme } = useContext(ThemeContext);
const handleClose = (event, reason) => {
if (reason === 'clickaway') {
return;
}
setOpen(false);
};
const useStyles = makeStyles((t) => ({
input: {
border: `4px solid ${theme.primary80}`,
backgroundColor: `${theme.secondary}`,
color: `${theme.tertiary}`,
fontFamily: 'var(--primaryFont)',
fontWeight: 500,
transition: 'border 0.2s ease-in-out',
'&:focus': {
border: `4px solid ${theme.primary600}`,
},
},
message: {
border: `4px solid ${theme.primary80}`,
backgroundColor: `${theme.secondary}`,
color: `${theme.tertiary}`,
fontFamily: 'var(--primaryFont)',
fontWeight: 500,
transition: 'border 0.2s ease-in-out',
'&:focus': {
border: `4px solid ${theme.primary600}`,
},
},
label: {
backgroundColor: `${theme.secondary}`,
color: `${theme.primary}`,
fontFamily: 'var(--primaryFont)',
fontWeight: 600,
fontSize: '0.9rem',
padding: '0 5px',
transform: 'translate(25px,50%)',
display: 'inline-flex',
},
socialIcon: {
width: '45px',
height: '45px',
borderRadius: '50%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '21px',
backgroundColor: theme.primary,
color: theme.secondary,
transition: '250ms ease-in-out',
'&:hover': {
transform: 'scale(1.1)',
color: theme.secondary,
backgroundColor: theme.tertiary,
},
},
detailsIcon: {
backgroundColor: theme.primary,
color: theme.secondary,
borderRadius: '50%',
width: '45px',
height: '45px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '23px',
transition: '250ms ease-in-out',
flexShrink: 0,
'&:hover': {
transform: 'scale(1.1)',
color: theme.secondary,
backgroundColor: theme.tertiary,
},
},
submitBtn: {
backgroundColor: theme.primary,
color: theme.secondary,
transition: '250ms ease-in-out',
'&:hover': {
transform: 'scale(1.08)',
color: theme.secondary,
backgroundColor: theme.tertiary,
},
},
}));
const classes = useStyles();
const handleContactForm = (e) => {
e.preventDefault();
if (name && email && message) {
if (isEmail(email)) {
const responseData = {
name: name,
email: email,
message: message,
};
axios.post(contactsData.sheetAPI, responseData).then((res) => {
console.log('success');
setSuccess(true);
setErrMsg('');
setName('');
setEmail('');
setMessage('');
setOpen(false);
});
} else {
setErrMsg('Invalid email');
setOpen(true);
}
} else {
setErrMsg('Enter all the fields');
setOpen(true);
}
};
return (
<div
className='contacts'
id='contacts'
style={{ backgroundColor: theme.secondary }}
>
<div className='contacts--container'>
<h1 style={{ color: theme.primary }}>Contacts</h1>
<div className='contacts-body'>
<div className='contacts-form'>
<form onSubmit={handleContactForm}>
<div className='input-container'>
<label htmlFor='Name' className={classes.label}>
Name
</label>
<input
placeholder='John Doe'
value={name}
onChange={(e) => setName(e.target.value)}
type='text'
name='Name'
className={`form-input ${classes.input}`}
/>
</div>
<div className='input-container'>
<label
htmlFor='Email'
className={classes.label}
>
Email
</label>
<input
placeholder='[email protected]'
value={email}
onChange={(e) => setEmail(e.target.value)}
type='email'
name='Email'
className={`form-input ${classes.input}`}
/>
</div>
<div className='input-container'>
<label
htmlFor='Message'
className={classes.label}
>
Message
</label>
<textarea
placeholder='Type your message....'
value={message}
onChange={(e) => setMessage(e.target.value)}
type='text'
name='Message'
className={`form-message ${classes.message}`}
/>
</div>
<div className='submit-btn'>
<button
type='submit'
className={classes.submitBtn}
>
<p>{!success ? 'Send' : 'Sent'}</p>
<div className='submit-icon'>
<AiOutlineSend
className='send-icon'
style={{
animation: !success
? 'initial'
: 'fly 0.8s linear both',
position: success
? 'absolute'
: 'initial',
}}
/>
<AiOutlineCheckCircle
className='success-icon'
style={{
display: !success
? 'none'
: 'inline-flex',
opacity: !success ? '0' : '1',
}}
/>
</div>
</button>
</div>
</form>
<Snackbar
anchorOrigin={{
vertical: 'top',
horizontal: 'center',
}}
open={open}
autoHideDuration={4000}
onClose={handleClose}
>
<SnackbarContent
action={
<React.Fragment>
<IconButton
size='small'
aria-label='close'
color='inherit'
onClick={handleClose}
>
<CloseIcon fontSize='small' />
</IconButton>
</React.Fragment>
}
style={{
backgroundColor: theme.primary,
color: theme.secondary,
fontFamily: 'var(--primaryFont)',
}}
message={errMsg}
/>
</Snackbar>
</div>
<div className='contacts-details'>
<a
href={`mailto:${contactsData.email}`}
className='personal-details'
>
<div className={classes.detailsIcon}>
<FiAtSign />
</div>
<p style={{ color: theme.tertiary }}>
{contactsData.email}
</p>
</a>
<a
href={`tel:${contactsData.phone}`}
className='personal-details'
>
<div className={classes.detailsIcon}>
<FiPhone />
</div>
<p style={{ color: theme.tertiary }}>
{contactsData.phone}
</p>
</a>
<div className='personal-details'>
<div className={classes.detailsIcon}>
<HiOutlineLocationMarker />
</div>
<p style={{ color: theme.tertiary }}>
{contactsData.address}
</p>
</div>
<div className='socialmedia-icons'>
{socialsData.twitter && (
<a
href={socialsData.twitter}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaTwitter aria-label='Twitter' />
</a>
)}
{socialsData.github && (
<a
href={socialsData.github}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaGithub aria-label='GitHub' />
</a>
)}
{socialsData.linkedIn && (
<a
href={socialsData.linkedIn}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaLinkedinIn aria-label='LinkedIn' />
</a>
)}
{socialsData.instagram && (
<a
href={socialsData.instagram}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaInstagram aria-label='Instagram' />
</a>
)}
{socialsData.medium && (
<a
href={socialsData.medium}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaMediumM aria-label='Medium' />
</a>
)}
{socialsData.blogger && (
<a
href={socialsData.blogger}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaBloggerB aria-label='Blogger' />
</a>
)}
{socialsData.youtube && (
<a
href={socialsData.youtube}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaYoutube aria-label='YouTube' />
</a>
)}
{socialsData.reddit && (
<a
href={socialsData.reddit}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaRedditAlien aria-label='Reddit' />
</a>
)}
{socialsData.stackOverflow && (
<a
href={socialsData.stackOverflow}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaStackOverflow aria-label='Stack Overflow' />
</a>
)}
{socialsData.codepen && (
<a
href={socialsData.codepen}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaCodepen aria-label='CodePen' />
</a>
)}
{socialsData.gitlab && (
<a
href={socialsData.gitlab}
target='_blank'
rel='noreferrer'
className={classes.socialIcon}
>
<FaGitlab aria-label='GitLab' />
</a>
)}
</div>
</div>
</div>
</div>
<img
src={theme.contactsimg}
alt='contacts'
className='contacts--img'
/>
</div>
);
}