All files / libs/assignments/plans/state/src/lib plan-assignments.queries.ts

50% Statements 10/20
100% Branches 1/1
33.33% Functions 4/12
50% Lines 10/20

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                      53x             2x   1x       53x 2x         53x 2x   2x                                             53x                                                     53x                                                    
import { useQuery } from '@tanstack/react-query';
import { useIntl } from 'react-intl';
 
import { quotaAssignmentsQueryKeys } from '@amalia/assignments/quotas/state';
import { useMutation } from '@amalia/ext/react-query';
import { toError } from '@amalia/ext/typescript';
import { type Plan } from '@amalia/payout-definition/plans/types';
 
import { PlanAssignmentsApiClient } from './api-client/plan-assignments.api-client';
import { planAssignmentsMutationKeys, planAssignmentsQueryKeys } from './queries.keys';
 
export const usePlanAssignments = <TRelations extends 'user'[] = []>({
  planId,
  relations = [] as unknown as TRelations,
}: {
  planId?: Plan['id'];
  relations?: TRelations;
}) =>
  useQuery({
    queryKey: planAssignmentsQueryKeys.plan(planId!, relations),
    queryFn: () => PlanAssignmentsApiClient.getPlanAssignments({ planId: planId!, relations }),
    enabled: !!planId,
  });
 
export const useUpsertPlanAssignmentsDryRun = () =>
  useMutation({
    mutationKey: planAssignmentsMutationKeys.upsertDryRun(),
    mutationFn: PlanAssignmentsApiClient.upsertPlanAssignmentsDryRun,
  });
 
export const useUpsertPlanAssignments = () => {
  const { formatMessage } = useIntl();
 
  return useMutation({
    mutationKey: planAssignmentsMutationKeys.upsert(),
    mutationFn: PlanAssignmentsApiClient.upsertPlanAssignments,
    meta: {
      successMessage: (_, assignmentsToUpsert) =>
        formatMessage(
          {
            defaultMessage: '{count, plural, one {Assignment} other {# assignments}} created successfully.',
          },
          { count: assignmentsToUpsert.length },
        ),
      invalidateQueries: [planAssignmentsQueryKeys.all(), quotaAssignmentsQueryKeys.all()],
      errorMessage: (err, assignmentsToUpsert) =>
        formatMessage(
          {
            defaultMessage: '{count, plural, one {Assignment} other {# assignments}} could not be created: {error}.',
          },
          { count: assignmentsToUpsert.length, error: toError(err).message },
        ),
    },
  });
};
 
export const useUpdatePlanAssignments = () => {
  const { formatMessage } = useIntl();
 
  return useMutation({
    mutationKey: planAssignmentsMutationKeys.update(),
    mutationFn: PlanAssignmentsApiClient.updatePlanAssignments,
    meta: {
      invalidateQueries: [planAssignmentsQueryKeys.all(), quotaAssignmentsQueryKeys.all()],
      successMessage: (_, assignmentsToUpdate) =>
        formatMessage(
          {
            defaultMessage: '{assignmentsCount, plural, one {Assignment} other {# assignments}} updated successfully.',
          },
          { assignmentsCount: assignmentsToUpdate.length },
        ),
      errorMessage: (error, assignmentsToUpdate) =>
        formatMessage(
          {
            defaultMessage:
              '{assignmentsCount, plural, one {Assignment} other {# assignments}} could not be updated: {errorMessage}.',
          },
          { errorMessage: toError(error).message, assignmentsCount: assignmentsToUpdate.length },
        ),
    },
  });
};
 
export const useDeletePlanAssignments = () => {
  const { formatMessage } = useIntl();
 
  return useMutation({
    mutationKey: planAssignmentsMutationKeys.delete(),
    mutationFn: PlanAssignmentsApiClient.deletePlanAssignments,
    meta: {
      invalidateQueries: [planAssignmentsQueryKeys.all(), quotaAssignmentsQueryKeys.all()],
      successMessage: (_, assignmentsToDelete) =>
        formatMessage(
          {
            defaultMessage: '{assignmentsCount, plural, one {Assignment} other {# assignments}} deleted successfully.',
          },
          { assignmentsCount: assignmentsToDelete.length },
        ),
      errorMessage: (error, assignmentsToDelete) =>
        formatMessage(
          {
            defaultMessage:
              '{assignmentsCount, plural, one {Assignment} other {# assignments}} could not be deleted: {errorMessage}.',
          },
          { errorMessage: toError(error).message, assignmentsCount: assignmentsToDelete.length },
        ),
    },
  });
};