Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/utils/helpers/PeriodHelper.ts
T

128 lines
4.5 KiB
TypeScript

import DateUtils from "../shared/DateUtils";
export const PeriodFilters = [
{ value: "all-time", name: "app.shared.periods.ALL_TIME" },
{ value: "last-year", name: "app.shared.periods.LAST_YEAR" },
{ value: "last-3-months", name: "app.shared.periods.LAST_3_MONTHS" },
{ value: "last-30-days", name: "app.shared.periods.LAST_30_DAYS" },
{ value: "last-7-days", name: "app.shared.periods.LAST_7_DAYS" },
{ value: "last-24-hours", name: "app.shared.periods.LAST_24_HOURS" },
{ value: "year-to-date", name: "app.shared.periods.YEAR_TO_DATE" },
{ value: "month-to-date", name: "app.shared.periods.MONTH_TO_DATE" },
{ value: "week-to-date", name: "app.shared.periods.WEEK_TO_DATE" },
{ value: "last-hour", name: "app.shared.periods.LAST_HOUR" },
{ value: "last-10-minutes", name: "app.shared.periods.LAST_10_MINUTES" },
] as const;
export type PeriodFilter = (typeof PeriodFilters)[number]["value"];
export const defaultPeriodFilter = "last-30-days";
function getPeriodFromRequest({ request }: { request: Request }): PeriodFilter {
const searchParams = new URL(request.url).searchParams;
const period = searchParams.get("period") || defaultPeriodFilter;
const found = PeriodFilters.find((p) => p.value === period);
if (found) {
return found.value;
}
return defaultPeriodFilter;
}
function getGreaterThanOrEqualsFromRequest({ request }: { request: Request }) {
const searchParams = new URL(request.url).searchParams;
const countFilter = searchParams.get("period") ?? defaultPeriodFilter;
if (countFilter === "all-time") {
return undefined;
} else if (countFilter === "last-year") {
return DateUtils.daysFromDate(new Date(), 365 * -1);
} else if (countFilter === "last-3-months") {
return DateUtils.daysFromDate(new Date(), 90 * -1);
} else if (countFilter === "last-30-days") {
return DateUtils.daysFromDate(new Date(), 30 * -1);
} else if (countFilter === "last-7-days") {
return DateUtils.daysFromDate(new Date(), 7 * -1);
} else if (countFilter === "last-24-hours") {
return DateUtils.daysFromDate(new Date(), 1 * -1);
} else if (countFilter === "last-hour") {
return minutesFromDate(new Date(), 60 * -1);
} else if (countFilter === "last-10-minutes") {
return minutesFromDate(new Date(), 10 * -1);
} else if (countFilter === "year-to-date") {
return new Date(new Date().getFullYear(), 0, 1);
} else if (countFilter === "month-to-date") {
return new Date(new Date().getFullYear(), new Date().getMonth(), 1);
} else if (countFilter === "week-to-date") {
return weekStartDate(new Date());
}
return undefined;
}
function minutesFromDate(date: Date, minutes: number) {
return new Date(date.getTime() + minutes * 60000);
}
function weekStartDate(date: Date) {
const day = date.getDay();
const diff = date.getDate() - day + (day === 0 ? -6 : 1);
return new Date(date.setDate(diff));
}
function getCreatedAtFilter({ request }: { request: Request }) {
const searchParams = new URL(request.url).searchParams;
let period = searchParams.get("period");
if (!period) {
period = defaultPeriodFilter;
}
return getCreatedAt(period as PeriodFilter);
}
function getCreatedAt(period: PeriodFilter) {
let createdAt: { gte?: Date; lte?: Date } = {};
switch (period) {
case "all-time":
break;
case "last-year":
createdAt.gte = DateUtils.daysFromDate(new Date(), 365 * -1);
break;
case "last-3-months":
createdAt.gte = DateUtils.daysFromDate(new Date(), 90 * -1);
break;
case "last-30-days":
createdAt.gte = DateUtils.daysFromDate(new Date(), 30 * -1);
break;
case "last-7-days":
createdAt.gte = DateUtils.daysFromDate(new Date(), 7 * -1);
break;
case "last-24-hours":
createdAt.gte = DateUtils.daysFromDate(new Date(), 1 * -1);
break;
case "year-to-date":
const date = new Date();
const year = date.getFullYear();
createdAt.gte = new Date(year, 0, 1);
break;
case "month-to-date":
createdAt.gte = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
break;
case "week-to-date":
createdAt.gte = weekStartDate(new Date());
break;
case "last-hour":
createdAt.gte = minutesFromDate(new Date(), 60 * -1);
break;
case "last-10-minutes":
createdAt.gte = minutesFromDate(new Date(), 10 * -1);
break;
default:
break;
}
return createdAt;
}
export default {
getPeriodFromRequest,
getGreaterThanOrEqualsFromRequest,
getCreatedAtFilter,
getCreatedAt,
};