2022-09-29 13:02:41 +03:00
/ *
GoToSocial
Copyright ( C ) 2021 - 2022 GoToSocial Authors admin @ gotosocial . org
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
"use strict" ;
const Promise = require ( "bluebird" ) ;
const React = require ( "react" ) ;
const Redux = require ( "react-redux" ) ;
const Submit = require ( "../components/submit" ) ;
const api = require ( "../lib/api" ) ;
const user = require ( "../redux/reducers/user" ) . actions ;
const submit = require ( "../lib/submit" ) ;
const { formFields } = require ( "../components/form-fields" ) ;
const {
TextInput ,
TextArea ,
Checkbox ,
File
} = formFields ( user . setProfileVal , ( state ) => state . user . profile ) ;
module . exports = function UserProfile ( ) {
const dispatch = Redux . useDispatch ( ) ;
const account = Redux . useSelector ( state => state . user . profile ) ;
const instance = Redux . useSelector ( state => state . instances . current ) ;
const allowCustomCSS = instance . configuration . accounts . allow _custom _css ;
const [ errorMsg , setError ] = React . useState ( "" ) ;
const [ statusMsg , setStatus ] = React . useState ( "" ) ;
const saveProfile = submit (
( ) => dispatch ( api . user . updateProfile ( ) ) ,
{ setStatus , setError }
) ;
return (
< div className = "user-profile" >
< h1 > Profile < / h 1 >
< div className = "overview" >
< div className = "profile" >
< div className = "headerimage" >
< img className = "headerpreview" src = { account . header } alt = { account . header ? ` header image for ${ account . username } ` : "None set" } / >
< / d i v >
< div className = "basic" >
< div id = "profile-basic-filler2" > < / d i v >
< span className = "avatar" > < img className = "avatarpreview" src = { account . avatar } alt = { account . avatar ? ` avatar image for ${ account . username } ` : "None set" } / > < / s p a n >
< div className = "displayname" > { account . display _name . trim ( ) . length > 0 ? account . display _name : account . username } < / d i v >
< div className = "username" > < span > @ { account . username } < / s p a n > < / d i v >
< / d i v >
< / d i v >
< div className = "files" >
< div >
< h3 > Header < / h 3 >
< File
id = "header"
fileType = "image/*"
/ >
< / d i v >
< div >
< h3 > Avatar < / h 3 >
< File
id = "avatar"
fileType = "image/*"
/ >
< / d i v >
< / d i v >
< / d i v >
< TextInput
id = "display_name"
name = "Name"
placeHolder = "A GoToSocial user"
/ >
< TextArea
id = "source.note"
name = "Bio"
placeHolder = "Just trying out GoToSocial, my pronouns are they/them and I like sloths."
/ >
< Checkbox
id = "locked"
2022-10-08 15:00:39 +03:00
name = "Manually approve follow requests"
/ >
< Checkbox
id = "enable_rss"
name = "Enable RSS feed of Public posts"
2022-09-29 13:02:41 +03:00
/ >
{ ! allowCustomCSS ? null :
< TextArea
id = "custom_css"
name = "Custom CSS"
className = "monospace"
>
< a href = "https://docs.gotosocial.org/en/latest/user_guide/custom_css" target = "_blank" className = "moreinfolink" rel = "noreferrer" > Learn more about custom profile CSS ( opens in a new tab ) < / a >
< / T e x t A r e a >
}
< Submit onClick = { saveProfile } label = "Save profile info" errorMsg = { errorMsg } statusMsg = { statusMsg } / >
< / d i v >
) ;
} ;