From 89dcbd5a201f830812e49ed5d8e37c00d16b838b Mon Sep 17 00:00:00 2001 From: f0x52 Date: Sat, 13 May 2023 12:17:22 +0200 Subject: [PATCH] [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 --- internal/api/client/admin/accountaction.go | 2 +- web/source/package.json | 1 - web/source/settings/admin/accounts/detail.jsx | 114 ++++++++++++++ web/source/settings/admin/accounts/index.jsx | 140 ++++++++++++++++++ web/source/settings/admin/reports/detail.jsx | 2 +- web/source/settings/admin/reports/index.jsx | 7 - .../settings/admin/reports/username.jsx | 7 +- web/source/settings/components/error.jsx | 14 +- .../settings/components/fake-profile.jsx | 8 +- web/source/settings/index.js | 1 + .../settings/lib/navigation/components.jsx | 72 ++++++++- web/source/settings/lib/query/admin/index.js | 26 ++++ web/source/settings/lib/query/base.js | 2 +- web/source/settings/style.css | 51 +++++++ web/source/settings/user/profile.js | 2 +- web/source/yarn.lock | 7 - 16 files changed, 419 insertions(+), 37 deletions(-) create mode 100644 web/source/settings/admin/accounts/detail.jsx create mode 100644 web/source/settings/admin/accounts/index.jsx diff --git a/internal/api/client/admin/accountaction.go b/internal/api/client/admin/accountaction.go index b4206ac37..484f5bbc4 100644 --- a/internal/api/client/admin/accountaction.go +++ b/internal/api/client/admin/accountaction.go @@ -53,7 +53,7 @@ import ( // - // name: type // in: formData -// description: Type of action to be taken (`disable`, `silence`, or `suspend`). +// description: Type of action to be taken, currently only supports `suspend`. // type: string // required: true // - diff --git a/web/source/package.json b/web/source/package.json index e1ca357b3..bd082b6e7 100644 --- a/web/source/package.json +++ b/web/source/package.json @@ -28,7 +28,6 @@ "psl": "^1.9.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-error-boundary": "^3.1.4", "react-redux": "^8.0.4", "redux": "^4.2.0", "redux-persist": "^6.0.0", 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 ( +
+
+
+ +
+ +