All files / libs/plan-agreements/components/src/lib/buttons/agreements/plan-agreement-archive-button PlanAgreementArchiveButton.tsx

100% Statements 44/44
100% Branches 3/3
100% Functions 0/0
100% Lines 44/44

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 451x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 3x 3x 3x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x 1x  
import { IconArchive } from '@tabler/icons-react';
import { memo, useCallback } from 'react';
import { useIntl } from 'react-intl';
 
import { Table } from '@allshares/studio-design-system';
import { canArchiveThisPlanAgreement } from '@amalia/kernel/auth/shared';
import { useAbilityContext } from '@amalia/kernel/auth/state';
import { useIsPlanAgreementLoading } from '@amalia/plan-agreements/state';
import { type PlanAgreement } from '@amalia/plan-agreements/types';
 
import { usePlanAgreementsModalsContext } from '../../../modals';
 
interface PlanAgreementArchiveButtonProps {
  readonly planAgreement: PlanAgreement;
}
 
export const PlanAgreementArchiveButton = memo(function PlanAgreementArchiveButton({
  planAgreement,
}: PlanAgreementArchiveButtonProps) {
  const ability = useAbilityContext();
  const { formatMessage } = useIntl();
 
  const isPlanAgreementLoading = useIsPlanAgreementLoading(planAgreement.id);
 
  const { openArchivePlanAgreementModal } = usePlanAgreementsModalsContext();
 
  const handleClickArchive = useCallback(() => {
    openArchivePlanAgreementModal(planAgreement);
  }, [openArchivePlanAgreementModal, planAgreement]);
 
  return (
    canArchiveThisPlanAgreement(ability, planAgreement) && (
      <Table.Cell.IconAction
        disabled={isPlanAgreementLoading}
        icon={<IconArchive />}
        variant="danger"
        label={formatMessage({
          defaultMessage: 'Archive agreement',
        })}
        onClick={handleClickArchive}
      />
    )
  );
});