import { ChevronDown } from "@styled-icons/boxicons-regular"; import { isEqual } from "lodash"; import { observer } from "mobx-react-lite"; import { Virtuoso } from "react-virtuoso"; import { Member } from "revolt.js"; import { Server } from "revolt.js"; import styles from "./Panes.module.scss"; import { Text } from "preact-i18n"; import { useEffect, useMemo, useState } from "preact/hooks"; import { Button, Preloader } from "@revoltchat/ui"; import UserIcon from "../../../components/common/user/UserIcon"; import { Username } from "../../../components/common/user/UserShort"; import Checkbox from "../../../components/ui/Checkbox"; import IconButton from "../../../components/ui/IconButton"; import InputBox from "../../../components/ui/InputBox"; import Overline from "../../../components/ui/Overline"; interface InnerProps { member: Member; } const Inner = observer(({ member }: InnerProps) => { const [open, setOpen] = useState(false); const [roles, setRoles] = useState(member.roles ?? []); useEffect(() => { setRoles(member.roles ?? []); }, [member.roles]); const server_roles = member.server?.roles ?? {}; const user = member.user; return ( <>
setOpen(!open)}> {" "}
{open && (
Roles {Object.keys(server_roles).map((key) => { const role = server_roles[key]; return ( { if (v) { setRoles([...roles, key]); } else { setRoles( roles.filter((x) => x !== key), ); } }}> {role.name} ); })}
)} ); }); interface Props { server: Server; } export const Members = ({ server }: Props) => { const [data, setData] = useState(undefined); const [query, setQuery] = useState(""); useEffect(() => { server .fetchMembers() .then((data) => data.members) .then(setData); }, [server, setData]); const members = useMemo( () => query ? data?.filter((x) => x.user?.username .toLowerCase() .includes(query.toLowerCase()), ) : data, [data, query], ); return (
setQuery(e.currentTarget.value)} contrast />
{data?.length ?? 0} Members
{members ? (
( )} />
) : ( )}
); };