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 | import { IconCopy } from '@tabler/icons-react'; import { memo, useCallback } from 'react'; import { useIntl } from 'react-intl'; import { Table } from '@allshares/studio-design-system'; import { canDuplicateThisPlanAgreement } 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'; export type PlanAgreementDuplicateButtonProps = { readonly planAgreement: PlanAgreement; }; export const PlanAgreementDuplicateButton = memo(function PlanAgreementDuplicateButton({ planAgreement, }: PlanAgreementDuplicateButtonProps) { const ability = useAbilityContext(); const { formatMessage } = useIntl(); const { openDuplicatePlanAgreementModal } = usePlanAgreementsModalsContext(); const isPlanAgreementLoading = useIsPlanAgreementLoading(planAgreement.id); const handleClickDuplicate = useCallback(() => { openDuplicatePlanAgreementModal(planAgreement); }, [openDuplicatePlanAgreementModal, planAgreement]); if (!canDuplicateThisPlanAgreement(ability, planAgreement)) { return null; } return ( <Table.Cell.IconAction disabled={isPlanAgreementLoading} icon={<IconCopy />} label={formatMessage({ defaultMessage: 'Duplicate plan agreement' })} onClick={handleClickDuplicate} /> ); }); |