Skip to content
Snippets Groups Projects
Members.tsx 1.05 KiB
Newer Older
import styles from './Panes.module.scss';
insert's avatar
insert committed
import { useEffect, useState } from "preact/hooks";
import { Servers } from "revolt.js/dist/api/objects";
import { useForceUpdate, useUsers } from "../../../context/revoltjs/hooks";

interface Props {
    server: Servers.Server;
}

// ! FIXME: bad code :)
insert's avatar
insert committed
export function Members({ server }: Props) {
    const [members, setMembers] = useState<Servers.Member[] | undefined>(undefined);
insert's avatar
insert committed
    const ctx = useForceUpdate();
    const users = useUsers(members?.map(x => x._id.user) ?? [], ctx);

    useEffect(() => {
        ctx.client.servers.members.fetchMembers(server._id)
            .then(members => setMembers(members))
    }, [ ]);

    return (
        <div className={styles.members}>
            <div className={styles.subtitle}>
                { members?.length ?? 0 } Members
            </div>
            { members && members.length > 0 && users?.map(x => x && 
                <div className={styles.member}>
                    <div>@{x.username}</div>
                </div>) 
            }
insert's avatar
insert committed
        </div>
    );
}