All files / libs/plan-agreements/components/src/lib/buttons/agreements/plan-agreement-preview-button PlanAgreementPreviewButton.tsx

100% Statements 37/37
100% Branches 2/2
100% Functions 0/0
100% Lines 37/37

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 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x  
import { memo } from 'react';
import { FormattedMessage } from 'react-intl';
import { generatePath } from 'react-router-dom';
 
import { ButtonLink, Tooltip } from '@allshares/studio-design-system';
import { routes } from '@amalia/core/routes';
import { canPreviewThisPlanAgreement } 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';
 
type PlanAgreementPreviewButtonProps = {
  readonly planAgreement: PlanAgreement;
};
 
export const PlanAgreementPreviewButton = memo(function PlanAgreementPreviewButton({
  planAgreement,
}: PlanAgreementPreviewButtonProps) {
  const ability = useAbilityContext();
  const isPlanAgreementLoading = useIsPlanAgreementLoading(planAgreement.id);
 
  return (
    canPreviewThisPlanAgreement(ability, planAgreement) && (
      <Tooltip
        content={<FormattedMessage defaultMessage="Preview plan agreement on the first user in the recipient list." />}
      >
        <ButtonLink
          disabled={isPlanAgreementLoading}
          to={generatePath(routes.PLAN_AGREEMENT_PREVIEW, { planAgreementId: planAgreement.id })}
          variant="light"
        >
          <FormattedMessage defaultMessage="Preview" />
        </ButtonLink>
      </Tooltip>
    )
  );
});