From 89dcbd5a201f830812e49ed5d8e37c00d16b838b Mon Sep 17 00:00:00 2001 From: f0x52 Date: Sat, 13 May 2023 12:17:22 +0200 Subject: [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 --- web/source/settings/admin/accounts/detail.jsx | 114 +++++++++++++++++++++ web/source/settings/admin/accounts/index.jsx | 140 ++++++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 web/source/settings/admin/accounts/detail.jsx create mode 100644 web/source/settings/admin/accounts/index.jsx (limited to 'web/source/settings/admin/accounts') 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 . +*/ + +"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 ; + } else { + return ( +
+

+ Account Details +

+ +
+ ); + } +}; + +function AccountDetailForm({ data: account }) { + let content; + if (account.suspended) { + content = ( +

Account is suspended.

+ ); + } else { + content = ; + } + + return ( + <> + + + {content} + + ); +} + +function ModifyAccount({ account }) { + const form = { + id: useValue("id", account.id), + reason: useTextInput("text", {}) + }; + + const [modifyAccount, result] = useFormSubmit(form, query.useActionAccountMutation()); + + return ( +
+

Actions

+ + +
+ {/* + */} + +
+ + ); +} \ No newline at end of file diff --git a/web/source/settings/admin/accounts/index.jsx b/web/source/settings/admin/accounts/index.jsx new file mode 100644 index 000000000..1dea36fb5 --- /dev/null +++ b/web/source/settings/admin/accounts/index.jsx @@ -0,0 +1,140 @@ +/* + 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 . +*/ + +"use strict"; + +const React = require("react"); +const { Switch, Route, Link } = require("wouter"); + +const query = require("../../lib/query"); +const { useTextInput } = require("../../lib/form"); + +const AccountDetail = require("./detail"); +const { useBaseUrl } = require("../../lib/navigation/util"); +const { Error } = require("../../components/error"); + +module.exports = function Accounts({ baseUrl }) { + return ( +
+ + + + + + +
+ ); +}; + +function AccountOverview({ }) { + return ( + <> +

Accounts

+
+ Pending #581, + there is currently no way to list accounts.
+ You can perform actions on reported accounts by clicking their name in the report, or searching for a username below. +
+ + + + ); +} + +function AccountSearchForm() { + const [searchAccount, result] = query.useSearchAccountMutation(); + + const [onAccountChange, _resetAccount, { account }] = useTextInput("account"); + + function submitSearch(e) { + e.preventDefault(); + if (account.trim().length != 0) { + searchAccount(account); + } + } + + return ( +
+
+
+ +
+ +