summaryrefslogtreecommitdiff
path: root/web/source/settings/views/user/posts/basic-settings/index.tsx
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-07-17 16:46:52 +0200
committerLibravatar GitHub <noreply@github.com>2024-07-17 16:46:52 +0200
commit0aadc2db2a42fc99538fbbb096b84b209b9ccd68 (patch)
tree38c58d163004d43da80d33477a6e9f22547bdb15 /web/source/settings/views/user/posts/basic-settings/index.tsx
parentgive read-only access to /dev for ffmpeg to access /dev/urandom (#3109) (diff)
downloadgotosocial-0aadc2db2a42fc99538fbbb096b84b209b9ccd68.tar.xz
[feature] Allow users to set default interaction policies per status visibility (#3108)
* [feature] Allow users to set default interaction policies * use vars for default policies * avoid some code repetition * unfuck form binding * avoid bonkers loop * beep boop * put policyValsToAPIPolicyVals in separate function * don't bother with slices.Grow * oops
Diffstat (limited to 'web/source/settings/views/user/posts/basic-settings/index.tsx')
-rw-r--r--web/source/settings/views/user/posts/basic-settings/index.tsx88
1 files changed, 88 insertions, 0 deletions
diff --git a/web/source/settings/views/user/posts/basic-settings/index.tsx b/web/source/settings/views/user/posts/basic-settings/index.tsx
new file mode 100644
index 000000000..a3c6a8a65
--- /dev/null
+++ b/web/source/settings/views/user/posts/basic-settings/index.tsx
@@ -0,0 +1,88 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+import React from "react";
+import { useTextInput, useBoolInput } from "../../../../lib/form";
+import useFormSubmit from "../../../../lib/form/submit";
+import { Select, Checkbox } from "../../../../components/form/inputs";
+import Languages from "../../../../components/languages";
+import MutationButton from "../../../../components/form/mutation-button";
+import { useUpdateCredentialsMutation } from "../../../../lib/query/user";
+import { Account } from "../../../../lib/types/account";
+
+export default function BasicSettings({ account }: { account: Account }) {
+ /* form keys
+ - string source[privacy]
+ - bool source[sensitive]
+ - string source[language]
+ - string source[status_content_type]
+ */
+ const form = {
+ defaultPrivacy: useTextInput("source[privacy]", { source: account, defaultValue: "unlisted" }),
+ isSensitive: useBoolInput("source[sensitive]", { source: account }),
+ language: useTextInput("source[language]", { source: account, valueSelector: (s: Account) => s.source?.language?.toUpperCase() ?? "EN" }),
+ statusContentType: useTextInput("source[status_content_type]", { source: account, defaultValue: "text/plain" }),
+ };
+
+ const [submitForm, result] = useFormSubmit(form, useUpdateCredentialsMutation());
+
+ return (
+ <form className="post-settings" onSubmit={submitForm}>
+ <div className="form-section-docs">
+ <h3>Basic</h3>
+ <a
+ href="https://docs.gotosocial.org/en/latest/user_guide/settings#post-settings"
+ target="_blank"
+ className="docslink"
+ rel="noreferrer"
+ >
+ Learn more about these settings (opens in a new tab)
+ </a>
+ </div>
+ <Select field={form.language} label="Default post language" options={
+ <Languages />
+ }>
+ </Select>
+ <Select field={form.defaultPrivacy} label="Default post privacy" options={
+ <>
+ <option value="public">Public</option>
+ <option value="unlisted">Unlisted</option>
+ <option value="private">Followers-only</option>
+ </>
+ }>
+ </Select>
+ <Select field={form.statusContentType} label="Default post (and bio) format" options={
+ <>
+ <option value="text/plain">Plain (default)</option>
+ <option value="text/markdown">Markdown</option>
+ </>
+ }>
+ </Select>
+ <Checkbox
+ field={form.isSensitive}
+ label="Mark my posts as sensitive by default"
+ />
+ <MutationButton
+ disabled={false}
+ label="Save settings"
+ result={result}
+ />
+ </form>
+ );
+} \ No newline at end of file