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 | import { memo, useCallback } from 'react'; import { AssignmentDateCell, type AssignmentDateCellProps } from '@amalia/assignments/common/components'; import { canModifyTeamAssignments } from '@amalia/kernel/auth/shared'; import { useAbilityContext } from '@amalia/kernel/auth/state'; import { useUpdateTeamAssignments } from '@amalia/tenants/assignments/teams/state'; import { type TeamAssignment } from '@amalia/tenants/assignments/teams/types'; import { type TeamContract } from '@amalia/tenants/teams/types'; export type TeamAssignmentsTableStartDateCellProps = { readonly team: Pick<TeamContract, 'archived'>; readonly teamAssignment: Pick<TeamAssignment, 'effectiveAsOf' | 'effectiveUntil' | 'id'>; }; export const TeamAssignmentsTableStartDateCell = memo(function TeamAssignmentsTableStartDateCell({ team, teamAssignment, }: TeamAssignmentsTableStartDateCellProps) { const ability = useAbilityContext(); const { mutate: updateTeamAssignments, isPending } = useUpdateTeamAssignments(); const handleChange: AssignmentDateCellProps< Pick<TeamAssignment, 'effectiveAsOf' | 'effectiveUntil' | 'id'> >['onChange'] = useCallback( (value, teamAssignment) => updateTeamAssignments([ { id: teamAssignment.id, effectiveAsOf: value, }, ]), [updateTeamAssignments], ); return ( <AssignmentDateCell boundary="start" disabled={team.archived || isPending} isReadonly={!canModifyTeamAssignments(ability)} maxDate={teamAssignment.effectiveUntil} row={teamAssignment} value={teamAssignment.effectiveAsOf} onChange={handleChange} /> ); }); |