/* GoToSocial Copyright (C) GoToSocial Authors admin@gotosocial.org SPDX-License-Identifier: AGPL-3.0-or-later 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 . */ import React from "react"; import { useTextInput, useBoolInput } from "../../lib/form"; import useFormSubmit from "../../lib/form/submit"; import { Select, TextInput, Checkbox } from "../../components/form/inputs"; import FormWithData from "../../lib/form/form-with-data"; import Languages from "../../components/languages"; import MutationButton from "../../components/form/mutation-button"; import { useVerifyCredentialsQuery } from "../../lib/query/oauth"; import { useEmailChangeMutation, usePasswordChangeMutation, useUpdateCredentialsMutation, useUserQuery } from "../../lib/query/user"; import Loading from "../../components/loading"; import { User } from "../../lib/types/user"; export default function UserSettings() { return ( ); } function UserSettingsForm({ data }) { /* form keys - string source[privacy] - bool source[sensitive] - string source[language] - string source[status_content_type] */ const form = { defaultPrivacy: useTextInput("source[privacy]", { source: data, defaultValue: "unlisted" }), isSensitive: useBoolInput("source[sensitive]", { source: data }), language: useTextInput("source[language]", { source: data, valueSelector: (s) => s.source.language?.toUpperCase() ?? "EN" }), statusContentType: useTextInput("source[status_content_type]", { source: data, defaultValue: "text/plain" }), }; const [submitForm, result] = useFormSubmit(form, useUpdateCredentialsMutation()); return ( <>

Account Settings

Post Settings

Learn more about these settings (opens in a new tab)
); } function PasswordChange() { const form = { oldPassword: useTextInput("old_password"), newPassword: useTextInput("new_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 ""; } }); const [submitForm, result] = useFormSubmit(form, usePasswordChangeMutation()); return (
); } function EmailChange() { // Load existing user data. const { data: user, isFetching, isLoading } = useUserQuery(); if (isFetching || isLoading) { return ; } if (user === undefined) { throw "could not fetch user"; } return ; } function EmailChangeForm({user}: {user: User}) { const form = { currentEmail: useTextInput("current_email", { defaultValue: user.email, nosubmit: true }), newEmail: useTextInput("new_email", { validator: (value: string | undefined) => { if (!value) { return ""; } if (value.toLowerCase() === user.email?.toLowerCase()) { return "cannot change to your existing address"; } if (value.toLowerCase() === user.unconfirmed_email?.toLowerCase()) { return "you already have a pending email address change to this address"; } return ""; }, }), password: useTextInput("password"), }; const [submitForm, result] = useFormSubmit(form, useEmailChangeMutation()); return (
{ user.unconfirmed_email && <>
You currently have a pending email address change to the address: {user.unconfirmed_email}
To confirm {user.unconfirmed_email} as your new address for this account, please check your email inbox.
} ); }