1
0
Fork 0

feat: unsuspend users

fix-1
Paul Makles 2023-07-28 12:11:19 +01:00
parent aca5010b41
commit 251cb9b7f6
No known key found for this signature in database
GPG Key ID: 5059F398521BB0F6
2 changed files with 56 additions and 21 deletions

View File

@ -40,7 +40,7 @@ export function ServerActions({ server }: { server: Server }) {
} catch (err) { } catch (err) {
toast({ toast({
title: "Failed to remove server from Discover", title: "Failed to remove server from Discover",
description: "" + err, description: String(err),
variant: "destructive", variant: "destructive",
}); });
} }
@ -61,7 +61,7 @@ export function ServerActions({ server }: { server: Server }) {
} catch (err) { } catch (err) {
toast({ toast({
title: "Failed to add server to Discover", title: "Failed to add server to Discover",
description: "" + err, description: String(err),
variant: "destructive", variant: "destructive",
}); });
} }
@ -109,7 +109,7 @@ export function ServerActions({ server }: { server: Server }) {
} catch (err) { } catch (err) {
toast({ toast({
title: "Failed to update server flags", title: "Failed to update server flags",
description: "" + err, description: String(err),
variant: "destructive", variant: "destructive",
}); });
} }

View File

@ -24,6 +24,7 @@ import {
banUser, banUser,
sendAlert, sendAlert,
suspendUser, suspendUser,
unsuspendUser,
updateBotDiscoverability, updateBotDiscoverability,
} from "@/lib/actions"; } from "@/lib/actions";
import { useRef, useState } from "react"; import { useRef, useState } from "react";
@ -34,8 +35,11 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
const alertMessage = useRef(""); const alertMessage = useRef("");
const { toast } = useToast(); const { toast } = useToast();
const [userDraft, setUserDraft] = useState(user);
const [botDraft, setBotDraft] = useState(bot); const [botDraft, setBotDraft] = useState(bot);
const userInaccessible = userDraft.flags === 4 || userDraft.flags === 2;
return ( return (
<div className="flex gap-2"> <div className="flex gap-2">
{bot ? ( {bot ? (
@ -52,7 +56,7 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
} catch (err) { } catch (err) {
toast({ toast({
title: "Failed to remove bot from Discover", title: "Failed to remove bot from Discover",
description: "" + err, description: String(err),
variant: "destructive", variant: "destructive",
}); });
} }
@ -73,7 +77,7 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
} catch (err) { } catch (err) {
toast({ toast({
title: "Failed to add bot to Discover", title: "Failed to add bot to Discover",
description: "" + err, description: String(err),
variant: "destructive", variant: "destructive",
}); });
} }
@ -93,29 +97,49 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
<AlertDialog> <AlertDialog>
<AlertDialogTrigger asChild> <AlertDialogTrigger asChild>
<Button className="flex-1 bg-orange-400 hover:bg-orange-300"> <Button
Suspend className="flex-1 bg-orange-400 hover:bg-orange-300"
disabled={userInaccessible}
>
{userDraft.flags === 1 ? "Unsuspend" : "Suspend"}
</Button> </Button>
</AlertDialogTrigger> </AlertDialogTrigger>
<AlertDialogContent> <AlertDialogContent>
<AlertDialogHeader> <AlertDialogHeader>
<AlertDialogTitle> <AlertDialogTitle>
Are you sure you want to suspend this user? Are you sure you want to{" "}
{userDraft.flags === 1 ? "unsuspend" : "suspend"} this user?
</AlertDialogTitle> </AlertDialogTitle>
</AlertDialogHeader> </AlertDialogHeader>
<AlertDialogFooter> <AlertDialogFooter>
<AlertDialogCancel>Cancel</AlertDialogCancel> <AlertDialogCancel>Cancel</AlertDialogCancel>
<AlertDialogAction <AlertDialogAction
onClick={() => onClick={() =>
suspendUser(user._id) userDraft.flags === 1
.then(() => toast({ title: "Suspended user" })) ? unsuspendUser(user._id)
.catch((err) => .then(() => {
toast({ setUserDraft((user) => ({ ...user, flags: 0 }));
title: "Failed to suspend user!", toast({ title: "Unsuspended user" });
description: String(err), })
variant: "destructive", .catch((err) =>
}) toast({
) title: "Failed to unsuspend user!",
description: String(err),
variant: "destructive",
})
)
: suspendUser(user._id)
.then(() => {
setUserDraft((user) => ({ ...user, flags: 1 }));
toast({ title: "Suspended user" });
})
.catch((err) =>
toast({
title: "Failed to suspend user!",
description: String(err),
variant: "destructive",
})
)
} }
> >
Suspend Suspend
@ -126,8 +150,12 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
<AlertDialog> <AlertDialog>
<AlertDialogTrigger asChild> <AlertDialogTrigger asChild>
<Button className="flex-1" variant="destructive"> <Button
Ban className="flex-1"
variant="destructive"
disabled={userInaccessible}
>
{userDraft.flags === 4 ? "Banned" : "Ban"}
</Button> </Button>
</AlertDialogTrigger> </AlertDialogTrigger>
<AlertDialogContent> <AlertDialogContent>
@ -135,13 +163,19 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
<AlertDialogTitle> <AlertDialogTitle>
Are you sure you want to ban this user? Are you sure you want to ban this user?
</AlertDialogTitle> </AlertDialogTitle>
<AlertDialogDescription className="text-red-700">
This action is irreversible!
</AlertDialogDescription>
</AlertDialogHeader> </AlertDialogHeader>
<AlertDialogFooter> <AlertDialogFooter>
<AlertDialogCancel>Cancel</AlertDialogCancel> <AlertDialogCancel>Cancel</AlertDialogCancel>
<AlertDialogAction <AlertDialogAction
onClick={() => onClick={() =>
banUser(user._id) banUser(user._id)
.then(() => toast({ title: "Banned user" })) .then(() => {
setUserDraft((user) => ({ ...user, flags: 4 }));
toast({ title: "Banned user" });
})
.catch((err) => .catch((err) =>
toast({ toast({
title: "Failed to ban user!", title: "Failed to ban user!",
@ -165,11 +199,12 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) {
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent> <DropdownMenuContent>
<AlertDialog> <AlertDialog>
<AlertDialogTrigger className="w-full"> <AlertDialogTrigger asChild>
<DropdownMenuItem <DropdownMenuItem
onClick={() => { onClick={() => {
throw "Cancel immediate propagation."; throw "Cancel immediate propagation.";
}} }}
disabled={userInaccessible}
> >
Send Alert Send Alert
</DropdownMenuItem> </DropdownMenuItem>