All files / libs/payout-definition/state/src/lib/relationships relationships.queries.ts

0% Statements 0/104
0% Branches 0/1
0% Functions 0/1
0% Lines 0/104

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                                                                                                                                                                                                                 
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useIntl } from 'react-intl';

import { useSnackbars } from '@allshares/studio-design-system';
import { useMutation } from '@amalia/ext/react-query';
import { type Relationship, type RelationshipRequest } from '@amalia/payout-definition/plans/types';

import { plansQueryKeys } from '../queries.keys';

import { RelationshipsApiClient } from './relationships.api-client';
import { relationshipsMutationKeys, relationshipsQueryKeys } from './relationships.keys';

export const useRelationships = () =>
  useQuery({
    queryKey: relationshipsQueryKeys.list(),
    queryFn: () => RelationshipsApiClient.list(),
  });

export const useDeleteRelationship = () => {
  const queryClient = useQueryClient();
  const { snackSuccess, snackError } = useSnackbars();
  const { formatMessage } = useIntl();

  return useMutation({
    mutationKey: relationshipsMutationKeys.delete(),
    mutationFn: (relationshipId: Relationship['id']) => RelationshipsApiClient.delete(relationshipId),
    onSuccess: async () => {
      snackSuccess(formatMessage({ defaultMessage: 'Link deleted successfully.' }));

      await Promise.all([
        queryClient.invalidateQueries({ queryKey: relationshipsQueryKeys.list() }),
        queryClient.invalidateQueries({ queryKey: plansQueryKeys.template.all() }),
      ]);
    },
    onError: (err) => {
      snackError(
        formatMessage(
          { defaultMessage: 'An error occurred while deleting the link: {errorMessage}.' },
          { errorMessage: err.message },
        ),
      );
    },
  });
};

export const useCreateRelationship = () => {
  const queryClient = useQueryClient();
  const { snackSuccess, snackError } = useSnackbars();
  const { formatMessage } = useIntl();

  return useMutation({
    mutationKey: relationshipsMutationKeys.create(),
    mutationFn: RelationshipsApiClient.create,
    onSuccess: async () => {
      snackSuccess(formatMessage({ defaultMessage: 'Link created successfully.' }));

      await Promise.all([
        queryClient.invalidateQueries({ queryKey: relationshipsQueryKeys.list() }),
        queryClient.invalidateQueries({ queryKey: plansQueryKeys.template.all() }),
      ]);
    },
    onError: (err) => {
      snackError(
        formatMessage(
          { defaultMessage: 'An error occurred while creating the link: {errorMessage}.' },
          { errorMessage: err.message },
        ),
      );
    },
  });
};

export const usePatchRelationship = () => {
  const queryClient = useQueryClient();
  const { snackSuccess, snackError } = useSnackbars();
  const { formatMessage } = useIntl();

  return useMutation({
    mutationKey: relationshipsMutationKeys.patch(),
    mutationFn: ({
      relationshipId,
      relationshipToUpdate,
    }: {
      relationshipId: Relationship['id'];
      relationshipToUpdate: RelationshipRequest;
    }) => RelationshipsApiClient.update(relationshipId, relationshipToUpdate),
    onSuccess: async () => {
      snackSuccess(formatMessage({ defaultMessage: 'Link updated successfully.' }));

      await Promise.all([
        queryClient.invalidateQueries({ queryKey: relationshipsQueryKeys.list() }),
        queryClient.invalidateQueries({ queryKey: plansQueryKeys.template.all() }),
      ]);
    },
    onError: (err) => {
      snackError(
        formatMessage(
          { defaultMessage: 'An error occurred while updating the link: {errorMessage}.' },
          { errorMessage: err.message },
        ),
      );
    },
  });
};