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

X2-9506 added future date range for relative date range picker #340

Merged
merged 14 commits into from
Oct 3, 2024
2 changes: 2 additions & 0 deletions src/components/DatePicker/DatePicker.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
modifiers = {},
ranges,
shouldShowRelativeRanges = false,
isFutureDatesAllowed = false,
components = {},
getTooltip,
upcomingDates,
Expand Down Expand Up @@ -299,7 +300,8 @@
ranges={ranges}
timezoneName={timezoneName}
onChange={handleRelativeRangeChanged}
onSubmit={onSubmitDateRange}

Check failure on line 303 in src/components/DatePicker/DatePicker.jsx

View workflow job for this annotation

GitHub Actions / View Lint Report

src/components/DatePicker/DatePicker.jsx#L303

[react/jsx-sort-props] Callbacks must be listed after all other props
isFutureDatesAllowed={isFutureDatesAllowed}
/>
</div>
</div>
Expand Down
137 changes: 80 additions & 57 deletions src/components/DatePicker/RelativeDateRange.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,110 +4,83 @@
import { now, toDate } from "../../helpers/date";

const options = {
// Day
YESTERDAY: "P1D,yesterday",
TODAY: "P1D,today",
NEXT_DAY: "P1D,next day",

// Week
LAST_WEEK: "P1W,last week",
TRAILING_WEEK: "P1W,-1 week",
THIS_WEEK: "P1W,this week",
NEXT_WEEK: "P1W,next week",

// Month
LAST_MONTH: "P1M,first day of last month",
TRAILING_MONTH: "P1M,-1 month",
THIS_MONTH: "P1M,first day of this month",
NEXT_MONTH: "P1M,next month",

// Quarter
LAST_QUARTER: "P3M,first day of last quarter",
TRAILING_QUARTER: "P3M,-3 months",
THIS_QUARTER: "P3M,first day of this quarter",
NEXT_QUARTER: "P3M,next quarter",

// Year
LAST_YEAR: "P1Y,first day of January last year",
TRAILING_YEAR: "P1Y,-1 year",
THIS_YEAR: "P1Y,first day of this year",
NEXT_YEAR: "P1Y,next year",
};

export const dateRanges = {
day: {
label: "Day",
options: [
{
value: options.YESTERDAY,
label: "Yesterday",
},
{
value: options.TODAY,
label: "Today",
},
{ value: options.YESTERDAY, label: "Yesterday" },
{ value: options.TODAY, label: "Today" },
{ value: options.NEXT_DAY, label: "Next Day" },
],
},

week: {
label: "Week",
options: [
{
value: options.LAST_WEEK,
label: "Last Week",
},
{
value: options.TRAILING_WEEK,
label: "Trailing Week",
},
{
value: options.THIS_WEEK,
label: "This Week",
},
{ value: options.LAST_WEEK, label: "Last Week" },
{ value: options.TRAILING_WEEK, label: "Trailing Week" },
{ value: options.THIS_WEEK, label: "This Week" },
{ value: options.NEXT_WEEK, label: "Next Week" },
],
},

month: {
label: "Month",
options: [
{
value: options.LAST_MONTH,
label: "Last Month",
},
{
value: options.TRAILING_MONTH,
label: "Trailing Month",
},
{
value: options.THIS_MONTH,
label: "This Month",
},
{ value: options.LAST_MONTH, label: "Last Month" },
{ value: options.TRAILING_MONTH, label: "Trailing Month" },
{ value: options.THIS_MONTH, label: "This Month" },
{ value: options.NEXT_MONTH, label: "Next Month" },
],
},

quarter: {
label: "Quarter",
options: [
{
value: options.LAST_QUARTER,
label: "Last Quarter",
},
{
value: options.TRAILING_QUARTER,
label: "Trailing Quarter",
},
{
value: options.THIS_QUARTER,
label: "This Quarter",
},
{ value: options.LAST_QUARTER, label: "Last Quarter" },
{ value: options.TRAILING_QUARTER, label: "Trailing Quarter" },
{ value: options.THIS_QUARTER, label: "This Quarter" },
{ value: options.NEXT_QUARTER, label: "Next Quarter" },
],
},

year: {
label: "Year",
options: [
{
value: options.LAST_YEAR,
label: "Last Year",
},
{
value: options.TRAILING_YEAR,
label: "Trailing Year",
},
{
value: options.THIS_YEAR,
label: "This Year",
},
{ value: options.LAST_YEAR, label: "Last Year" },
{ value: options.TRAILING_YEAR, label: "Trailing Year" },
{ value: options.THIS_YEAR, label: "This Year" },
{ value: options.NEXT_YEAR, label: "Next Year" },
],
},
};
Expand All @@ -128,6 +101,14 @@
};
},

