diff options
author | 2023-05-13 12:17:22 +0200 | |
---|---|---|
committer | 2023-05-13 12:17:22 +0200 | |
commit | 89dcbd5a201f830812e49ed5d8e37c00d16b838b (patch) | |
tree | ee3323585c35db52104d9c5f60670e2bf1ffa028 /web/source/settings/admin/accounts/detail.jsx | |
parent | [bugfix] Downstep otel to fix freebsd compile issue (#1773) (diff) | |
download | gotosocial-89dcbd5a201f830812e49ed5d8e37c00d16b838b.tar.xz |
[frontend] Basic user moderation actions (#1728)
* remove info banner
* update swagger definition for AccountAction
* basic user view, suspend action
* clean up suspended user display
* basic user searching
* rename User -> Account for clarity
* refactor error boundary component to give better info
* appease the linter
Diffstat (limited to 'web/source/settings/admin/accounts/detail.jsx')
-rw-r--r-- | web/source/settings/admin/accounts/detail.jsx | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/web/source/settings/admin/accounts/detail.jsx b/web/source/settings/admin/accounts/detail.jsx new file mode 100644 index 000000000..189c07e8d --- /dev/null +++ b/web/source/settings/admin/accounts/detail.jsx @@ -0,0 +1,114 @@ +/* + 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/>. +*/ + +"use strict"; + +const React = require("react"); +const { useRoute, Redirect } = require("wouter"); + +const query = require("../../lib/query"); + +const FormWithData = require("../../lib/form/form-with-data"); + +const { useBaseUrl } = require("../../lib/navigation/util"); +const FakeProfile = require("../../components/fake-profile"); +const MutationButton = require("../../components/form/mutation-button"); + +const useFormSubmit = require("../../lib/form/submit"); +const { useValue, useTextInput } = require("../../lib/form"); +const { TextInput } = require("../../components/form/inputs"); + +module.exports = function AccountDetail({ }) { + const baseUrl = useBaseUrl(); + + let [_match, params] = useRoute(`${baseUrl}/:accountId`); + + if (params?.accountId == undefined) { + return <Redirect to={baseUrl} />; + } else { + return ( + <div className="account-detail"> + <h1> + Account Details + </h1> + <FormWithData + dataQuery={query.useGetAccountQuery} + queryArg={params.accountId} + DataForm={AccountDetailForm} + /> + </div> + ); + } +}; + +function AccountDetailForm({ data: account }) { + let content; + if (account.suspended) { + content = ( + <h2 className="error">Account is suspended.</h2> + ); + } else { + content = <ModifyAccount account={account} />; + } + + return ( + <> + <FakeProfile {...account} /> + + {content} + </> + ); +} + +function ModifyAccount({ account }) { + const form = { + id: useValue("id", account.id), + reason: useTextInput("text", {}) + }; + + const [modifyAccount, result] = useFormSubmit(form, query.useActionAccountMutation()); + + return ( + <form onSubmit={modifyAccount}> + <h2>Actions</h2> + <TextInput + field={form.reason} + placeholder="Reason for this action" + /> + + <div className="action-buttons"> + {/* <MutationButton + label="Disable" + name="disable" + result={result} + /> + <MutationButton + label="Silence" + name="silence" + result={result} + /> */} + <MutationButton + label="Suspend" + name="suspend" + result={result} + /> + </div> + </form> + ); +}
\ No newline at end of file |