Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 8x 8x 8x 8x 199x 199x 51x 313x 199x 199x 60x 60x 24x 115x 60x 60x 72x 72x 72x 21x 72x 22x 22x 11x 94x 94x 43x | import { useInfiniteQuery, useQuery } from "@tanstack/react-query";
import { eventAttendeesKey, eventKey, eventOrganizersKey, myEventsKey, QueryType } from "features/queryKeys";
import { RpcError } from "grpc-web";
import { Event, ListEventAttendeesRes, ListEventOrganizersRes, ListMyEventsRes } from "proto/events_pb";
import { EventSearchRes } from "proto/search_pb";
import { service } from "service";
import type { ListMyEventsInput } from "service/events";
import { GeocodeResult } from "utils/hooks";
interface UseEventUsersInput {
eventId: number;
type: QueryType;
enabled?: boolean;
pageSize?: number;
}
const SUMMARY_QUERY_PAGE_SIZE = 5;
export function useEventOrganizers({ enabled = true, eventId, type }: UseEventUsersInput) {
const query = useInfiniteQuery<ListEventOrganizersRes.AsObject, RpcError>({
queryKey: eventOrganizersKey({ eventId, type }),
queryFn: ({ pageParam }) =>
service.events.listEventOrganizers({
eventId,
pageSize: type === "summary" ? SUMMARY_QUERY_PAGE_SIZE : undefined,
pageToken: pageParam as string | undefined,
}),
getNextPageParam: (lastPage) => lastPage.nextPageToken || undefined,
enabled,
initialPageParam: undefined,
});
const organizerIds = query.data?.pages.flatMap((res) => res.organizerUserIdsList);
return { ...query, organizerIds };
}
export function useEventAttendees({ enabled = true, eventId, type, pageSize }: UseEventUsersInput) {
const query = useInfiniteQuery<ListEventAttendeesRes.AsObject, RpcError>({
queryKey: [...eventAttendeesKey({ eventId, type }), pageSize],
queryFn: ({ pageParam }) =>
service.events.listEventAttendees({
eventId,
pageSize: pageSize ?? (type === "summary" ? SUMMARY_QUERY_PAGE_SIZE : undefined),
pageToken: pageParam as string | undefined,
}),
getNextPageParam: (lastPage) => lastPage.nextPageToken || undefined,
enabled,
initialPageParam: undefined,
});
const attendeesIds = query.data?.pages.flatMap((data) => data.attendeeUserIdsList);
return {
...query,
attendeesIds,
};
}
export function useEvent({ eventId, enabled }: { eventId: number; enabled?: boolean }) {
const isValidEventId = eventId > 0;
const eventQuery = useQuery<Event.AsObject, RpcError>({
queryKey: eventKey(eventId),
queryFn: () => service.events.getEvent(eventId),
enabled: enabled !== undefined ? enabled && isValidEventId : isValidEventId,
});
return {
...eventQuery,
eventId,
isValidEventId,
};
}
export function useListMyEvents({
myCommunitiesExcludeGlobal,
pastEvents,
pageNumber,
pageSize,
showCancelled,
}: Omit<ListMyEventsInput, "pageToken">) {
return useQuery<ListMyEventsRes.AsObject, RpcError>({
queryKey: [myEventsKey(pastEvents ? "past" : "upcoming"), pageNumber, showCancelled],
queryFn: ({ pageParam }) =>
service.events.listMyEvents({
myCommunitiesExcludeGlobal,
pastEvents,
pageNumber,
pageSize,
pageToken: pageParam as string | undefined,
showCancelled,
}),
});
}
export function useEventSearch({
pageNumber,
pageSize,
pastEvents,
isMyCommunities,
searchLocation,
excludeAttending,
}: {
pageNumber: number;
pageSize: number;
pastEvents?: boolean;
isMyCommunities?: boolean;
searchLocation?: GeocodeResult | "";
attending?: boolean;
organizing?: boolean;
excludeAttending?: boolean;
}) {
return useQuery<EventSearchRes.AsObject, RpcError>({
queryKey: ["searchEvents", isMyCommunities, pageNumber, pastEvents, searchLocation, excludeAttending],
queryFn: () =>
service.search.EventSearch({
pageNumber,
pageSize,
pastEvents,
isMyCommunities,
searchLocation,
excludeAttending,
}),
});
}
|