all repos — caroster @ v8.0

[Octree] Group carpool to your event https://caroster.io

frontend/containers/TravelColumns/useDisplayTravels.tsx (view raw)

 1import useEventStore from '../../stores/useEventStore';
 2import {TravelEntity} from '../../generated/graphql';
 3import useProfile from '../../hooks/useProfile';
 4import moment from 'moment';
 5import useTravelsStore from '../../stores/useTravelsStore';
 6import {useMemo} from 'react';
 7
 8const useDisplayTravels = () => {
 9  const datesFilter = useTravelsStore(s => s.datesFilter);
10  const {userId} = useProfile();
11  const event = useEventStore(s => s.event);
12
13  const dateFileredTravels = useMemo(() => {
14    const travels = event?.travels?.data || [];
15    return travels
16      .slice()
17      .sort(sortTravels(userId))
18      .filter(travel => {
19        if (datesFilter.length === 0) return true;
20        const departureDate = travel?.attributes?.departureDate
21          ? moment(travel.attributes.departureDate)
22          : null;
23        return datesFilter.some(date => date.isSame(departureDate));
24      });
25  }, [event?.travels?.data, datesFilter, userId]);
26
27  return {displayedTravels: dateFileredTravels};
28};
29
30const sortTravels =
31  userId =>
32  ({attributes: a}: TravelEntity, {attributes: b}: TravelEntity) => {
33    if (a?.user?.data?.id === userId && b?.user?.data?.id !== userId) return -1;
34    else if (a?.user?.data?.id !== userId && b?.user?.data?.id == userId)
35      return 1;
36
37    const passengerFirst =
38      Number(
39        b?.passengers?.data?.some(
40          passenger => passenger.attributes.user?.data?.id === userId
41        )
42      ) -
43      Number(
44        a?.passengers?.data?.some(
45          passenger => passenger.attributes.user?.data?.id === userId
46        )
47      );
48    if (passengerFirst !== 0) return passengerFirst;
49    const dateA = new Date(a.departureDate).getTime();
50    const dateB = new Date(b.departureDate).getTime();
51    if (dateA === dateB)
52      return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
53    else return dateA - dateB;
54  };
55
56export default useDisplayTravels;