summaryrefslogtreecommitdiff
path: root/web/source/panels/user/posts.js
blob: e4ceae617e15ffefd72378bc67297d1213965210 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
   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 Promise = require("bluebird");

const Languages = require("./languages");
const Submit = require("../../lib/submit");

module.exports = function Posts({oauth, account}) {
	const [errorMsg, setError] = React.useState("");
	const [statusMsg, setStatus] = React.useState("");

	const [language, setLanguage] = React.useState("");
	const [privacy, setPrivacy] = React.useState("");
	const [format, setFormat] = React.useState("");
	const [sensitive, setSensitive] = React.useState(false);

	React.useEffect(() => {
		if (account.source) {
			setLanguage(account.source.language.toUpperCase());
			setPrivacy(account.source.privacy);
			setSensitive(account.source.sensitive ? account.source.sensitive : false);
			setFormat(account.source.status_format ? account.source.status_format : "plain");
		}
        
	}, [account, setSensitive, setPrivacy]);

	const submit = (e) => {
		e.preventDefault();

		setStatus("PATCHing");
		setError("");
		return Promise.try(() => {
			let formDataInfo = new FormData();

			formDataInfo.set("source[language]", language);
			formDataInfo.set("source[privacy]", privacy);
			formDataInfo.set("source[sensitive]", sensitive);
			formDataInfo.set("source[status_format]", format);

			return oauth.apiRequest("/api/v1/accounts/update_credentials", "PATCH", formDataInfo, "form");
		}).then((json) => {
			setStatus("Saved!");
			setLanguage(json.source.language.toUpperCase());
			setPrivacy(json.source.privacy);
			setSensitive(json.source.sensitive ? json.source.sensitive : false);
			setFormat(json.source.status_format ? json.source.status_format : "plain");
		}).catch((e) => {
			setError(e.message);
			setStatus("");
		});
	};

	return (
		<section className="posts">
			<h1>Post Settings</h1>
			<form>
				<div className="labelselect">
					<label htmlFor="language">Default post language</label>
					<select id="language" autoComplete="language" value={language} onChange={(e) => setLanguage(e.target.value)}>
						<Languages />
					</select>
				</div>
				<div className="labelselect">
					<label htmlFor="privacy">Default post privacy</label>
					<select id="privacy" value={privacy} onChange={(e) => setPrivacy(e.target.value)}>
						<option value="private">Private / followers-only)</option>
						<option value="unlisted">Unlisted</option>
						<option value="public">Public</option>
					</select>
					<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>
				</div>
				<div className="labelselect">
					<label htmlFor="format">Default post format</label>
					<select id="format" value={format} onChange={(e) => setFormat(e.target.value)}>
						<option value="plain">Plain (default)</option>
						<option value="markdown">Markdown</option>
					</select>
					<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>
				</div>				
				<div className="labelcheckbox">
					<label htmlFor="sensitive">Mark my posts as sensitive by default</label>
					<input id="sensitive" type="checkbox" checked={sensitive} onChange={(e) => setSensitive(e.target.checked)}/>
				</div>
				<Submit onClick={submit} label="Save post settings" errorMsg={errorMsg} statusMsg={statusMsg}/>
			</form>
		</section>
	);
};