| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | /* | 
					
						
							|  |  |  | 	GoToSocial | 
					
						
							| 
									
										
										
										
											2023-01-05 12:43:00 +01:00
										 |  |  | 	Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	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"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | const query = require("../lib/query"); | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | const { | 
					
						
							|  |  |  | 	useTextInput, | 
					
						
							|  |  |  | 	useBoolInput | 
					
						
							|  |  |  | } = require("../lib/form"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const useFormSubmit = require("../lib/form/submit"); | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | const { | 
					
						
							|  |  |  | 	Select, | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	TextInput, | 
					
						
							|  |  |  | 	Checkbox | 
					
						
							|  |  |  | } = require("../components/form/inputs"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const FormWithData = require("../lib/form/form-with-data"); | 
					
						
							|  |  |  | const Languages = require("../components/languages"); | 
					
						
							|  |  |  | const MutationButton = require("../components/form/mutation-button"); | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = function UserSettings() { | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	return ( | 
					
						
							|  |  |  | 		<FormWithData | 
					
						
							|  |  |  | 			dataQuery={query.useVerifyCredentialsQuery} | 
					
						
							|  |  |  | 			DataForm={UserSettingsForm} | 
					
						
							|  |  |  | 		/> | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | function UserSettingsForm({ data }) { | 
					
						
							|  |  |  | 	const { source } = data; | 
					
						
							|  |  |  | 	/* form keys | 
					
						
							|  |  |  | 		- string source[privacy] | 
					
						
							|  |  |  | 		- bool source[sensitive] | 
					
						
							|  |  |  | 		- string source[language] | 
					
						
							|  |  |  | 		- string source[status_format] | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	const form = { | 
					
						
							|  |  |  | 		defaultPrivacy: useTextInput("source[privacy]", { defaultValue: source.privacy ?? "unlisted" }), | 
					
						
							|  |  |  | 		isSensitive: useBoolInput("source[sensitive]", { defaultValue: source.sensitive }), | 
					
						
							|  |  |  | 		language: useTextInput("source[language]", { defaultValue: source.language?.toUpperCase() ?? "EN" }), | 
					
						
							|  |  |  | 		format: useTextInput("source[status_format]", { defaultValue: source.status_format ?? "plain" }), | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const [submitForm, result] = useFormSubmit(form, query.useUpdateCredentialsMutation()); | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return ( | 
					
						
							|  |  |  | 		<> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 			<form className="user-settings" onSubmit={submitForm}> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 				<h1>Post settings</h1> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 				<Select field={form.language} label="Default post language" options={ | 
					
						
							|  |  |  | 					<Languages /> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 				}> | 
					
						
							|  |  |  | 				</Select> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 				<Select field={form.defaultPrivacy} label="Default post privacy" options={ | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 					<> | 
					
						
							|  |  |  | 						<option value="private">Private / followers-only</option> | 
					
						
							|  |  |  | 						<option value="unlisted">Unlisted</option> | 
					
						
							|  |  |  | 						<option value="public">Public</option> | 
					
						
							|  |  |  | 					</> | 
					
						
							|  |  |  | 				}> | 
					
						
							|  |  |  | 					<a href="https://docs.gotosocial.org/en/latest/user_guide/posts/#privacy-settings" target="_blank" className="moreinfolink" rel="noreferrer">Learn more about post privacy settings (opens in a new tab)</a> | 
					
						
							|  |  |  | 				</Select> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 				<Select field={form.format} label="Default post (and bio) format" options={ | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 					<> | 
					
						
							|  |  |  | 						<option value="plain">Plain (default)</option> | 
					
						
							|  |  |  | 						<option value="markdown">Markdown</option> | 
					
						
							|  |  |  | 					</> | 
					
						
							|  |  |  | 				}> | 
					
						
							|  |  |  | 					<a href="https://docs.gotosocial.org/en/latest/user_guide/posts/#input-types" target="_blank" className="moreinfolink" rel="noreferrer">Learn more about post format settings (opens in a new tab)</a> | 
					
						
							|  |  |  | 				</Select> | 
					
						
							|  |  |  | 				<Checkbox | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 					field={form.isSensitive} | 
					
						
							|  |  |  | 					label="Mark my posts as sensitive by default" | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 				/> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 				<MutationButton label="Save settings" result={result} /> | 
					
						
							|  |  |  | 			</form> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 			<div> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 				<PasswordChange /> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 			</div> | 
					
						
							|  |  |  | 		</> | 
					
						
							|  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function PasswordChange() { | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	const form = { | 
					
						
							|  |  |  | 		oldPassword: useTextInput("old_password"), | 
					
						
							|  |  |  | 		newPassword: useTextInput("old_password", { | 
					
						
							|  |  |  | 			validator(val) { | 
					
						
							|  |  |  | 				if (val != "" && val == form.oldPassword.value) { | 
					
						
							|  |  |  | 					return "New password same as old password"; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				return ""; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const verifyNewPassword = useTextInput("verifyNewPassword", { | 
					
						
							|  |  |  | 		validator(val) { | 
					
						
							|  |  |  | 			if (val != "" && val != form.newPassword.value) { | 
					
						
							|  |  |  | 				return "Passwords do not match"; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return ""; | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2022-11-19 04:07:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 	const [submitForm, result] = useFormSubmit(form, query.usePasswordChangeMutation()); | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return ( | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 		<form className="change-password" onSubmit={submitForm}> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 			<h1>Change password</h1> | 
					
						
							| 
									
										
										
										
											2023-01-18 14:45:14 +01:00
										 |  |  | 			<TextInput type="password" field={form.oldPassword} label="Current password" /> | 
					
						
							|  |  |  | 			<TextInput type="password" field={form.newPassword} label="New password" /> | 
					
						
							|  |  |  | 			<TextInput type="password" field={verifyNewPassword} label="Confirm new password" /> | 
					
						
							|  |  |  | 			<MutationButton label="Change password" result={result} /> | 
					
						
							|  |  |  | 		</form> | 
					
						
							| 
									
										
										
										
											2022-09-29 12:02:41 +02:00
										 |  |  | 	); | 
					
						
							|  |  |  | } |