all repos — caroster @ 392f026c797ca85247bf71cdef9b86c274532e60

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

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

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