All files / apps/reallocation/src/screens/ChooseObserver/hooks useObserverData.ts

100% Statements 25/25
87.5% Branches 14/16
100% Functions 5/5
100% Lines 25/25

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                1x 1x   1x                 3x 1x     2x   2x 2x 5x 5x     5x 1x         1x     1x 3x           3x               3x         3x 3x         3x 3x 3x       3x   3x               3x              
import { useMemo } from 'react';
 
import {
  useEmployeeOptions,
  useEmployeeRelationshipSuggestions,
} from '@repo/hooks/employeeQueries';
import { RequestFor, useGetMyRequestsShared } from '@repo/hooks/userQueries';
 
const REQUEST_CATEGORY = 'reallocation';
const REQUEST_LIMIT = 10;
 
const resolveDefaultIds = ({
  isFirstRequest,
  relationshipSuggestedIds,
  items,
}: {
  isFirstRequest: boolean;
  relationshipSuggestedIds: string[];
  items: { cc: string[] }[];
}) => {
  if (isFirstRequest) {
    return relationshipSuggestedIds;
  }
 
  const ccSet = new Set<string>();
 
  for (const item of items) {
    for (const email of item.cc) {
      Eif (!ccSet.has(email)) {
        ccSet.add(email);
      }
 
      if (ccSet.size >= 3) {
        return Array.from(ccSet);
      }
    }
  }
 
  return Array.from(ccSet);
};
 
export const useObserverData = () => {
  const { employeeOptions, meEmail, isLoading, isError } = useEmployeeOptions();
 
  const {
    data: myTimeOffRequests,
    isLoading: isLoadingMyTimeOffRequests,
    isError: isErrorMyTimeOffRequests,
  } = useGetMyRequestsShared({
    category: REQUEST_CATEGORY,
    limit: REQUEST_LIMIT,
    requestFor: RequestFor.ME,
  });
 
  // Fetch relationships independently from request history.
  const { suggestedIds: relationshipSuggestedIds } =
    useEmployeeRelationshipSuggestions({
      email: meEmail,
      enabled: Boolean(meEmail),
    });
 
  const requestItems = useMemo(
    () => myTimeOffRequests?.items ?? [],
    [myTimeOffRequests?.items],
  );
 
  const hasLoadedMyTimeOffRequests =
    !isLoadingMyTimeOffRequests && !isErrorMyTimeOffRequests;
  const isFirstRequest = useMemo(
    () => hasLoadedMyTimeOffRequests && requestItems.length === 0,
    [hasLoadedMyTimeOffRequests, requestItems.length],
  );
 
  const defaultObservers = useMemo(
    () =>
      resolveDefaultIds({
        isFirstRequest,
        relationshipSuggestedIds,
        items: requestItems,
      }),
    [isFirstRequest, relationshipSuggestedIds, requestItems],
  );
 
  return {
    employeeOptions,
    defaultObservers,
    isLoading: isLoading || isLoadingMyTimeOffRequests,
    isError: isError || isErrorMyTimeOffRequests,
  };
};