Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TMDatePicker Standardization #2960

Open
wants to merge 10 commits into
base: dev
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,10 @@ const ManageBidSeasons = () => {
<TMDatePicker
onChange={setSelectedDate}
selected={selectedDate}
type="filter"
showMonthDropdown
showYearDropdown
isClearable
condensed
/>
</div>
</div>
Expand Down
48 changes: 48 additions & 0 deletions src/Components/AssignmentsSeparations/Separation/Separation.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ const Separation = (props) => {
showMonthDropdown
showYearDropdown
isClearable
showIcon
type="form"
/>
</div>
Expand All @@ -276,6 +277,7 @@ const Separation = (props) => {
showMonthDropdown
showYearDropdown
isClearable
showIcon
type="form"
disabled
/>
Expand Down Expand Up @@ -304,6 +306,52 @@ const Separation = (props) => {
<FA name="globe" />
</InteractiveElement>
</div>
<div className="position-form--label-input-container">
<label htmlFor="separation-date">Form Datepicker</label>
<TMDatePicker
selected={panelMeetingDate}
onChange={setPanelMeetingDate}
showMonthDropdown
showYearDropdown
isClearable
showIcon
useStandardInputWidth
/>
</div>
<div className="position-form--label-input-container">
<label htmlFor="separation-date">Form Datepicker No Icon</label>
<TMDatePicker
selected={panelMeetingDate}
onChange={setPanelMeetingDate}
showMonthDropdown
showYearDropdown
isClearable
useStandardInputWidth
/>
</div>
<div className="position-form--label-input-container">
<label htmlFor="panel-meeting-date">Filter Datepicker</label>
<TMDatePicker
selected={panelMeetingDate}
onChange={setPanelMeetingDate}
showMonthDropdown
showYearDropdown
isClearable
showIcon
condensed
/>
</div>
<div className="position-form--label-input-container">
<label htmlFor="panel-meeting-date">Filter Datepicker No Icon</label>
<TMDatePicker
selected={panelMeetingDate}
onChange={setPanelMeetingDate}
showMonthDropdown
showYearDropdown
isClearable
condensed
/>
</div>
</div>
{showLocationSearch &&
<GsaLocations
Expand Down
3 changes: 2 additions & 1 deletion src/Components/CycleManagement/CycleManagement.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -238,10 +238,11 @@ const CycleManagement = (props) => {
<TMDatePicker
onChange={setSelectedDate}
selected={selectedDate}
type="filter"
showMonthDropdown
showYearDropdown
isClearable
showIcon
condensed
/>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,11 +241,11 @@ const PanelMeetingSearch = ({ isCDO }) => {
<TMDatePicker
value={selectedPanelMeetDate}
onChange={setSelectedPanelMeetDate}
type="filter"
showMonthDropdown
showYearDropdown
selectsRange
isClearable
condensed
/>
</div>
</div>
Expand Down
49 changes: 30 additions & 19 deletions src/Components/TMDatePicker/TMDatePicker.jsx
Original file line number Diff line number Diff line change
@@ -1,36 +1,47 @@
import { useRef } from 'react';
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,
useStandardInputWidth,
condensed,
disabled,
}) => {
const typeClasses = {
filter: {
wrapper: 'larger-date-picker',
datePicker: 'tm-date-picker-range',
},
form: {
wrapper: 'larger-date-picker form-date-picker',
datePicker: '',
},
const datePickerRef = useRef(null);
const openDatePicker = () => {
datePickerRef.current.setOpen(true);
};

let wrapperClasses = 'tm-datepicker';

if (showIcon) {
wrapperClasses = wrapperClasses.concat(' show-icon');
}
if (useStandardInputWidth) {
wrapperClasses = wrapperClasses.concat(' standard-input-width');
}
if (condensed) {
wrapperClasses = wrapperClasses.concat(' condensed');
}


return (
<div className={`tm-datepicker-wrapper ${typeClasses[type]?.wrapper}`}>
{showIcon && icon}
<div className={wrapperClasses}>
{showIcon &&
<FA name="fa fa-calendar" onClick={() => openDatePicker()} />
}
<DatePicker
selected={selected}
onChange={onChange}
Expand All @@ -42,29 +53,28 @@ const TMDatePicker = ({
endDate={selectsRange ? value[1] : null}
isClearable={isClearable}
dropdownMode="select"
className={`tm-datepicker ${typeClasses[type]?.datePicker}`}
placeholderText={placeholderText}
excludeDates={excludeDates}
ref={datePickerRef}
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,
useStandardInputWidth: PropTypes.bool,
condensed: PropTypes.bool,
isClearable: PropTypes.bool,
showTimeSelect: PropTypes.bool,
excludeDates: PropTypes.arrayOf(PropTypes.instanceOf(Date)),
Expand All @@ -79,7 +89,8 @@ TMDatePicker.defaultProps = {
placeholderText: 'Select Date',
selectsRange: false,
showIcon: false,
icon: <FA name="fa fa-calendar" />,
useStandardInputWidth: false,
condensed: false,
isClearable: false,
showTimeSelect: false,
excludeDates: [],
Expand Down
8 changes: 6 additions & 2 deletions src/sass/_common.scss
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,13 @@ $values in $filters-sizing-config {
}

.picky,
.tm-datepicker-wrapper {
.react-datepicker-wrapper {
color: $color-black;
width: $picky-width;
width: $picky-width !important;
}

.tm-datepicker {
width: auto;
}
}
}
Expand Down