blob: f447f34dab273e8fcccaab0d30b07c4900f74518 [file] [log] [blame]
Larbi Gharibe9af9732021-03-31 15:08:01 +01001import React from 'react'
Adrien Béraudab519ff2022-05-03 15:34:48 -04002import makeStyles from '@mui/styles/makeStyles';
3import { IconButton, InputBase, Paper, Popper } from '@mui/material'
4import { Send, EmojiEmotionsRounded } from '@mui/icons-material'
Adrien Béraud8a438f82021-04-14 16:18:57 -04005import EmojiPicker from 'emoji-picker-react'
Larbi Gharibe9af9732021-03-31 15:08:01 +01006
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04007const useStyles = makeStyles((theme) => ({
Adrien Béraud8a438f82021-04-14 16:18:57 -04008 root: {
Adrien Béraud4e287b92021-04-24 16:15:56 -04009 marginLeft: 16,
10 marginRight: 16,
Adrien Béraud8a438f82021-04-14 16:18:57 -040011 padding: '2px 4px',
12 display: 'flex',
13 alignItems: 'center',
14 borderRadius: 8
15 },
16 input: {
17 marginLeft: theme.spacing(1),
18 flex: 1,
19 },
20 iconButton: {
21 padding: 10,
22 },
23 divider: {
24 height: 28,
25 margin: 4,
26 },
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040027}))
Larbi Gharibe9af9732021-03-31 15:08:01 +010028
Adrien Béraud8a438f82021-04-14 16:18:57 -040029export default function SendMessageForm(props) {
30 const classes = useStyles()
31 const [anchorEl, setAnchorEl] = React.useState(null)
32 const [currentMessage, setCurrentMessage] = React.useState("")
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040033
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040034 const handleOpenEmojiPicker = e => setAnchorEl(anchorEl ? null : e.currentTarget)
35 const handleClose = () => setAnchorEl(null)
36
Adrien Béraud8a438f82021-04-14 16:18:57 -040037 const handleSubmit = e => {
38 e.preventDefault()
Adrien Béraud88a52442021-04-26 12:11:41 -040039 if (currentMessage) {
40 props.onSend(currentMessage)
41 setCurrentMessage('')
42 }
Adrien Béraud8a438f82021-04-14 16:18:57 -040043 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040044 const handleInputChange = (event) => setCurrentMessage(event.target.value)
Adrien Béraud8a438f82021-04-14 16:18:57 -040045 const onEmojiClick = (e, emojiObject) => {
Adrien Béraud8a438f82021-04-14 16:18:57 -040046 setCurrentMessage(currentMessage + emojiObject.emoji)
47 handleClose()
48 }
49 const open = Boolean(anchorEl)
50 const id = open ? 'simple-popover' : undefined
Larbi Gharibe9af9732021-03-31 15:08:01 +010051
Adrien Béraud8a438f82021-04-14 16:18:57 -040052 return (
53 <div className="send-message-form">
54 <Paper component="form"
55 onSubmit={handleSubmit}
Adrien Béraud8a438f82021-04-14 16:18:57 -040056 className={classes.root}>
Adrien Béraudab519ff2022-05-03 15:34:48 -040057 <IconButton
58 aria-describedby={id}
59 variant="contained"
60 color="primary"
61 onClick={handleOpenEmojiPicker}
62 size="large">
Adrien Béraude74741b2021-04-19 13:22:54 -040063 <EmojiEmotionsRounded />
Adrien Béraud8a438f82021-04-14 16:18:57 -040064 </IconButton>
65 <Popper
66 id={id}
67 open={open}
68 anchorEl={anchorEl}
69 onClose={handleClose}
70 >
Adrien Béraude74741b2021-04-19 13:22:54 -040071 <EmojiPicker.default
Adrien Béraud8a438f82021-04-14 16:18:57 -040072 onEmojiClick={onEmojiClick}
73 disableAutoFocus={true}
74 disableSkinTonePicker={true}
75 native
76 />
77 </Popper>
78
79 <InputBase
80 className={classes.input}
81 placeholder="Write something nice"
82 height="35"
83 value={currentMessage}
84 onChange={handleInputChange}
85 />
Adrien Béraudab519ff2022-05-03 15:34:48 -040086 <IconButton
87 type="submit"
88 className={classes.iconButton}
89 aria-label="search"
90 size="large">
Adrien Béraude74741b2021-04-19 13:22:54 -040091 <Send />
Adrien Béraud8a438f82021-04-14 16:18:57 -040092 </IconButton>
93 </Paper>
94 </div>
Adrien Béraudab519ff2022-05-03 15:34:48 -040095 );
Larbi Gharibe9af9732021-03-31 15:08:01 +010096}