@clickhouse/click-ui 0.2.0-rc.7 → 0.2.0-rc.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/DatePicker/Common.cjs +79 -48
- package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateRangePicker.cjs +24 -24
- package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +78 -40
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/index.cjs +29 -18
- package/dist/cjs/components/DatePicker/index.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/utils.cjs +42 -14
- package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
- package/dist/esm/components/DatePicker/Common.js +80 -49
- package/dist/esm/components/DatePicker/Common.js.map +1 -1
- package/dist/esm/components/DatePicker/DateRangePicker.js +25 -25
- package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +79 -41
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/index.js +30 -19
- package/dist/esm/components/DatePicker/index.js.map +1 -1
- package/dist/esm/components/DatePicker/utils.js +36 -10
- package/dist/esm/components/DatePicker/utils.js.map +1 -1
- package/dist/types/components/DatePicker/Common.d.ts +9 -4
- package/dist/types/components/DatePicker/DatePicker.d.ts +11 -2
- package/dist/types/components/DatePicker/DateRangePicker.d.ts +3 -2
- package/dist/types/components/DatePicker/DateTimeRangePicker.d.ts +3 -2
- package/dist/types/components/DatePicker/index.d.ts +2 -1
- package/dist/types/components/DatePicker/utils.d.ts +9 -8
- package/dist/types/index.d.ts +1 -1
- package/package.json +2 -3
- package/dist/types/components/DatePicker/DatePicker.types.d.ts +0 -9
|
@@ -57,9 +57,13 @@ const Calendar = ({
|
|
|
57
57
|
maxRangeLength,
|
|
58
58
|
setSelectedDate,
|
|
59
59
|
startDate,
|
|
60
|
-
endDate
|
|
60
|
+
endDate,
|
|
61
|
+
timezone
|
|
61
62
|
}) => {
|
|
62
63
|
const [hoveredDate, setHoveredDate] = react.useState();
|
|
64
|
+
const today = utils.shiftToTimezone(/* @__PURE__ */ new Date(), timezone);
|
|
65
|
+
const shiftedStart = startDate ? utils.shiftToTimezone(startDate, timezone) : void 0;
|
|
66
|
+
const shiftedEnd = endDate ? utils.shiftToTimezone(endDate, timezone) : void 0;
|
|
63
67
|
const handleMouseOut = () => {
|
|
64
68
|
setHoveredDate(void 0);
|
|
65
69
|
};
|
|
@@ -73,21 +77,20 @@ const Calendar = ({
|
|
|
73
77
|
key: dayKey,
|
|
74
78
|
value: fullDate
|
|
75
79
|
}) => {
|
|
76
|
-
const
|
|
77
|
-
const isSelected = startDate && calendar.isSameDate(startDate, fullDate) || endDate && calendar.isSameDate(endDate, fullDate);
|
|
80
|
+
const isSelected = shiftedStart && calendar.isSameDate(shiftedStart, fullDate) || shiftedEnd && calendar.isSameDate(shiftedEnd, fullDate);
|
|
78
81
|
const isPresent = calendar.isSameDate(today, fullDate);
|
|
79
|
-
const isBetweenStartAndEndDates = Boolean(
|
|
82
|
+
const isBetweenStartAndEndDates = Boolean(shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd);
|
|
80
83
|
let isDisabled = false;
|
|
81
84
|
if (futureDatesDisabled && fullDate > today) {
|
|
82
85
|
isDisabled = true;
|
|
83
86
|
}
|
|
84
|
-
if (futureStartDatesDisabled && !
|
|
87
|
+
if (futureStartDatesDisabled && !shiftedStart && fullDate > today) {
|
|
85
88
|
isDisabled = true;
|
|
86
89
|
}
|
|
87
|
-
if (maxRangeLength > 1 &&
|
|
90
|
+
if (maxRangeLength > 1 && shiftedStart && !utils.datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)) {
|
|
88
91
|
isDisabled = true;
|
|
89
92
|
}
|
|
90
|
-
const shouldShowRangeIndicator = !
|
|
93
|
+
const shouldShowRangeIndicator = !shiftedEnd && Boolean(shiftedStart && hoveredDate && fullDate > shiftedStart && fullDate < hoveredDate);
|
|
91
94
|
const handleMouseEnter = () => {
|
|
92
95
|
setHoveredDate(fullDate);
|
|
93
96
|
};
|
|
@@ -95,14 +98,14 @@ const Calendar = ({
|
|
|
95
98
|
if (isDisabled) {
|
|
96
99
|
return false;
|
|
97
100
|
}
|
|
98
|
-
setSelectedDate(fullDate);
|
|
99
|
-
if (
|
|
101
|
+
setSelectedDate(utils.shiftFromTimezone(fullDate, timezone));
|
|
102
|
+
if (shiftedStart && shiftedEnd) {
|
|
100
103
|
return;
|
|
101
104
|
}
|
|
102
|
-
if (
|
|
105
|
+
if (shiftedStart && fullDate < shiftedStart) {
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
105
|
-
if (
|
|
108
|
+
if (shiftedStart && !calendar.isSameDate(fullDate, shiftedStart)) {
|
|
106
109
|
closeDatepicker();
|
|
107
110
|
return;
|
|
108
111
|
}
|
|
@@ -111,11 +114,6 @@ const Calendar = ({
|
|
|
111
114
|
}) }, weekKey);
|
|
112
115
|
});
|
|
113
116
|
};
|
|
114
|
-
const locale = "en-US";
|
|
115
|
-
const monthFormatter = new Intl.DateTimeFormat(locale, {
|
|
116
|
-
month: "short",
|
|
117
|
-
year: "numeric"
|
|
118
|
-
});
|
|
119
117
|
const PredefinedDates = ({
|
|
120
118
|
onSelectDateRange,
|
|
121
119
|
predefinedDatesList,
|
|
@@ -124,7 +122,8 @@ const PredefinedDates = ({
|
|
|
124
122
|
setEndDate,
|
|
125
123
|
setStartDate,
|
|
126
124
|
shouldShowCustomRange,
|
|
127
|
-
showCustomDateRange
|
|
125
|
+
showCustomDateRange,
|
|
126
|
+
timezone
|
|
128
127
|
}) => {
|
|
129
128
|
const handleCustomTimePeriodClick = (event) => {
|
|
130
129
|
event.preventDefault();
|
|
@@ -144,8 +143,8 @@ const PredefinedDates = ({
|
|
|
144
143
|
const isWholeMonth = utils.isDateRangeTheWholeMonth({
|
|
145
144
|
startDate,
|
|
146
145
|
endDate
|
|
147
|
-
});
|
|
148
|
-
const formattedText = isWholeMonth ?
|
|
146
|
+
}, timezone);
|
|
147
|
+
const formattedText = isWholeMonth ? utils.formatDateHeader(timezone, startDate) : `${utils.formatSelectedDate(timezone, startDate)} – ${utils.formatSelectedDate(timezone, endDate)}`.trim();
|
|
149
148
|
return /* @__PURE__ */ jsxRuntime.jsx(Common.StyledDropdownItem, { "data-testid": `predefined-date-${startDate.getTime()}`, onClick: handleItemClick, children: /* @__PURE__ */ jsxRuntime.jsxs(Container.Container, { "data-selected": rangeIsSelected, "data-testid": formattedText, justifyContent: "space-between", orientation: "horizontal", children: [
|
|
150
149
|
formattedText,
|
|
151
150
|
rangeIsSelected && /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: "check" })
|
|
@@ -168,7 +167,8 @@ const DateRangePicker = ({
|
|
|
168
167
|
openDirection = "right",
|
|
169
168
|
placeholder = "start date – end date",
|
|
170
169
|
predefinedDatesList,
|
|
171
|
-
responsivePositioning = true
|
|
170
|
+
responsivePositioning = true,
|
|
171
|
+
timezone = "system"
|
|
172
172
|
}) => {
|
|
173
173
|
const [isOpen, setIsOpen] = react.useState(false);
|
|
174
174
|
const [selectedStartDate, setSelectedStartDate] = react.useState();
|
|
@@ -243,11 +243,11 @@ const DateRangePicker = ({
|
|
|
243
243
|
}, []);
|
|
244
244
|
const shouldShowPredefinedDates = predefinedDatesList !== void 0 && predefinedDatesList.length > 0;
|
|
245
245
|
return /* @__PURE__ */ jsxRuntime.jsxs(Dropdown.Dropdown, { onOpenChange: handleOpenChange, open: isOpen, children: [
|
|
246
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsxRuntime.jsx(Common.DateRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate }) }),
|
|
246
|
+
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsxRuntime.jsx(Common.DateRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, timezone }) }),
|
|
247
247
|
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Content, { align: "start", responsivePositioning, children: shouldShowPredefinedDates ? /* @__PURE__ */ jsxRuntime.jsxs(PredefinedCalendarContainer, { gap: "none", orientation: "horizontal", padding: "none", children: [
|
|
248
|
-
/* @__PURE__ */ jsxRuntime.jsx(PredefinedDates, { onSelectDateRange, predefinedDatesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange }),
|
|
249
|
-
shouldShowCustomRange && /* @__PURE__ */ jsxRuntime.jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate }) }) })
|
|
250
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(Common.CalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate }) }) })
|
|
248
|
+
/* @__PURE__ */ jsxRuntime.jsx(PredefinedDates, { onSelectDateRange, predefinedDatesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange, timezone }),
|
|
249
|
+
shouldShowCustomRange && /* @__PURE__ */ jsxRuntime.jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, timezone, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate, timezone }) }) })
|
|
250
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(Common.CalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, timezone, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate, timezone }) }) })
|
|
251
251
|
] });
|
|
252
252
|
};
|
|
253
253
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '@/components/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '@/components/Container';\nimport { Panel } from '@/components/Panel';\nimport { Icon } from '@/components/Icon';\nimport {\n DateRange,\n datesAreWithinMaxRange,\n isDateRangeTheWholeMonth,\n selectedDateFormatter,\n} from './utils';\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarWidth = 275;\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedDatesContainer = styled(Container)`\n width: ${calendarWidth}px;\n`;\n\n// left value of 276px is the width of the PredefinedDatesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 276px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedDatesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\ninterface CalendarProps {\n calendarBody: Body;\n closeDatepicker: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: (selectedDate: Date) => void;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n closeDatepicker,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const today = new Date();\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n const isPresent = isSameDate(today, fullDate);\n\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (futureStartDatesDisabled && !startDate && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n const shouldShowRangeIndicator =\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n setSelectedDate(fullDate);\n\n // User has a date range selected and clicked a new date.\n // This will cause the selected date to be reset, thus do not close the datepicker.\n if (startDate && endDate) {\n return;\n }\n\n // The user has selected a new start date, don't close\n if (startDate && fullDate < startDate) {\n return;\n }\n\n // Only close the datepicker if the user hasn't clicked the selected start date.\n if (startDate && !isSameDate(fullDate, startDate)) {\n closeDatepicker();\n return;\n }\n };\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n !isSelected && (shouldShowRangeIndicator || isBetweenStartAndEndDates)\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $isPresent={isPresent}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\nconst locale = 'en-US';\nconst monthFormatter = new Intl.DateTimeFormat(locale, {\n month: 'short',\n year: 'numeric',\n});\n\ninterface PredefinedDatesProps {\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedDatesList: DateRange[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedDates = ({\n onSelectDateRange,\n predefinedDatesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedDatesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedDatesContainer\n data-testid=\"predefined-dates-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedDatesList.map(({ startDate, endDate }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n isSameDate(selectedEndDate, endDate) &&\n selectedStartDate &&\n isSameDate(selectedStartDate, startDate);\n\n const isWholeMonth = isDateRangeTheWholeMonth({ startDate, endDate });\n\n const formattedText = isWholeMonth\n ? monthFormatter.format(startDate)\n : `${selectedDateFormatter.format(\n startDate\n )} – ${selectedDateFormatter.format(endDate)}`.trim();\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={formattedText}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {formattedText}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedDatesContainer>\n );\n};\n\nexport interface DateRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedDatesList?: DateRange[];\n maxRangeLength?: number;\n startDate?: Date;\n responsivePositioning?: boolean;\n}\n\nexport const DateRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedDatesList,\n responsivePositioning = true,\n}: DateRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n const calendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (selectedStartDate) {\n calendarOptions.defaultDate = selectedStartDate;\n }\n\n useEffect(() => {\n if (startDate) {\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n if (\n calendarContainerRef.current.getBoundingClientRect().right > window.innerWidth\n ) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }, [openDirection]);\n\n const handleOpenChange = (isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }\n };\n\n const handleSelectDate = useCallback(\n (selectedDate: Date): void => {\n // Start date and end date are selected, user clicks any date.\n // Set start date to the selected date, clear the end date.\n if (selectedStartDate && selectedEndDate) {\n // If futureStartDatesDisabled is true, only set the selected date to the date clicked if it's before today\n if (futureStartDatesDisabled && selectedDate > new Date()) {\n setSelectedEndDate(undefined);\n return;\n }\n setSelectedStartDate(selectedDate);\n setSelectedEndDate(undefined);\n return;\n }\n\n if (selectedStartDate) {\n if (isSameDate(selectedStartDate, selectedDate)) {\n // Start date is selected, user clicks start date.\n // Reset the start date.\n setSelectedStartDate(undefined);\n return;\n }\n\n // Start date is selected, user clicks an earlier date.\n // Set the earlier date to the new start date.\n if (selectedDate < selectedStartDate) {\n setSelectedStartDate(selectedDate);\n return;\n }\n\n // Otherwise, set the end date to the date the user clicked.\n setSelectedEndDate(selectedDate);\n onSelectDateRange(selectedStartDate, selectedDate);\n setShouldShowCustomRange(false);\n return;\n }\n\n setSelectedStartDate(selectedDate);\n },\n [futureStartDatesDisabled, onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedDates =\n predefinedDatesList !== undefined && predefinedDatesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n />\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n {shouldShowPredefinedDates ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedDates\n onSelectDateRange={onSelectDateRange}\n predefinedDatesList={predefinedDatesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <StyledCalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n />\n )}\n </StyledCalendarRenderer>\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n />\n )}\n </CalendarRenderer>\n )}\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedDatesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","ScrollableContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","closeDatepicker","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","jsx","date","isCurrentMonth","dayKey","fullDate","today","Date","isSelected","isSameDate","isPresent","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","shouldShowRangeIndicator","handleMouseEnter","handleClick","locale","monthFormatter","Intl","DateTimeFormat","month","year","PredefinedDates","onSelectDateRange","predefinedDatesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","handleItemClick","rangeIsSelected","isWholeMonth","isDateRangeTheWholeMonth","formattedText","format","selectedDateFormatter","trim","StyledDropdownItem","getTime","jsxs","Icon","toISOString","DateRangePicker","disabled","openDirection","placeholder","responsivePositioning","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","calendarOptions","defaultDate","useEffect","useLayoutEffect","current","getBoundingClientRect","right","window","innerWidth","closeDatePicker","useCallback","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedDates","length","Dropdown","DateRangePickerInput","body"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '@/components/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '@/components/Container';\nimport { Panel } from '@/components/Panel';\nimport { Icon } from '@/components/Icon';\nimport {\n DateRange,\n datesAreWithinMaxRange,\n formatDateHeader,\n formatSelectedDate,\n shiftFromTimezone,\n isDateRangeTheWholeMonth,\n Timezone,\n shiftToTimezone,\n} from './utils';\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarWidth = 275;\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedDatesContainer = styled(Container)`\n width: ${calendarWidth}px;\n`;\n\n// left value of 276px is the width of the PredefinedDatesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 276px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedDatesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\ninterface CalendarProps {\n calendarBody: Body;\n closeDatepicker: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: (selectedDate: Date) => void;\n startDate?: Date;\n endDate?: Date;\n timezone: Timezone;\n}\n\nconst Calendar = ({\n calendarBody,\n closeDatepicker,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n timezone,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const today = shiftToTimezone(new Date(), timezone);\n const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : undefined;\n const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : undefined;\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (shiftedStart && isSameDate(shiftedStart, fullDate)) ||\n (shiftedEnd && isSameDate(shiftedEnd, fullDate));\n const isPresent = isSameDate(today, fullDate);\n\n const isBetweenStartAndEndDates = Boolean(\n shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (futureStartDatesDisabled && !shiftedStart && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n shiftedStart &&\n !datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n const shouldShowRangeIndicator =\n !shiftedEnd &&\n Boolean(\n shiftedStart &&\n hoveredDate &&\n fullDate > shiftedStart &&\n fullDate < hoveredDate\n );\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n setSelectedDate(shiftFromTimezone(fullDate, timezone));\n\n // User has a date range selected and clicked a new date.\n // This will cause the selected date to be reset, thus do not close the datepicker.\n if (shiftedStart && shiftedEnd) {\n return;\n }\n\n // The user has selected a new start date, don't close\n if (shiftedStart && fullDate < shiftedStart) {\n return;\n }\n\n // Only close the datepicker if the user hasn't clicked the selected start date.\n if (shiftedStart && !isSameDate(fullDate, shiftedStart)) {\n closeDatepicker();\n return;\n }\n };\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n !isSelected && (shouldShowRangeIndicator || isBetweenStartAndEndDates)\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $isPresent={isPresent}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\ninterface PredefinedDatesProps {\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedDatesList: DateRange[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n timezone: Timezone;\n}\n\nconst PredefinedDates = ({\n onSelectDateRange,\n predefinedDatesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n timezone,\n}: PredefinedDatesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedDatesContainer\n data-testid=\"predefined-dates-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedDatesList.map(({ startDate, endDate }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n isSameDate(selectedEndDate, endDate) &&\n selectedStartDate &&\n isSameDate(selectedStartDate, startDate);\n\n const isWholeMonth = isDateRangeTheWholeMonth({ startDate, endDate }, timezone);\n\n const formattedText = isWholeMonth\n ? formatDateHeader(timezone, startDate)\n : `${formatSelectedDate(timezone, startDate)} – ${formatSelectedDate(timezone, endDate)}`.trim();\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={formattedText}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {formattedText}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedDatesContainer>\n );\n};\n\nexport interface DateRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedDatesList?: DateRange[];\n maxRangeLength?: number;\n startDate?: Date;\n responsivePositioning?: boolean;\n timezone?: Timezone;\n}\n\nexport const DateRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedDatesList,\n responsivePositioning = true,\n timezone = 'system',\n}: DateRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n const calendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (selectedStartDate) {\n calendarOptions.defaultDate = selectedStartDate;\n }\n\n useEffect(() => {\n if (startDate) {\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n if (\n calendarContainerRef.current.getBoundingClientRect().right > window.innerWidth\n ) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }, [openDirection]);\n\n const handleOpenChange = (isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }\n };\n\n const handleSelectDate = useCallback(\n (selectedDate: Date): void => {\n // Start date and end date are selected, user clicks any date.\n // Set start date to the selected date, clear the end date.\n if (selectedStartDate && selectedEndDate) {\n // If futureStartDatesDisabled is true, only set the selected date to the date clicked if it's before today\n if (futureStartDatesDisabled && selectedDate > new Date()) {\n setSelectedEndDate(undefined);\n return;\n }\n setSelectedStartDate(selectedDate);\n setSelectedEndDate(undefined);\n return;\n }\n\n if (selectedStartDate) {\n if (isSameDate(selectedStartDate, selectedDate)) {\n // Start date is selected, user clicks start date.\n // Reset the start date.\n setSelectedStartDate(undefined);\n return;\n }\n\n // Start date is selected, user clicks an earlier date.\n // Set the earlier date to the new start date.\n if (selectedDate < selectedStartDate) {\n setSelectedStartDate(selectedDate);\n return;\n }\n\n // Otherwise, set the end date to the date the user clicked.\n setSelectedEndDate(selectedDate);\n onSelectDateRange(selectedStartDate, selectedDate);\n setShouldShowCustomRange(false);\n return;\n }\n\n setSelectedStartDate(selectedDate);\n },\n [futureStartDatesDisabled, onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedDates =\n predefinedDatesList !== undefined && predefinedDatesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n timezone={timezone}\n />\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n {shouldShowPredefinedDates ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedDates\n onSelectDateRange={onSelectDateRange}\n predefinedDatesList={predefinedDatesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n timezone={timezone}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <StyledCalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n timezone={timezone}\n />\n )}\n </CalendarRenderer>\n )}\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedDatesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","ScrollableContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","closeDatepicker","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","timezone","hoveredDate","setHoveredDate","useState","today","shiftToTimezone","Date","shiftedStart","undefined","shiftedEnd","handleMouseOut","value","map","key","weekKey","week","jsx","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","isPresent","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","shouldShowRangeIndicator","handleMouseEnter","handleClick","shiftFromTimezone","PredefinedDates","onSelectDateRange","predefinedDatesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","handleItemClick","rangeIsSelected","isWholeMonth","isDateRangeTheWholeMonth","formattedText","formatDateHeader","formatSelectedDate","trim","StyledDropdownItem","getTime","jsxs","Icon","toISOString","DateRangePicker","disabled","openDirection","placeholder","responsivePositioning","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","calendarOptions","defaultDate","useEffect","useLayoutEffect","current","getBoundingClientRect","right","window","innerWidth","closeDatePicker","useCallback","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedDates","length","Dropdown","DateRangePickerInput","body"],"mappings":"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"}
|
|
@@ -77,9 +77,13 @@ const Calendar = ({
|
|
|
77
77
|
maxRangeLength,
|
|
78
78
|
setSelectedDate,
|
|
79
79
|
startDate,
|
|
80
|
-
endDate
|
|
80
|
+
endDate,
|
|
81
|
+
timezone
|
|
81
82
|
}) => {
|
|
82
83
|
const [hoveredDate, setHoveredDate] = react.useState();
|
|
84
|
+
const today = utils.shiftToTimezone(/* @__PURE__ */ new Date(), timezone);
|
|
85
|
+
const shiftedStart = startDate ? utils.shiftToTimezone(startDate, timezone) : void 0;
|
|
86
|
+
const shiftedEnd = endDate ? utils.shiftToTimezone(endDate, timezone) : void 0;
|
|
83
87
|
const handleMouseOut = () => {
|
|
84
88
|
setHoveredDate(void 0);
|
|
85
89
|
};
|
|
@@ -93,10 +97,9 @@ const Calendar = ({
|
|
|
93
97
|
key: dayKey,
|
|
94
98
|
value: fullDate
|
|
95
99
|
}) => {
|
|
96
|
-
const isSelected =
|
|
97
|
-
const today = /* @__PURE__ */ new Date();
|
|
100
|
+
const isSelected = shiftedStart && calendar.isSameDate(shiftedStart, fullDate) || shiftedEnd && calendar.isSameDate(shiftedEnd, fullDate);
|
|
98
101
|
const isCurrentDate = calendar.isSameDate(today, fullDate);
|
|
99
|
-
const isBetweenStartAndEndDates = Boolean(
|
|
102
|
+
const isBetweenStartAndEndDates = Boolean(shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd);
|
|
100
103
|
let isDisabled = false;
|
|
101
104
|
if (futureDatesDisabled && fullDate > today) {
|
|
102
105
|
isDisabled = true;
|
|
@@ -104,17 +107,17 @@ const Calendar = ({
|
|
|
104
107
|
if (futureStartDatesDisabled && calendarType === "startDate" && fullDate > today) {
|
|
105
108
|
isDisabled = true;
|
|
106
109
|
}
|
|
107
|
-
if (maxRangeLength > 1 &&
|
|
110
|
+
if (maxRangeLength > 1 && shiftedStart && !utils.datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)) {
|
|
108
111
|
isDisabled = true;
|
|
109
112
|
}
|
|
110
|
-
if (calendarType === "endDate" &&
|
|
113
|
+
if (calendarType === "endDate" && !shiftedEnd && shiftedStart && shiftedStart > fullDate && !calendar.isSameDate(shiftedStart, fullDate)) {
|
|
111
114
|
isDisabled = true;
|
|
112
115
|
}
|
|
113
|
-
if (calendarType === "startDate" && !
|
|
116
|
+
if (calendarType === "startDate" && !shiftedStart && shiftedEnd && fullDate > shiftedEnd) {
|
|
114
117
|
isDisabled = true;
|
|
115
118
|
}
|
|
116
|
-
const startDateSelectedAndIsSelectingEndDate = calendarType === "endDate" && !
|
|
117
|
-
const endDateSelectedAndIsSelectingStartDate = calendarType === "startDate" && !
|
|
119
|
+
const startDateSelectedAndIsSelectingEndDate = calendarType === "endDate" && !shiftedEnd && Boolean(shiftedStart && hoveredDate && fullDate > shiftedStart && fullDate < hoveredDate);
|
|
120
|
+
const endDateSelectedAndIsSelectingStartDate = calendarType === "startDate" && !shiftedStart && Boolean(shiftedEnd && hoveredDate && fullDate < shiftedEnd && fullDate > hoveredDate);
|
|
118
121
|
const shouldShowRangeIndicator = startDateSelectedAndIsSelectingEndDate || endDateSelectedAndIsSelectingStartDate;
|
|
119
122
|
const handleMouseEnter = () => {
|
|
120
123
|
setHoveredDate(fullDate);
|
|
@@ -123,17 +126,30 @@ const Calendar = ({
|
|
|
123
126
|
if (isDisabled) {
|
|
124
127
|
return false;
|
|
125
128
|
}
|
|
129
|
+
const originalFullDate = utils.shiftFromTimezone(fullDate, timezone);
|
|
126
130
|
if (calendarType === "startDate" && startDate) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
if (timezone === "UTC") {
|
|
132
|
+
originalFullDate.setUTCHours(startDate.getUTCHours());
|
|
133
|
+
originalFullDate.setUTCMinutes(startDate.getUTCMinutes());
|
|
134
|
+
originalFullDate.setUTCSeconds(startDate.getUTCSeconds());
|
|
135
|
+
} else {
|
|
136
|
+
originalFullDate.setHours(startDate.getHours());
|
|
137
|
+
originalFullDate.setMinutes(startDate.getMinutes());
|
|
138
|
+
originalFullDate.setSeconds(startDate.getSeconds());
|
|
139
|
+
}
|
|
130
140
|
}
|
|
131
141
|
if (calendarType === "endDate" && endDate) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
142
|
+
if (timezone === "UTC") {
|
|
143
|
+
originalFullDate.setUTCHours(endDate.getUTCHours());
|
|
144
|
+
originalFullDate.setUTCMinutes(endDate.getUTCMinutes());
|
|
145
|
+
originalFullDate.setUTCSeconds(endDate.getUTCSeconds());
|
|
146
|
+
} else {
|
|
147
|
+
originalFullDate.setHours(endDate.getHours());
|
|
148
|
+
originalFullDate.setMinutes(endDate.getMinutes());
|
|
149
|
+
originalFullDate.setSeconds(endDate.getSeconds());
|
|
150
|
+
}
|
|
135
151
|
}
|
|
136
|
-
setSelectedDate(
|
|
152
|
+
setSelectedDate(originalFullDate, calendarType);
|
|
137
153
|
};
|
|
138
154
|
return /* @__PURE__ */ jsxRuntime.jsx(DateRangeTableCell, { $shouldShowRangeIndicator: shouldShowRangeIndicator || isBetweenStartAndEndDates, $isCurrentMonth: isCurrentMonth, $isDisabled: isDisabled, $isSelected: isSelected, $isPresent: isCurrentDate, onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseOut, children: date }, dayKey);
|
|
139
155
|
}) }, weekKey);
|
|
@@ -242,9 +258,10 @@ const validTimeRegex = /^\d{1,2}(:\d{1,2}(:\d{1,2})?)?$/;
|
|
|
242
258
|
const TimeInput = ({
|
|
243
259
|
date,
|
|
244
260
|
setDate,
|
|
245
|
-
shouldShowSeconds
|
|
261
|
+
shouldShowSeconds,
|
|
262
|
+
timezone
|
|
246
263
|
}) => {
|
|
247
|
-
let dayjsDate = dayjs__default.default(date);
|
|
264
|
+
let dayjsDate = timezone === "UTC" ? dayjs__default.default.utc(date) : dayjs__default.default(date);
|
|
248
265
|
if (!date) {
|
|
249
266
|
dayjsDate = dayjsDate.hour(12).minute(0);
|
|
250
267
|
}
|
|
@@ -343,7 +360,8 @@ const TabbedCalendar = ({
|
|
|
343
360
|
setSelectedDate,
|
|
344
361
|
setStartDate,
|
|
345
362
|
shouldShowSeconds,
|
|
346
|
-
startDate
|
|
363
|
+
startDate,
|
|
364
|
+
timezone
|
|
347
365
|
}) => {
|
|
348
366
|
const [activeTab, setActiveTab] = react.useState(defaultActiveTab);
|
|
349
367
|
react.useEffect(() => {
|
|
@@ -374,12 +392,12 @@ const TabbedCalendar = ({
|
|
|
374
392
|
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Tabs.Trigger, { value: "endDate", "data-testid": "tabbed-calendar-trigger-end", children: "End date" })
|
|
375
393
|
] }),
|
|
376
394
|
/* @__PURE__ */ jsxRuntime.jsxs(Tabs.Tabs.Content, { value: "startDate", children: [
|
|
377
|
-
/* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions: startDateCalendarOptions, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, calendarType: "startDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate }) }),
|
|
378
|
-
/* @__PURE__ */ jsxRuntime.jsx(TimeInput, { date: startDate, setDate: handleSetStartDate, shouldShowSeconds })
|
|
395
|
+
/* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions: startDateCalendarOptions, timezone, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, calendarType: "startDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate, timezone }) }),
|
|
396
|
+
/* @__PURE__ */ jsxRuntime.jsx(TimeInput, { date: startDate, setDate: handleSetStartDate, shouldShowSeconds, timezone })
|
|
379
397
|
] }),
|
|
380
398
|
/* @__PURE__ */ jsxRuntime.jsxs(Tabs.Tabs.Content, { value: "endDate", children: [
|
|
381
|
-
/* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions: endDateCalendarOptions, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, calendarType: "endDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate }) }),
|
|
382
|
-
/* @__PURE__ */ jsxRuntime.jsx(TimeInput, { date: endDate, setDate: handleSetEndDate, shouldShowSeconds })
|
|
399
|
+
/* @__PURE__ */ jsxRuntime.jsx(StyledCalendarRenderer, { calendarOptions: endDateCalendarOptions, timezone, children: (body) => /* @__PURE__ */ jsxRuntime.jsx(Calendar, { calendarBody: body, calendarType: "endDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate, timezone }) }),
|
|
400
|
+
/* @__PURE__ */ jsxRuntime.jsx(TimeInput, { date: endDate, setDate: handleSetEndDate, shouldShowSeconds, timezone })
|
|
383
401
|
] })
|
|
384
402
|
] });
|
|
385
403
|
};
|
|
@@ -396,7 +414,8 @@ const DateTimeRangePicker = ({
|
|
|
396
414
|
placeholder = "start date – end date",
|
|
397
415
|
predefinedTimesList,
|
|
398
416
|
shouldShowSeconds,
|
|
399
|
-
startDate
|
|
417
|
+
startDate,
|
|
418
|
+
timezone = "system"
|
|
400
419
|
}) => {
|
|
401
420
|
const [isOpen, setIsOpen] = react.useState(false);
|
|
402
421
|
const [selectedStartDate, setSelectedStartDate] = react.useState();
|
|
@@ -405,21 +424,35 @@ const DateTimeRangePicker = ({
|
|
|
405
424
|
const [calendarOpenDirection, setCalendarOpenDirection] = react.useState(openDirection);
|
|
406
425
|
const calendarContainerRef = react.useRef(null);
|
|
407
426
|
react.useEffect(() => {
|
|
408
|
-
if (startDate) {
|
|
409
|
-
|
|
410
|
-
|
|
427
|
+
if (!startDate) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const startDateCopy = new Date(startDate);
|
|
431
|
+
const hours = timezone === "UTC" ? startDateCopy.getUTCHours() : startDateCopy.getHours();
|
|
432
|
+
if (hours === 0) {
|
|
433
|
+
if (timezone === "UTC") {
|
|
434
|
+
startDateCopy.setUTCHours(12);
|
|
435
|
+
} else {
|
|
436
|
+
startDateCopy.setHours(12);
|
|
411
437
|
}
|
|
412
|
-
setSelectedStartDate(startDate);
|
|
413
438
|
}
|
|
414
|
-
|
|
439
|
+
setSelectedStartDate(startDateCopy);
|
|
440
|
+
}, [startDate, timezone]);
|
|
415
441
|
react.useEffect(() => {
|
|
416
|
-
if (endDate) {
|
|
417
|
-
|
|
418
|
-
|
|
442
|
+
if (!endDate) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
const endDateCopy = new Date(endDate);
|
|
446
|
+
const hours = timezone === "UTC" ? endDateCopy.getUTCHours() : endDateCopy.getHours();
|
|
447
|
+
if (hours === 0) {
|
|
448
|
+
if (timezone === "UTC") {
|
|
449
|
+
endDateCopy.setUTCHours(12);
|
|
450
|
+
} else {
|
|
451
|
+
endDateCopy.setHours(12);
|
|
419
452
|
}
|
|
420
|
-
setSelectedEndDate(endDate);
|
|
421
453
|
}
|
|
422
|
-
|
|
454
|
+
setSelectedEndDate(endDateCopy);
|
|
455
|
+
}, [endDate, timezone]);
|
|
423
456
|
react.useLayoutEffect(() => {
|
|
424
457
|
if (shouldShowCustomRange && calendarContainerRef.current) {
|
|
425
458
|
const rect = calendarContainerRef.current.getBoundingClientRect();
|
|
@@ -441,8 +474,13 @@ const DateTimeRangePicker = ({
|
|
|
441
474
|
}
|
|
442
475
|
}, []);
|
|
443
476
|
const handleSelectDate = react.useCallback((selectedDate, calendarType) => {
|
|
444
|
-
|
|
445
|
-
|
|
477
|
+
const isMidnight = timezone === "UTC" ? selectedDate.getUTCHours() === 0 && selectedDate.getUTCMinutes() === 0 && selectedDate.getUTCSeconds() === 0 : selectedDate.getHours() === 0 && selectedDate.getMinutes() === 0 && selectedDate.getSeconds() === 0;
|
|
478
|
+
if (isMidnight) {
|
|
479
|
+
if (timezone === "UTC") {
|
|
480
|
+
selectedDate.setUTCHours(12);
|
|
481
|
+
} else {
|
|
482
|
+
selectedDate.setHours(12);
|
|
483
|
+
}
|
|
446
484
|
}
|
|
447
485
|
if (calendarType === "startDate") {
|
|
448
486
|
setSelectedStartDate(selectedDate);
|
|
@@ -462,7 +500,7 @@ const DateTimeRangePicker = ({
|
|
|
462
500
|
}
|
|
463
501
|
}
|
|
464
502
|
}
|
|
465
|
-
}, [onSelectDateRange, selectedEndDate, selectedStartDate]);
|
|
503
|
+
}, [closeDatePicker, closeOnDateRangeSelected, onSelectDateRange, selectedEndDate, selectedStartDate, timezone]);
|
|
466
504
|
const onTriggerKeyDown = react.useCallback((e) => {
|
|
467
505
|
if (e.key === "Enter" || e.key === " ") {
|
|
468
506
|
e.preventDefault();
|
|
@@ -471,11 +509,11 @@ const DateTimeRangePicker = ({
|
|
|
471
509
|
}, []);
|
|
472
510
|
const shouldShowPredefinedTimes = predefinedTimesList !== void 0 && predefinedTimesList.length > 0;
|
|
473
511
|
return /* @__PURE__ */ jsxRuntime.jsxs(Dropdown.Dropdown, { onOpenChange: handleOpenChange, open: isOpen, children: [
|
|
474
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsxRuntime.jsx(Common.DateTimeRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, shouldShowSeconds }) }),
|
|
512
|
+
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsxRuntime.jsx(Common.DateTimeRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, shouldShowSeconds, timezone }) }),
|
|
475
513
|
/* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown.Content, { align: "start", children: /* @__PURE__ */ jsxRuntime.jsx(Container.Container, { orientation: "horizontal", children: shouldShowPredefinedTimes ? /* @__PURE__ */ jsxRuntime.jsxs(PredefinedCalendarContainer, { gap: "none", orientation: "horizontal", padding: "none", children: [
|
|
476
514
|
/* @__PURE__ */ jsxRuntime.jsx(PredefinedTimes, { onSelectDateRange, predefinedTimesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange }),
|
|
477
|
-
shouldShowCustomRange && /* @__PURE__ */ jsxRuntime.jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsxRuntime.jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate }) })
|
|
478
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate }) }) }) })
|
|
515
|
+
shouldShowCustomRange && /* @__PURE__ */ jsxRuntime.jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsxRuntime.jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate, timezone }) })
|
|
516
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate, timezone }) }) }) })
|
|
479
517
|
] });
|
|
480
518
|
};
|
|
481
519
|
|