mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-03-03 22:31:52 +00:00
Created now function and refactored intervalToDateRange
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
||||
intervalToDateRange,
|
||||
rangeIsInterval,
|
||||
dateRangeIsEmpty,
|
||||
ALL,
|
||||
} from '../helpers/dateIntervals';
|
||||
import { DateRangeRow } from './DateRangeRow';
|
||||
import { DateIntervalDropdownItems } from './DateIntervalDropdownItems';
|
||||
@@ -31,7 +32,7 @@ export const DateRangeSelector = (
|
||||
const [activeDateRange, setActiveDateRange] = useState(initialIntervalIsRange ? undefined : initialDateRange);
|
||||
|
||||
const updateDateRange = (dateRange: DateRange) => {
|
||||
setActiveInterval(dateRangeIsEmpty(dateRange) ? 'all' : undefined);
|
||||
setActiveInterval(dateRangeIsEmpty(dateRange) ? ALL : undefined);
|
||||
setActiveDateRange(dateRange);
|
||||
onDatesChange(dateRange);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { parseISO, format as formatDate, getUnixTime, formatDistance } from 'date-fns';
|
||||
import { isDateObject, STANDARD_DATE_AND_TIME_FORMAT } from '../helpers/date';
|
||||
import { isDateObject, now, STANDARD_DATE_AND_TIME_FORMAT } from '../helpers/date';
|
||||
|
||||
export interface TimeProps {
|
||||
date: Date | string;
|
||||
@@ -12,7 +12,7 @@ export const Time = ({ date, format = STANDARD_DATE_AND_TIME_FORMAT, relative =
|
||||
|
||||
return (
|
||||
<time dateTime={`${getUnixTime(dateObject)}000`}>
|
||||
{relative ? `${formatDistance(new Date(), dateObject)} ago` : formatDate(dateObject, format)}
|
||||
{relative ? `${formatDistance(now(), dateObject)} ago` : formatDate(dateObject, format)}
|
||||
</time>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -9,6 +9,8 @@ export type DateOrString = Date | string;
|
||||
|
||||
type NullableDate = DateOrString | null;
|
||||
|
||||
export const now = () => new Date();
|
||||
|
||||
export const isDateObject = (date: DateOrString): date is Date => typeof date !== 'string';
|
||||
|
||||
const formatDateFromFormat = (date?: NullableDate, theFormat?: string): OptionalString => {
|
||||
@@ -28,7 +30,7 @@ export const formatIsoDate = (date?: NullableDate) => formatDateFromFormat(date,
|
||||
|
||||
export const formatInternational = formatDate();
|
||||
|
||||
export const parseDate = (date: string, theFormat: string) => parse(date, theFormat, new Date());
|
||||
export const parseDate = (date: string, theFormat: string) => parse(date, theFormat, now());
|
||||
|
||||
export const parseISO = (date: DateOrString): Date => (isDateObject(date) ? date : stdParseISO(date));
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { subDays, startOfDay, endOfDay } from 'date-fns';
|
||||
import { cond, filter, isEmpty, T } from 'ramda';
|
||||
import { dateOrNull, DateOrString, formatInternational, isBeforeOrEqual, parseISO } from './date';
|
||||
import { dateOrNull, DateOrString, formatInternational, isBeforeOrEqual, now, parseISO } from './date';
|
||||
|
||||
export interface DateRange {
|
||||
startDate?: Date | null;
|
||||
endDate?: Date | null;
|
||||
}
|
||||
|
||||
const ALL = 'all';
|
||||
export const ALL = 'all';
|
||||
const INTERVAL_TO_STRING_MAP = {
|
||||
today: 'Today',
|
||||
yesterday: 'Yesterday',
|
||||
@@ -64,39 +64,25 @@ export const rangeOrIntervalToString = (range?: DateRange | DateInterval): strin
|
||||
return INTERVAL_TO_STRING_MAP[range];
|
||||
};
|
||||
|
||||
const startOfDaysAgo = (daysAgo: number) => startOfDay(subDays(new Date(), daysAgo));
|
||||
const endingToday = (startDate: Date): DateRange => ({ startDate, endDate: endOfDay(new Date()) });
|
||||
const startOfDaysAgo = (daysAgo: number) => startOfDay(subDays(now(), daysAgo));
|
||||
const endingToday = (startDate: Date): DateRange => ({ startDate, endDate: endOfDay(now()) });
|
||||
|
||||
export const intervalToDateRange = (dateInterval?: DateInterval): DateRange => {
|
||||
if (!dateInterval || dateInterval === ALL) {
|
||||
return {};
|
||||
}
|
||||
|
||||
switch (dateInterval) {
|
||||
case 'today':
|
||||
return endingToday(startOfDay(new Date()));
|
||||
case 'yesterday':
|
||||
return { startDate: startOfDaysAgo(1), endDate: endOfDay(subDays(new Date(), 1)) };
|
||||
case 'last7Days':
|
||||
return endingToday(startOfDaysAgo(7));
|
||||
case 'last30Days':
|
||||
return endingToday(startOfDaysAgo(30));
|
||||
case 'last90Days':
|
||||
return endingToday(startOfDaysAgo(90));
|
||||
case 'last180Days':
|
||||
return endingToday(startOfDaysAgo(180));
|
||||
case 'last365Days':
|
||||
return endingToday(startOfDaysAgo(365));
|
||||
}
|
||||
|
||||
return {};
|
||||
};
|
||||
export const intervalToDateRange = cond<[DateInterval | undefined], DateRange>([
|
||||
[(dateInterval) => dateInterval === 'today', () => endingToday(startOfDay(now()))],
|
||||
[(dateInterval) => dateInterval === 'yesterday', () => ({ startDate: startOfDaysAgo(1), endDate: endOfDay(subDays(now(), 1)) })],
|
||||
[(dateInterval) => dateInterval === 'last7Days', () => endingToday(startOfDaysAgo(7))],
|
||||
[(dateInterval) => dateInterval === 'last30Days', () => endingToday(startOfDaysAgo(30))],
|
||||
[(dateInterval) => dateInterval === 'last90Days', () => endingToday(startOfDaysAgo(90))],
|
||||
[(dateInterval) => dateInterval === 'last180Days', () => endingToday(startOfDaysAgo(180))],
|
||||
[(dateInterval) => dateInterval === 'last365Days', () => endingToday(startOfDaysAgo(365))],
|
||||
[T, () => ({})],
|
||||
]);
|
||||
|
||||
export const dateToMatchingInterval = (date: DateOrString): DateInterval => {
|
||||
const theDate: Date = parseISO(date);
|
||||
const theDate = parseISO(date);
|
||||
|
||||
return cond<never, DateInterval>([
|
||||
[() => isBeforeOrEqual(startOfDay(new Date()), theDate), () => 'today'],
|
||||
[() => isBeforeOrEqual(startOfDay(now()), theDate), () => 'today'],
|
||||
[() => isBeforeOrEqual(startOfDaysAgo(1), theDate), () => 'yesterday'],
|
||||
[() => isBeforeOrEqual(startOfDaysAgo(7), theDate), () => 'last7Days'],
|
||||
[() => isBeforeOrEqual(startOfDaysAgo(30), theDate), () => 'last30Days'],
|
||||
|
||||
Reference in New Issue
Block a user