[options.NEXT_DAY]: (timezone) => {
const nextDay = now(null, timezone).add(1, "day");
return {
from: toDate(nextDay.startOf("day")),
to: toDate(nextDay.endOf("day"), false),
};
},

[options.LAST_WEEK]: (timezone) => {
const lastWeek = now(null, timezone).subtract(7, "day");
return {
Expand All @@ -150,6 +131,14 @@
};
},

[options.NEXT_WEEK]: (timezone) => {
const nextWeek = now(null, timezone).add(1, "week");
return {
from: toDate(nextWeek.startOf("week")),
to: toDate(nextWeek.endOf("week"), false),
};
},

[options.LAST_MONTH]: (timezone) => {
const lastMonth = now(null, timezone).subtract(1, "month");
return {
Expand All @@ -170,6 +159,14 @@
to: toDate(now(null, timezone).endOf("month"), false),
}),

[options.NEXT_MONTH]: (timezone) => {
const nextMonth = now(null, timezone).add(1, "month");
return {
from: toDate(nextMonth.startOf("month")),
to: toDate(nextMonth.endOf("month"), false),
};
},

[options.LAST_QUARTER]: (timezone) => {
return {
from: toDate(now(null, timezone).startOf("quarter").subtract(3, "month").startOf("month")),
Expand All @@ -191,6 +188,14 @@
};
},

[options.NEXT_QUARTER]: (timezone) => {
const nextQuarter = now(null, timezone).add(1, "quarter");
return {
from: toDate(nextQuarter.startOf("quarter")),
to: toDate(nextQuarter.endOf("quarter"), false),
};
},

[options.LAST_YEAR]: (timezone) => {
const lastYear = now(null, timezone).subtract(1, "year");
return {
Expand All @@ -210,6 +215,14 @@
from: toDate(now(null, timezone).startOf("year")),
to: toDate(now(null, timezone).endOf("year"), false),
}),

[options.NEXT_YEAR]: (timezone) => {
const nextYear = now(null, timezone).add(1, "year");
return {
from: toDate(nextYear.startOf("year")),
to: toDate(nextYear.endOf("year"), false),
};
},
};

export const RelativeDateRange = ({
Expand All @@ -220,13 +233,22 @@
onChange,
onSubmit,
timezoneName,
isFutureDatesAllowed = false, // New prop
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// New prpo => maynot needed.
you can add comment of what it does, or add in Ui lit story board https://ui.xola.io/?path=/docs/data-display-date-time-date-range-picker--relative-date-ranges

}) => {
const handleChange = (e) => {
const rangeName = e.target.value;
const range = handlers[rangeName](timezoneName);
onChange(rangeName, range);
};

const filterFutureDates = (options) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this func. we are try moving out from component

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes please. move it out of the component.

if (!isFutureDatesAllowed) {
// Filter out future date options
return options.filter((option) => !option.value.includes("next"));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you check with Future date instead of checking just "next" text
const futureDates = [options.NEXT_QUARTER, ....] and check if not exist here

}
return options;

Check failure on line 249 in src/components/DatePicker/RelativeDateRange.jsx

View workflow job for this annotation

GitHub Actions / View Lint Report

src/components/DatePicker/RelativeDateRange.jsx#L249

[padding-line-between-statements] Expected blank line before this statement.
};

return (
<div className="flex space-x-2">
<Select size="medium" value={value} className="pr-8 leading-5" onChange={handleChange}>
Expand All @@ -236,7 +258,7 @@

return (
<optgroup key={rangeKey} label={range.label}>
{range.options.map((option) => (
{filterFutureDates(range.options).map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
Expand All @@ -258,4 +280,5 @@
showApply: PropTypes.bool,
value: PropTypes.string,
timezoneName: PropTypes.string,
isFutureDatesAllowed: PropTypes.bool, // New prop type
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same // New prpo => maynot needed.
you can add comment of what it does, or add in Ui lit story board https://ui.xola.io/?path=/docs/data-display-date-time-date-range-picker--relative-date-ranges

};
Loading