From 89e0cfd8741b6763ca04e90558bccf4c3c380cfa Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Sat, 13 Apr 2024 13:25:10 +0200
Subject: [feature] Admin accounts endpoints; approve/reject sign-ups (#2826)

* update settings panels, add pending overview + approve/deny functions

* add admin accounts get, approve, reject

* send approved/rejected emails

* use signup URL

* docs!

* email

* swagger

* web linting

* fix email tests

* wee lil fixerinos

* use new paging logic for GetAccounts() series of admin endpoints, small changes to query building

* shuffle useAccountIDIn check *before* adding to query

* fix parse from toot react error

* use `netip.Addr`

* put valid slices in globals

* optimistic updates for account state

---------

Co-authored-by: kim <grufwub@gmail.com>
---
 web/source/settings/components/account-list.tsx | 82 +++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 web/source/settings/components/account-list.tsx

(limited to 'web/source/settings/components/account-list.tsx')

diff --git a/web/source/settings/components/account-list.tsx b/web/source/settings/components/account-list.tsx
new file mode 100644
index 000000000..4df05c046
--- /dev/null
+++ b/web/source/settings/components/account-list.tsx
@@ -0,0 +1,82 @@
+/*
+	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/>.
+*/
+
+import React from "react";
+import { Link } from "wouter";
+import { Error } from "./error";
+import { AdminAccount } from "../lib/types/account";
+import { SerializedError } from "@reduxjs/toolkit";
+import { FetchBaseQueryError } from "@reduxjs/toolkit/query";
+
+export interface AccountListProps {
+	isSuccess: boolean,
+	data: AdminAccount[] | undefined,
+	isLoading: boolean,
+	isError: boolean,
+	error: FetchBaseQueryError | SerializedError | undefined,
+	emptyMessage: string,
+}
+
+export function AccountList({
+	isLoading,
+	isSuccess,
+	data,
+	isError,
+	error,
+	emptyMessage,
+}: AccountListProps) {
+	if (!(isSuccess || isError)) {
+		// Hasn't been called yet.
+		return null;
+	}
+
+	if (isLoading) {
+		return <i
+			className="fa fa-fw fa-refresh fa-spin"
+			aria-hidden="true"
+			title="Loading..."
+		/>;
+	}
+
+	if (error) {
+		return <Error error={error} />;
+	}
+
+	if (data == undefined || data.length == 0) {
+		return <b>{emptyMessage}</b>;
+	}
+
+	return (
+		<div className="list">
+			{data.map(({ account: acc }) => (		
+				<Link
+					key={acc.acct}
+					className="account entry"
+					href={`/settings/admin/accounts/${acc.id}`}
+				>
+					{acc.display_name?.length > 0
+						? acc.display_name
+						: acc.username
+					}
+					<span id="username">(@{acc.acct})</span>
+				</Link>
+			))}
+		</div>
+	);
+}
\ No newline at end of file
-- 
cgit v1.2.3

