All files / libs/payout-definition/plans/components/src/lib/duplicate-plan-form/duplicate-plan-form-modal AssignmentDatePicker.tsx

100% Statements 38/38
100% Branches 7/7
100% Functions 0/0
100% Lines 38/38

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 391x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 1x  
import { useFormikContext } from 'formik';
import { memo, useCallback } from 'react';
import { FormattedMessage, useIntl } from 'react-intl';
 
import { DatePicker, useDatePickerTimestampsAdapter } from '@allshares/studio-design-system';
import { type UnixTimestampInSeconds } from '@amalia/ext/dates';
 
import { type DuplicatePlanFormValues } from '../DuplicatePlanForm';
 
interface AssignmentDatePickerProps {
  readonly fieldName: 'assignmentsEffectiveAsOf' | 'assignmentsEffectiveUntil';
}
 
export const AssignmentDatePicker = memo(function AssignmentDatePicker({ fieldName }: AssignmentDatePickerProps) {
  const { formatMessage } = useIntl();
  const { values, setFieldValue } = useFormikContext<DuplicatePlanFormValues>();
 
  const datePickerProps = useDatePickerTimestampsAdapter({
    value: values[fieldName],
    minDate: fieldName === 'assignmentsEffectiveAsOf' ? null : values.assignmentsEffectiveAsOf,
    maxDate: fieldName === 'assignmentsEffectiveAsOf' ? values.assignmentsEffectiveUntil : null,
    boundary: fieldName === 'assignmentsEffectiveAsOf' ? 'start' : 'end',
    onChange: useCallback(
      (value: UnixTimestampInSeconds | null) => setFieldValue(fieldName, value),
      [fieldName, setFieldValue],
    ),
  });
 
  return (
    <DatePicker
      {...datePickerProps}
      isClearable
      clearButtonLabel={<FormattedMessage defaultMessage="Reset date to indefinite" />}
      dateFormat="yyyy-MM-dd"
      placeholder={formatMessage({ defaultMessage: 'Indefinite' })}
    />
  );
});