"use client" import { InviteCard } from "@/components/cards/InviteCard"; import { Button } from "@/components/ui/button"; import { Command, CommandItem } from "@/components/ui/command"; import { Input } from "@/components/ui/input"; import { Popover, PopoverTrigger, PopoverContent } from "@/components/ui/popover"; import { ChannelInvite } from "@/lib/db"; import { ChevronsUpDown } from "lucide-react"; import { useMemo, useState } from "react"; import { Channel, Server, User } from "revolt-api"; export default function ServerInviteList({ server, invites, channels, users }: { server: Server, invites: ChannelInvite[], channels?: Channel[], users?: User[], }) { const [selectVanityOnly, setSelectVanityOnly] = useState(false); const [selectChannel, setSelectChannel] = useState(false); const [selectUser, setSelectUser] = useState(false); const [vanityOnly, setVanityOnly] = useState(false); const [channelFilter, setChannelFilter] = useState(""); const [userFilter, setUserFilter] = useState(""); const filteredInvites = useMemo(() => { return invites ?.filter(invite => vanityOnly ? invite.vanity : true) ?.filter(invite => channelFilter ? invite.channel == channelFilter : true) ?.filter(invite => userFilter ? invite.creator == userFilter : true) ?.reverse(); }, [vanityOnly, channelFilter, userFilter, invites]); return (
{[ { value: false, label: "All" }, { value: true, label: "Vanity" }, ].map((option) => ( { setSelectVanityOnly(false); setVanityOnly(option.value); }} >{option.label} ))} { setSelectChannel(false); setChannelFilter(""); }} >All channels {channels?.map((channel) => ( { setSelectChannel(false); setChannelFilter(channel._id); }} >{'#' + (channel as any).name} ))} { setSelectUser(false); setUserFilter(""); }} >All users {users?.map((user) => ( { setSelectUser(false); setUserFilter(user._id); }} >{user.username}#{user.discriminator} ))}
{filteredInvites.map(invite => ( c._id == invite.channel)} user={users?.find(c => c._id == invite.creator)} key={invite._id} />))}
) }