import { ChevronDown } from "@styled-icons/boxicons-regular"; import { isEqual } from "lodash"; import { Servers } from "revolt.js/dist/api/objects"; import styles from "./Panes.module.scss"; import { Text } from "preact-i18n"; import { useEffect, useState } from "preact/hooks"; import { useForceUpdate, useUsers } from "../../../context/revoltjs/hooks"; import UserIcon from "../../../components/common/user/UserIcon"; import Button from "../../../components/ui/Button"; import Checkbox from "../../../components/ui/Checkbox"; import IconButton from "../../../components/ui/IconButton"; import Overline from "../../../components/ui/Overline"; interface Props { server: Servers.Server; } export function Members({ server }: Props) { const [members, setMembers] = useState( undefined, ); const ctx = useForceUpdate(); const [selected, setSelected] = useState(); const users = useUsers(members?.map((x) => x._id.user) ?? [], ctx); useEffect(() => { ctx.client.servers.members .fetchMembers(server._id) .then((members) => setMembers(members)); }, []); const [roles, setRoles] = useState([]); useEffect(() => { if (selected) { setRoles( members!.find((x) => x._id.user === selected)?.roles ?? [], ); } }, [selected]); return (
{members?.length ?? 0} Members
{members && members.length > 0 && members .map((x) => { return { member: x, user: users.find((y) => y?._id === x._id.user), }; }) .map(({ member, user }) => ( <>
setSelected( selected === member._id.user ? undefined : member._id.user, ) }> {" "} {user?.username ?? ( )}
{selected === member._id.user && (
Roles {Object.keys(server.roles ?? {}).map( (key) => { let role = server.roles![key]; return ( { if (v) { setRoles([ ...roles, key, ]); } else { setRoles( roles.filter( (x) => x !== key, ), ); } }}> {role.name} ); }, )}
)} ))}
); }