All files / libs/plan-agreements/components/src/lib/buttons/assignments/plan-agreement-confirm-assignment-button PlanAgreementConfirmAssignmentButton.tsx

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

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 441x 1x 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 1x 3x 3x 3x 3x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x 1x  
import { IconCheckbox } from '@tabler/icons-react';
import { memo, useCallback } from 'react';
import { FormattedMessage } from 'react-intl';
 
import { Button } from '@allshares/studio-design-system';
import { canConfirmThisPlanAgreementAssignment } from '@amalia/kernel/auth/shared';
import { useAbilityContext } from '@amalia/kernel/auth/state';
import { useIsPlanAgreementLoading } from '@amalia/plan-agreements/state';
import { type PlanAgreement, type PlanAgreementAssignment } from '@amalia/plan-agreements/types';
 
import { usePlanAgreementsModalsContext } from '../../../modals';
 
export type PlanAgreementConfirmAssignmentButtonProps = {
  readonly planAgreement: PlanAgreement;
  readonly assignment: PlanAgreementAssignment;
};
 
export const PlanAgreementConfirmAssignmentButton = memo(function PlanAgreementConfirmAssignmentButton({
  planAgreement,
  assignment,
}: PlanAgreementConfirmAssignmentButtonProps) {
  const ability = useAbilityContext();
 
  const { openConfirmPlanAgreementModal } = usePlanAgreementsModalsContext();
  const isPlanAgreementLoading = useIsPlanAgreementLoading(planAgreement.id);
 
  const handleClickConfirm = useCallback(() => {
    openConfirmPlanAgreementModal(planAgreement);
  }, [openConfirmPlanAgreementModal, planAgreement]);
 
  return (
    canConfirmThisPlanAgreementAssignment(ability, planAgreement, assignment) && (
      <Button
        disabled={isPlanAgreementLoading}
        icon={<IconCheckbox />}
        variant="primary"
        onClick={handleClickConfirm}
      >
        <FormattedMessage defaultMessage="Confirm" />
      </Button>
    )
  );
});