From aecf74951cecb4de9ca94dd93e48af6f62300a0f Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 25 Apr 2024 18:24:24 +0200 Subject: [chore] Settings refactor 2: the re-refactoring-ing (#2866) * [chore] Bit more refactoring of settings panel * fix up some remaining things * groovy baby yeah! * remove unused Suspense --- .../views/moderation/accounts/detail/actions.tsx | 5 +- .../moderation/accounts/detail/handlesignup.tsx | 6 +- .../views/moderation/accounts/detail/index.tsx | 5 +- .../views/moderation/accounts/pending/index.tsx | 2 +- .../views/moderation/accounts/search/index.tsx | 3 +- .../views/moderation/domain-permissions/form.tsx | 4 - .../moderation/domain-permissions/overview.tsx | 3 - .../moderation/domain-permissions/process.tsx | 2 - web/source/settings/views/moderation/menu.tsx | 121 +++++++++++++ .../settings/views/moderation/reports/detail.tsx | 10 +- .../settings/views/moderation/reports/overview.tsx | 4 +- .../settings/views/moderation/reports/username.tsx | 36 ++-- web/source/settings/views/moderation/router.tsx | 149 +++++++++++++++ web/source/settings/views/moderation/routes.tsx | 201 --------------------- 14 files changed, 309 insertions(+), 242 deletions(-) create mode 100644 web/source/settings/views/moderation/menu.tsx create mode 100644 web/source/settings/views/moderation/router.tsx delete mode 100644 web/source/settings/views/moderation/routes.tsx (limited to 'web/source/settings/views/moderation') diff --git a/web/source/settings/views/moderation/accounts/detail/actions.tsx b/web/source/settings/views/moderation/accounts/detail/actions.tsx index 74c5371f1..212bb4089 100644 --- a/web/source/settings/views/moderation/accounts/detail/actions.tsx +++ b/web/source/settings/views/moderation/accounts/detail/actions.tsx @@ -19,17 +19,14 @@ import React from "react"; -import { useActionAccountMutation } from "../../../../lib/query"; - +import { useActionAccountMutation } from "../../../../lib/query/admin"; import MutationButton from "../../../../components/form/mutation-button"; - import useFormSubmit from "../../../../lib/form/submit"; import { useValue, useTextInput, useBoolInput, } from "../../../../lib/form"; - import { Checkbox, TextInput } from "../../../../components/form/inputs"; import { AdminAccount } from "../../../../lib/types/account"; diff --git a/web/source/settings/views/moderation/accounts/detail/handlesignup.tsx b/web/source/settings/views/moderation/accounts/detail/handlesignup.tsx index 5655421ea..59fa8bc65 100644 --- a/web/source/settings/views/moderation/accounts/detail/handlesignup.tsx +++ b/web/source/settings/views/moderation/accounts/detail/handlesignup.tsx @@ -19,18 +19,14 @@ import React from "react"; import { useLocation } from "wouter"; - -import { useHandleSignupMutation } from "../../../../lib/query"; - +import { useHandleSignupMutation } from "../../../../lib/query/admin"; import MutationButton from "../../../../components/form/mutation-button"; - import useFormSubmit from "../../../../lib/form/submit"; import { useValue, useTextInput, useBoolInput, } from "../../../../lib/form"; - import { Checkbox, Select, TextInput } from "../../../../components/form/inputs"; import { AdminAccount } from "../../../../lib/types/account"; diff --git a/web/source/settings/views/moderation/accounts/detail/index.tsx b/web/source/settings/views/moderation/accounts/detail/index.tsx index f507391d3..f34bc7481 100644 --- a/web/source/settings/views/moderation/accounts/detail/index.tsx +++ b/web/source/settings/views/moderation/accounts/detail/index.tsx @@ -19,12 +19,9 @@ import React from "react"; -import { useGetAccountQuery } from "../../../../lib/query"; - +import { useGetAccountQuery } from "../../../../lib/query/admin"; import FormWithData from "../../../../lib/form/form-with-data"; - import FakeProfile from "../../../../components/fake-profile"; - import { AdminAccount } from "../../../../lib/types/account"; import { HandleSignup } from "./handlesignup"; import { AccountActions } from "./actions"; diff --git a/web/source/settings/views/moderation/accounts/pending/index.tsx b/web/source/settings/views/moderation/accounts/pending/index.tsx index 96b7796e5..d5a32f09b 100644 --- a/web/source/settings/views/moderation/accounts/pending/index.tsx +++ b/web/source/settings/views/moderation/accounts/pending/index.tsx @@ -18,7 +18,7 @@ */ import React from "react"; -import { useSearchAccountsQuery } from "../../../../lib/query"; +import { useSearchAccountsQuery } from "../../../../lib/query/admin"; import { AccountList } from "../../../../components/account-list"; export default function AccountsPending() { diff --git a/web/source/settings/views/moderation/accounts/search/index.tsx b/web/source/settings/views/moderation/accounts/search/index.tsx index 7d5515a43..8ee579e16 100644 --- a/web/source/settings/views/moderation/accounts/search/index.tsx +++ b/web/source/settings/views/moderation/accounts/search/index.tsx @@ -19,9 +19,8 @@ import React from "react"; -import { useLazySearchAccountsQuery } from "../../../../lib/query"; +import { useLazySearchAccountsQuery } from "../../../../lib/query/admin"; import { useTextInput } from "../../../../lib/form"; - import { AccountList } from "../../../../components/account-list"; import { SearchAccountParams } from "../../../../lib/types/account"; import { Select, TextInput } from "../../../../components/form/inputs"; diff --git a/web/source/settings/views/moderation/domain-permissions/form.tsx b/web/source/settings/views/moderation/domain-permissions/form.tsx index ba0808873..ea7fdbc23 100644 --- a/web/source/settings/views/moderation/domain-permissions/form.tsx +++ b/web/source/settings/views/moderation/domain-permissions/form.tsx @@ -20,18 +20,14 @@ import React from "react"; import { useEffect } from "react"; - import { useExportDomainListMutation } from "../../../lib/query/admin/domain-permissions/export"; import useFormSubmit from "../../../lib/form/submit"; - import { RadioGroup, TextArea, Select, } from "../../../components/form/inputs"; - import MutationButton from "../../../components/form/mutation-button"; - import { Error } from "../../../components/error"; import ExportFormatTable from "./export-format-table"; diff --git a/web/source/settings/views/moderation/domain-permissions/overview.tsx b/web/source/settings/views/moderation/domain-permissions/overview.tsx index d2bb77087..fca8e348e 100644 --- a/web/source/settings/views/moderation/domain-permissions/overview.tsx +++ b/web/source/settings/views/moderation/domain-permissions/overview.tsx @@ -22,11 +22,8 @@ import React from "react"; import { useMemo } from "react"; import { Link, useLocation, useParams } from "wouter"; import { matchSorter } from "match-sorter"; - import { useTextInput } from "../../../lib/form"; - import { TextInput } from "../../../components/form/inputs"; - import Loading from "../../../components/loading"; import { useDomainAllowsQuery, useDomainBlocksQuery } from "../../../lib/query/admin/domain-permissions/get"; import type { MappedDomainPerms, PermType } from "../../../lib/types/domain-permission"; diff --git a/web/source/settings/views/moderation/domain-permissions/process.tsx b/web/source/settings/views/moderation/domain-permissions/process.tsx index 6c7cb218e..d54d7399c 100644 --- a/web/source/settings/views/moderation/domain-permissions/process.tsx +++ b/web/source/settings/views/moderation/domain-permissions/process.tsx @@ -18,9 +18,7 @@ */ import React from "react"; - import { memo, useMemo, useCallback, useEffect } from "react"; - import { isValidDomainPermission, hasBetterScope } from "../../../lib/util/domain-permission"; import { diff --git a/web/source/settings/views/moderation/menu.tsx b/web/source/settings/views/moderation/menu.tsx new file mode 100644 index 000000000..4f01e0798 --- /dev/null +++ b/web/source/settings/views/moderation/menu.tsx @@ -0,0 +1,121 @@ +/* + 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 . +*/ + +import { MenuItem } from "../../lib/navigation/menu"; +import React from "react"; +import { useHasPermission } from "../../lib/navigation/util"; + +/* + EXPORTED COMPONENTS +*/ + +/** + * - /settings/moderation/reports/overview + * - /settings/moderation/reports/:reportId + * - /settings/moderation/accounts/overview + * - /settings/moderation/accounts/pending + * - /settings/moderation/accounts/:accountID + * - /settings/moderation/domain-permissions/:permType + * - /settings/moderation/domain-permissions/:permType/:domain + * - /settings/moderation/domain-permissions/import-export + * - /settings/moderation/domain-permissions/process + */ +export default function ModerationMenu() { + const permissions = ["moderator"]; + const moderator = useHasPermission(permissions); + if (!moderator) { + return null; + } + + return ( + + + + + + ); +} + +/* + INTERNAL COMPONENTS +*/ + +function ModerationReportsMenu() { + return ( + + ); +} + +function ModerationAccountsMenu() { + return ( + + + + + ); +} + +function ModerationDomainPermsMenu() { + return ( + + + + + + ); +} diff --git a/web/source/settings/views/moderation/reports/detail.tsx b/web/source/settings/views/moderation/reports/detail.tsx index 9bb2de6b2..bc356edce 100644 --- a/web/source/settings/views/moderation/reports/detail.tsx +++ b/web/source/settings/views/moderation/reports/detail.tsx @@ -52,7 +52,15 @@ function ReportDetailForm({ data: report }) { return (
- reported + + <> reported +
{report.action_taken && diff --git a/web/source/settings/views/moderation/reports/overview.tsx b/web/source/settings/views/moderation/reports/overview.tsx index ca8fc185c..03ce1a382 100644 --- a/web/source/settings/views/moderation/reports/overview.tsx +++ b/web/source/settings/views/moderation/reports/overview.tsx @@ -19,9 +19,7 @@ import React from "react"; import { Link } from "wouter"; - import FormWithData from "../../../lib/form/form-with-data"; - import Username from "./username"; import { useListReportsQuery } from "../../../lib/query/admin/reports"; @@ -77,7 +75,7 @@ function ReportEntry({ report }) {
- reported + reported

{report.action_taken ? "Resolved" : "Open"} diff --git a/web/source/settings/views/moderation/reports/username.tsx b/web/source/settings/views/moderation/reports/username.tsx index 6fba0b804..294d97e8b 100644 --- a/web/source/settings/views/moderation/reports/username.tsx +++ b/web/source/settings/views/moderation/reports/username.tsx @@ -19,8 +19,14 @@ import React from "react"; import { Link } from "wouter"; +import { AdminAccount } from "../../../lib/types/account"; -export default function Username({ user, link = true }) { +interface UsernameProps { + user: AdminAccount; + link?: string; +} + +export default function Username({ user, link }: UsernameProps) { let className = "user"; let isLocal = user.domain == null; @@ -36,19 +42,25 @@ export default function Username({ user, link = true }) { ? { fa: "fa-home", info: "Local user" } : { fa: "fa-external-link-square", info: "Remote user" }; - let Element: any = "div"; - let href: any = null; - - if (link) { - Element = Link; - href = `/settings/admin/accounts/${user.id}`; - } - - return ( - + const content = ( + <> @{user.account.acct}