All files / react-app/src/hooks useAvailableStates.ts

91.66% Statements 11/12
83.33% Branches 5/6
85.71% Functions 6/7
100% Lines 10/10

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                  19x 13x 392x     6x 94x   6x   6x 336x 336x   6x      
import { useMemo } from "react";
import { FULL_CENSUS_STATES } from "shared-types";
import { UserRole } from "shared-types/events/legacy-user";
 
import { StateAccess } from "@/api";
 
// Get available states for the role to be requested
// eslint-disable-next-line prettier/prettier
export function useAvailableStates(roleToRequest: UserRole, stateAccessList: StateAccess[] | undefined) {
  return useMemo(() => {
    if (!stateAccessList) {
      return FULL_CENSUS_STATES.map(({ label, value }) => ({ label, value }));
    }
 
    const validAccess = stateAccessList.filter(
      ({ role, territory }) => role === roleToRequest && territory !== "ZZ",
    );
    const accessedStates = new Set(validAccess.map(({ territory }) => territory));
 
    const availableStates = FULL_CENSUS_STATES.filter(
      ({ value }) => !accessedStates.has(value) && value !== "ZZ",
    ).map(({ label, value }) => ({ label, value }));
 
    return availableStates;
  }, [roleToRequest, stateAccessList]);
}