/* * Vencord, a Discord client mod * Copyright (c) 2025 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./styles.css"; import { copyToClipboard } from "@utils/clipboard"; import { findByPropsLazy } from "@webpack"; import { Button, Flex, Forms, Parser, Text, useEffect, useState } from "@webpack/common"; import { FriendInvite } from "./types"; const FormStyles = findByPropsLazy("header", "title", "emptyState"); const { createFriendInvite, getAllFriendInvites, revokeFriendInvites } = findByPropsLazy("createFriendInvite"); function CopyButton({ copyText, copiedText, onClick }) { const [copied, setCopied] = useState(false); const handleButtonClick = (e: React.MouseEvent) => { setCopied(true); setTimeout(() => setCopied(false), 1000); onClick(e); }; return ( ); } function FriendInviteCard({ invite }: { invite: FriendInvite; }) { return (
{invite.code} Expires {Parser.parse(``)} • {invite.uses}/{invite.max_uses} uses
copyToClipboard(`https://discord.gg/${invite.code}`)} />
); } export default function FriendCodesPanel() { const [invites, setInvites] = useState([]); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); getAllFriendInvites() .then(setInvites) .then(() => setLoading(false)); }, []); return ( <>
Your Friend Codes

{`Friend Codes - ${invites.length}`}

{loading ? ( Loading... ) : invites.length === 0 ? ( You don't have any friend codes yet ) : (
{invites.map(invite => ( ))}
)} ); }