revite/src/pages/settings/server/Members.tsx

45 lines
989 B
TypeScript
Raw Normal View History

2021-06-19 22:37:12 +01:00
import { Servers } from "revolt.js/dist/api/objects";
2021-07-05 11:23:23 +01:00
import styles from "./Panes.module.scss";
import { useEffect, useState } from "preact/hooks";
2021-06-19 22:37:12 +01:00
import { useForceUpdate, useUsers } from "../../../context/revoltjs/hooks";
interface Props {
2021-07-05 11:23:23 +01:00
server: Servers.Server;
2021-06-19 22:37:12 +01:00
}
2021-07-01 17:36:34 +01:00
// ! FIXME: bad code :)
2021-06-19 22:37:12 +01:00
export function Members({ server }: Props) {
2021-07-05 11:23:23 +01:00
const [members, setMembers] = useState<Servers.Member[] | undefined>(
undefined,
);
2021-07-01 17:36:34 +01:00
2021-07-05 11:23:23 +01:00
const ctx = useForceUpdate();
const users = useUsers(members?.map((x) => x._id.user) ?? [], ctx);
2021-06-19 22:37:12 +01:00
2021-07-05 11:23:23 +01:00
useEffect(() => {
ctx.client.servers.members
.fetchMembers(server._id)
.then((members) => setMembers(members));
}, []);
2021-06-19 22:37:12 +01:00
2021-07-05 11:23:23 +01:00
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>
),
)}
</div>
);
2021-06-19 22:37:12 +01:00
}