2022-09-29 12:02:41 +02: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  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 > 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-19 04:07:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														< File 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:02:41 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
															id = "header" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															fileType = "image/*" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														/ > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													< / d i v > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													< div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														< h3 > Avatar < / h 3 > 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-19 04:07:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														< File 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:02:41 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
															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 14:00:39 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												name = "Manually approve follow requests" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											/ > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											< Checkbox 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												id = "enable_rss" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												name = "Enable RSS feed of Public posts" 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:02:41 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											/ > 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-19 04:07:51 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											{  ! allowCustomCSS  ?  null  : 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 12:02:41 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												< 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 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;