Skip to content

Commit efe4800

Browse files
feat(daterange): allow clear on selected daterange (#466)
* allow clearing selected date range
1 parent 6c2407a commit efe4800

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
node_modules
22
dist
3-
.DS_Store
3+
.DS_Store
4+
storybook-static

src/components/input-elements/DateRangePicker/DateRangePicker.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface DateRangePickerProps
5050
disabled?: boolean;
5151
color?: Color;
5252
locale?: Locale;
53+
enableClear?: boolean;
5354
}
5455

5556
const DateRangePicker = React.forwardRef<HTMLDivElement, DateRangePickerProps>((props, ref) => {
@@ -67,6 +68,7 @@ const DateRangePicker = React.forwardRef<HTMLDivElement, DateRangePickerProps>((
6768
color = BaseColors.Blue,
6869
enableYearPagination = false,
6970
locale = enUS,
71+
enableClear = true,
7072
className,
7173
...other
7274
} = props;
@@ -129,6 +131,10 @@ const DateRangePicker = React.forwardRef<HTMLDivElement, DateRangePickerProps>((
129131
setShowDropdown(false);
130132
};
131133

134+
const handleClear = () => {
135+
setSelectedValue([null, null, null]);
136+
onValueChange?.([null, null, null]);
137+
};
132138
const [hoveredDropdownValue, handleDropdownKeyDown] = useSelectOnKeyDown(
133139
handleDropdownOptionClick,
134140
dropdownOptions.map((option: DateRangePickerOption) => option.value),
@@ -160,6 +166,8 @@ const DateRangePicker = React.forwardRef<HTMLDivElement, DateRangePickerProps>((
160166
onDropdownKeyDown={handleDropdownKeyDown}
161167
locale={locale}
162168
dropdownPlaceholder={dropdownPlaceholder}
169+
enableClear={enableClear}
170+
onClear={handleClear}
163171
/>
164172
{/* Calendar Modal */}
165173
<Modal

src/components/input-elements/DateRangePicker/DateRangePickerButton.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { Dispatch, Ref, SetStateAction } from "react";
22
import { twMerge } from "tailwind-merge";
33

4-
import { ArrowDownHeadIcon, CalendarIcon } from "assets";
4+
import { ArrowDownHeadIcon, CalendarIcon, XCircleIcon } from "assets";
55

66
import {
77
BaseColors,
@@ -36,6 +36,8 @@ interface DateRangePickerButtonProps {
3636
onDropdownKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>) => void;
3737
locale?: Locale;
3838
dropdownPlaceholder?: string;
39+
enableClear?: boolean;
40+
onClear: () => void;
3941
}
4042

4143
const DateRangePickerButton = ({
@@ -54,6 +56,8 @@ const DateRangePickerButton = ({
5456
onDropdownKeyDown,
5557
locale,
5658
dropdownPlaceholder = "Select",
59+
enableClear,
60+
onClear,
5761
}: DateRangePickerButtonProps) => {
5862
const [startDate, endDate, dropdownValue] = value;
5963

@@ -110,13 +114,33 @@ const DateRangePickerButton = ({
110114
<p
111115
className={twMerge(
112116
makeDateRangePickerClassName("calendarButtonText"),
113-
"whitespace-nowrap truncate",
117+
"whitespace-nowrap truncate w-full text-start",
114118
fontSize.sm,
115119
fontWeight.md,
116120
)}
117121
>
118122
{calendarText}
119123
</p>
124+
{enableClear && hasDateSelection ? (
125+
<div
126+
role="button"
127+
className={twMerge(makeDateRangePickerClassName("resetButton"), spacing.xs.marginRight)}
128+
onClick={(e) => {
129+
e.stopPropagation(); // prevent firing parent button
130+
onClear();
131+
}}
132+
>
133+
<XCircleIcon
134+
className={twMerge(
135+
"flex-none",
136+
sizing.md.height,
137+
sizing.md.width,
138+
getColorClassNames(DEFAULT_COLOR, colorPalette.lightText).textColor,
139+
)}
140+
aria-hidden="true"
141+
/>
142+
</div>
143+
) : null}
120144
</button>
121145
{enableDropdown ? (
122146
<button

src/stories/input-elements/DateRangePicker.stories.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,9 @@ ControlledWithDropdownOptionsWithEndDate.args = {
201201
},
202202
],
203203
};
204+
205+
export const UncontrolledWithoutAllowClear = UncontrolledTemplate.bind({});
206+
UncontrolledWithoutAllowClear.args = {
207+
defaultValue: [new Date(2022, 10, 1), new Date()],
208+
enableClear: false,
209+
};

0 commit comments

Comments
 (0)