/* * Vencord, a Discord client mod * Copyright (c) 2023 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./contributorModal.css"; import { useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; import { Link } from "@components/Link"; import { DevsById } from "@utils/constants"; import { fetchUserProfile } from "@utils/discord"; import { classes, pluralise } from "@utils/misc"; import { ModalContent, ModalRoot, openModal } from "@utils/modal"; import { Forms, showToast, useEffect, useMemo, UserProfileStore, useStateFromStores } from "@webpack/common"; import { User } from "discord-types/general"; import Plugins from "~plugins"; import { PluginCard } from "."; import { GithubButton, WebsiteButton } from "./LinkIconButton"; const cl = classNameFactory("vc-author-modal-"); export function openContributorModal(user: User) { openModal(modalProps => ); } function ContributorModal({ user }: { user: User; }) { useSettings(); const profile = useStateFromStores([UserProfileStore], () => UserProfileStore.getUserProfile(user.id)); useEffect(() => { if (!profile && !user.bot && user.id) fetchUserProfile(user.id); }, [user.id]); const githubName = profile?.connectedAccounts?.find(a => a.type === "github")?.name; const website = profile?.connectedAccounts?.find(a => a.type === "domain")?.name; const plugins = useMemo(() => { const allPlugins = Object.values(Plugins); const pluginsByAuthor = DevsById[user.id] ? allPlugins.filter(p => p.authors.includes(DevsById[user.id])) : allPlugins.filter(p => p.authors.some(a => a.name === user.username)); return pluginsByAuthor .filter(p => !p.name.endsWith("API")) .sort((a, b) => Number(a.required ?? false) - Number(b.required ?? false)); }, [user.id, user.username]); const ContributedHyperLink = contributed; return ( <>
{user.username}
{website && ( )} {githubName && ( )}
{plugins.length ? ( This person has {ContributedHyperLink} to {pluralise(plugins.length, "plugin")}! ) : ( This person has not made any plugins. They likely {ContributedHyperLink} to Vencord in other ways! )} {!!plugins.length && (
{plugins.map(p => showToast("Restart to apply changes!")} /> )}
)} ); }