1
- import data from "@emoji-mart/data/sets/14/twitter.json"
2
- import Picker from "@emoji-mart/react"
3
- import Button from "@material-ui/core/Button"
4
- import InputAdornment from "@material-ui/core/InputAdornment"
5
- import Popover from "@material-ui/core/Popover"
6
- import { makeStyles } from "@material-ui/core/styles"
7
1
import TextField from "@material-ui/core/TextField"
8
2
import { Group } from "api/typesGenerated"
9
3
import { ChooseOne , Cond } from "components/Conditionals/ChooseOne"
10
- import { OpenDropdown } from "components/DropdownArrows/DropdownArrows"
11
4
import { FormFooter } from "components/FormFooter/FormFooter"
12
5
import { FullPageForm } from "components/FullPageForm/FullPageForm"
6
+ import { LazyIconField } from "components/IconField/LazyIconField"
13
7
import { FullScreenLoader } from "components/Loader/FullScreenLoader"
14
8
import { Margins } from "components/Margins/Margins"
15
9
import { useFormik } from "formik"
16
- import { useRef , useState , FC } from "react"
10
+ import { FC } from "react"
17
11
import { useTranslation } from "react-i18next"
18
- import { colors } from "theme/colors"
19
12
import { getFormHelpers , nameValidator , onChangeTrimmed } from "util/formUtils"
20
13
import * as Yup from "yup"
21
14
@@ -37,7 +30,6 @@ const UpdateGroupForm: FC<{
37
30
onCancel : ( ) => void
38
31
isLoading : boolean
39
32
} > = ( { group, errors, onSubmit, onCancel, isLoading } ) => {
40
- const [ isEmojiPickerOpen , setIsEmojiPickerOpen ] = useState ( false )
41
33
const form = useFormik < FormData > ( {
42
34
initialValues : {
43
35
name : group . name ,
@@ -48,9 +40,6 @@ const UpdateGroupForm: FC<{
48
40
onSubmit,
49
41
} )
50
42
const getFieldHelpers = getFormHelpers < FormData > ( form , errors )
51
- const hasIcon = form . values . avatar_url && form . values . avatar_url !== ""
52
- const emojiButtonRef = useRef < HTMLButtonElement > ( null )
53
- const styles = useStyles ( )
54
43
const { t } = useTranslation ( "common" )
55
44
56
45
return (
@@ -65,65 +54,16 @@ const UpdateGroupForm: FC<{
65
54
label = "Name"
66
55
variant = "outlined"
67
56
/>
68
- < TextField
57
+
58
+ < LazyIconField
69
59
{ ...getFieldHelpers ( "avatar_url" ) }
70
60
onChange = { onChangeTrimmed ( form ) }
71
- autoFocus
72
61
fullWidth
73
- label = "Icon"
62
+ label = { t ( "form.fields.icon" ) }
74
63
variant = "outlined"
75
- InputProps = { {
76
- endAdornment : hasIcon ? (
77
- < InputAdornment position = "end" >
78
- < img
79
- alt = ""
80
- src = { form . values . avatar_url }
81
- className = { styles . adornment }
82
- // This prevent browser to display the ugly error icon if the
83
- // image path is wrong or user didn't finish typing the url
84
- onError = { ( e ) => ( e . currentTarget . style . display = "none" ) }
85
- onLoad = { ( e ) => ( e . currentTarget . style . display = "inline" ) }
86
- />
87
- </ InputAdornment >
88
- ) : undefined ,
89
- } }
64
+ onPickEmoji = { ( value ) => form . setFieldValue ( "avatar_url" , value ) }
90
65
/>
91
66
92
- < Button
93
- fullWidth
94
- ref = { emojiButtonRef }
95
- variant = "outlined"
96
- size = "small"
97
- endIcon = { < OpenDropdown /> }
98
- onClick = { ( ) => {
99
- setIsEmojiPickerOpen ( ( v ) => ! v )
100
- } }
101
- >
102
- { t ( "emojiPicker.select" ) }
103
- </ Button >
104
-
105
- < Popover
106
- id = "emoji"
107
- open = { isEmojiPickerOpen }
108
- anchorEl = { emojiButtonRef . current }
109
- onClose = { ( ) => {
110
- setIsEmojiPickerOpen ( false )
111
- } }
112
- >
113
- < Picker
114
- theme = "dark"
115
- data = { data }
116
- onEmojiSelect = { ( emojiData ) => {
117
- form
118
- . setFieldValue ( "avatar_url" , `/emojis/${ emojiData . unified } .png` )
119
- . catch ( ( ex ) => {
120
- console . error ( ex )
121
- } )
122
- setIsEmojiPickerOpen ( false )
123
- } }
124
- />
125
- </ Popover >
126
-
127
67
< TextField
128
68
{ ...getFieldHelpers ( "quota_allowance" ) }
129
69
onChange = { onChangeTrimmed ( form ) }
@@ -182,21 +122,4 @@ export const SettingsGroupPageView: FC<SettingsGroupPageViewProps> = ({
182
122
)
183
123
}
184
124
185
- const useStyles = makeStyles ( ( theme ) => ( {
186
- "@global" : {
187
- "em-emoji-picker" : {
188
- "--rgb-background" : theme . palette . background . paper ,
189
- "--rgb-input" : colors . gray [ 17 ] ,
190
- "--rgb-color" : colors . gray [ 4 ] ,
191
- } ,
192
- } ,
193
- adornment : {
194
- width : theme . spacing ( 3 ) ,
195
- height : theme . spacing ( 3 ) ,
196
- } ,
197
- iconField : {
198
- paddingBottom : theme . spacing ( 0.5 ) ,
199
- } ,
200
- } ) )
201
-
202
125
export default SettingsGroupPageView
0 commit comments