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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 12x 12x 12x 12x 12x 12x 12x 12x 1x 1x 1x 12x 12x 1x 1x 1x 12x 12x 2x 1x 1x 1x 1x 1x 1x 1x 12x 12x 12x 1x 1x 1x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 2x 2x 2x 12x 12x 12x 12x 12x 12x 12x 12x 1x 1x 1x 12x 12x 12x 1x 1x 1x 12x 12x 1x 1x 1x 12x 12x 12x 12x 1x | import { Fragment, memo } from 'react';
import { FormattedMessage } from 'react-intl';
import { match, P } from 'ts-pattern';
import { Badge } from '@allshares/studio-design-system';
import { isPlanAgreementConfirmationRequired, isPlanAgreementFinalizable } from '@amalia/plan-agreements/shared';
import {
PlanAgreementAssignmentStatus,
PlanAgreementStatus,
type PlanAgreement,
type PlanAgreementAssignment,
} from '@amalia/plan-agreements/types';
export type PlanAgreementAssignmentBadgeProps = {
readonly planAgreement?: PlanAgreement;
readonly assignment?: PlanAgreementAssignment;
};
export const PlanAgreementAssignmentBadge = memo(function PlanAgreementAssignmentBadge({
planAgreement,
assignment,
}: PlanAgreementAssignmentBadgeProps) {
return (
<Fragment>
{match({ planAgreement, assignment })
.with({ planAgreement: P.nullish }, { assignment: P.nullish }, () => null)
.with({ planAgreement: { error: P.not(P.nullish) } }, () => (
<Badge variant="danger">
<FormattedMessage defaultMessage="Error" />
</Badge>
))
.with({ planAgreement: { status: PlanAgreementStatus.ARCHIVED } }, () => (
<Badge variant="warning">
<FormattedMessage defaultMessage="Archived" />
</Badge>
))
.with({ planAgreement: { status: PlanAgreementStatus.DRAFT } }, ({ planAgreement }) =>
isPlanAgreementFinalizable(planAgreement) ? (
<Badge variant="missing">
<FormattedMessage defaultMessage="Not finalized" />
</Badge>
) : (
<Badge variant="danger">
<FormattedMessage defaultMessage="Incomplete" />
</Badge>
),
)
.with({ assignment: { status: PlanAgreementAssignmentStatus.ERROR } }, () => (
<Badge variant="danger">
<FormattedMessage defaultMessage="Error at generation" />
</Badge>
))
.with(
{
assignment: {
status: P.union(
PlanAgreementAssignmentStatus.AGREEMENT_GENERATED,
PlanAgreementAssignmentStatus.AGREEMENT_TO_GENERATE,
),
},
},
() => (
<Badge variant="pending">
<FormattedMessage defaultMessage="Ready to send" />
</Badge>
),
)
.with(
{
planAgreement: P.not(P.nullish),
assignment: { status: PlanAgreementAssignmentStatus.AGREEMENT_SENT, seenDate: P.not(P.nullish) },
},
({ planAgreement }) => (
<Badge variant={isPlanAgreementConfirmationRequired(planAgreement) ? 'warning' : 'success'}>
<FormattedMessage defaultMessage="Seen" />
</Badge>
),
)
.with({ assignment: { status: PlanAgreementAssignmentStatus.AGREEMENT_SENT } }, () => (
<Badge variant="missing">
<FormattedMessage defaultMessage="Received" />
</Badge>
))
.with({ assignment: { status: PlanAgreementAssignmentStatus.CONFIRMED } }, () => (
<Badge variant="success">
<FormattedMessage defaultMessage="Confirmed" />
</Badge>
))
.otherwise(() => null)}
</Fragment>
);
});
|