import { useEffect } from "react"; import { GroupStatus, PacketGroupInviteInfo } from "../ProtocolProvider/protocol/packets/packet.group.invite.info"; import { useSender } from "../ProtocolProvider/useSender"; import { usePacket } from "../ProtocolProvider/usePacket"; import { useMemory } from "../MemoryProvider/useMemory"; export function useGroupInviteStatus(groupId: string) : { inviteStatus: GroupStatus; setInviteStatus: (status: GroupStatus) => void; setInviteStatusByGroupId: (groupIdParam: string, status: GroupStatus) => void; } { const [invitesCache, setInvitesCache] = useMemory("groups_invites_cache", [], true); const send = useSender(); useEffect(() => { (async () => { if(groupId == ''){ return; } const packet = new PacketGroupInviteInfo(); packet.setGroupId(groupId); send(packet); })(); }, [groupId]); usePacket(0x13, (packet: PacketGroupInviteInfo) => { if(packet.getGroupId() != groupId){ return; } setInvitesCache((prev) => ({ ...prev, [groupId]: packet.getGroupStatus(), })); }, [groupId]); const setInviteStatus = (status: GroupStatus) => { setInvitesCache((prev) => ({ ...prev, [groupId]: status, })); } const setInviteStatusByGroupId = (groupIdParam: string, status: GroupStatus) => { setInvitesCache((prev) => ({ ...prev, [groupIdParam]: status, })); } return { inviteStatus: invitesCache[groupId] ?? GroupStatus.NOT_JOINED, setInviteStatus, setInviteStatusByGroupId, }; }