MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/Components/TMDatePicker/TMDatePicker.jsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import PropTypes from 'prop-types';
import DatePicker from 'react-datepicker';
import FA from 'react-fontawesome';

const TMDatePicker = ({
  selected,
  onChange,
  type,
  value,
  selectsRange,
  showTimeSelect,
  showMonthDropdown,
  showYearDropdown,
  placeholderText,
  showIcon,
  icon,
  isClearable,
  excludeDates,
  disabled,
}) => {
  const typeClasses = {
    filter: {
      wrapper: 'larger-date-picker',
      datePicker: 'tm-date-picker-range',
    },
    form: {
      wrapper: 'larger-date-picker form-date-picker',
      datePicker: '',
    },
  };
  return (
    <div className={`tm-datepicker-wrapper ${typeClasses[type]?.wrapper}`}>
      {showIcon && icon}
      <DatePicker
        selected={selected}
        onChange={onChange}
        selectsRange={selectsRange}
        showTimeSelect={showTimeSelect}
        showMonthDropdown={showMonthDropdown}
        showYearDropdown={showYearDropdown}
        startDate={selectsRange ? value[0] : null}
        endDate={selectsRange ? value[1] : null}
        isClearable={isClearable}
        dropdownMode="select"
        className={`tm-datepicker ${typeClasses[type]?.datePicker}`}
        placeholderText={placeholderText}
        excludeDates={excludeDates}
        disabled={disabled}
      />
    </div>
  );
}
;

export default TMDatePicker;

TMDatePicker.propTypes = {
  value: PropTypes.arrayOf(PropTypes.instanceOf(Date)),
  onChange: PropTypes.func.isRequired,
  type: PropTypes.string.isRequired,
  selected: PropTypes.instanceOf(Date),
  showMonthDropdown: PropTypes.bool,
  showYearDropdown: PropTypes.bool,
  placeholderText: PropTypes.string,
  selectsRange: PropTypes.bool,
  showIcon: PropTypes.bool,
  icon: PropTypes.element,
  isClearable: PropTypes.bool,
  showTimeSelect: PropTypes.bool,
  excludeDates: PropTypes.arrayOf(PropTypes.instanceOf(Date)),
  disabled: PropTypes.bool,
};

TMDatePicker.defaultProps = {
  value: [null, null],
  selected: null,
  showMonthDropdown: false,
  showYearDropdown: false,
  placeholderText: 'Select Date',
  selectsRange: false,
  showIcon: false,
  icon: <FA name="fa fa-calendar" />,
  isClearable: false,
  showTimeSelect: false,
  excludeDates: [],
  disabled: false,
};