mirror of
https://github.com/umami-software/umami.git
synced 2026-02-11 08:07:12 +01:00
Merge branch 'dev' of https://github.com/umami-software/umami into dev
This commit is contained in:
commit
4680c89e28
52 changed files with 498 additions and 118 deletions
|
|
@ -55,6 +55,7 @@ export const SESSION_COLUMNS = [
|
|||
'country',
|
||||
'city',
|
||||
'region',
|
||||
'distinctId',
|
||||
];
|
||||
|
||||
export const SEGMENT_TYPES = {
|
||||
|
|
@ -69,6 +70,7 @@ export const FILTER_COLUMNS = {
|
|||
referrer: 'referrer_domain',
|
||||
domain: 'referrer_domain',
|
||||
hostname: 'hostname',
|
||||
distinctId: 'distinct_id',
|
||||
title: 'page_title',
|
||||
query: 'url_query',
|
||||
os: 'os',
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import {
|
|||
differenceInCalendarMonths,
|
||||
differenceInCalendarWeeks,
|
||||
differenceInCalendarYears,
|
||||
differenceInDays,
|
||||
differenceInHours,
|
||||
differenceInMinutes,
|
||||
endOfDay,
|
||||
|
|
@ -136,7 +137,12 @@ export function parseDateValue(value: string) {
|
|||
return { num: +num, unit };
|
||||
}
|
||||
|
||||
export function parseDateRange(value: string, locale = 'en-US', timezone?: string): DateRange {
|
||||
export function parseDateRange(
|
||||
value: string,
|
||||
unitValue?: string,
|
||||
locale = 'en-US',
|
||||
timezone?: string,
|
||||
): DateRange {
|
||||
if (typeof value !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -146,7 +152,7 @@ export function parseDateRange(value: string, locale = 'en-US', timezone?: strin
|
|||
|
||||
const startDate = new Date(+startTime);
|
||||
const endDate = new Date(+endTime);
|
||||
const unit = getMinimumUnit(startDate, endDate);
|
||||
const unit = getMinimumUnit(startDate, endDate, true);
|
||||
|
||||
return {
|
||||
startDate,
|
||||
|
|
@ -169,14 +175,14 @@ export function parseDateRange(value: string, locale = 'en-US', timezone?: strin
|
|||
endDate: endOfHour(now),
|
||||
offset: 0,
|
||||
num: num || 1,
|
||||
unit,
|
||||
unit: unitValue || unit,
|
||||
value,
|
||||
};
|
||||
case 'day':
|
||||
return {
|
||||
startDate: num ? subDays(startOfDay(now), num) : startOfDay(now),
|
||||
endDate: endOfDay(now),
|
||||
unit: num ? 'day' : 'hour',
|
||||
unit: unitValue ? unitValue : num ? 'day' : 'hour',
|
||||
offset: 0,
|
||||
num: num || 1,
|
||||
value,
|
||||
|
|
@ -187,7 +193,7 @@ export function parseDateRange(value: string, locale = 'en-US', timezone?: strin
|
|||
? subWeeks(startOfWeek(now, { locale: dateLocale }), num)
|
||||
: startOfWeek(now, { locale: dateLocale }),
|
||||
endDate: endOfWeek(now, { locale: dateLocale }),
|
||||
unit: 'day',
|
||||
unit: unitValue || 'day',
|
||||
offset: 0,
|
||||
num: num || 1,
|
||||
value,
|
||||
|
|
@ -196,7 +202,7 @@ export function parseDateRange(value: string, locale = 'en-US', timezone?: strin
|
|||
return {
|
||||
startDate: num ? subMonths(startOfMonth(now), num) : startOfMonth(now),
|
||||
endDate: endOfMonth(now),
|
||||
unit: num ? 'month' : 'day',
|
||||
unit: unitValue ? unitValue : num ? 'month' : 'day',
|
||||
offset: 0,
|
||||
num: num || 1,
|
||||
value,
|
||||
|
|
@ -205,7 +211,7 @@ export function parseDateRange(value: string, locale = 'en-US', timezone?: strin
|
|||
return {
|
||||
startDate: num ? subYears(startOfYear(now), num) : startOfYear(now),
|
||||
endDate: endOfYear(now),
|
||||
unit: 'month',
|
||||
unit: unitValue || 'month',
|
||||
offset: 0,
|
||||
num: num || 1,
|
||||
value,
|
||||
|
|
@ -273,12 +279,20 @@ export function getAllowedUnits(startDate: Date, endDate: Date) {
|
|||
return index >= 0 ? units.splice(index) : [];
|
||||
}
|
||||
|
||||
export function getMinimumUnit(startDate: number | Date, endDate: number | Date) {
|
||||
export function getMinimumUnit(
|
||||
startDate: number | Date,
|
||||
endDate: number | Date,
|
||||
isDateRange: boolean = false,
|
||||
) {
|
||||
if (differenceInMinutes(endDate, startDate) <= 60) {
|
||||
return 'minute';
|
||||
} else if (differenceInHours(endDate, startDate) <= 48) {
|
||||
} else if (
|
||||
isDateRange
|
||||
? differenceInHours(endDate, startDate) <= 48
|
||||
: differenceInDays(endDate, startDate) <= 30
|
||||
) {
|
||||
return 'hour';
|
||||
} else if (differenceInCalendarMonths(endDate, startDate) <= 6) {
|
||||
} else if (differenceInCalendarMonths(endDate, startDate) <= 7) {
|
||||
return 'day';
|
||||
} else if (differenceInCalendarMonths(endDate, startDate) <= 24) {
|
||||
return 'month';
|
||||
|
|
|
|||
|
|
@ -20,14 +20,6 @@ const PRISMA_LOG_OPTIONS = {
|
|||
};
|
||||
|
||||
const DATE_FORMATS = {
|
||||
minute: 'YYYY-MM-DD HH24:MI:00',
|
||||
hour: 'YYYY-MM-DD HH24:00:00',
|
||||
day: 'YYYY-MM-DD HH24:00:00',
|
||||
month: 'YYYY-MM-01 HH24:00:00',
|
||||
year: 'YYYY-01-01 HH24:00:00',
|
||||
};
|
||||
|
||||
const DATE_FORMATS_UTC = {
|
||||
minute: 'YYYY-MM-DD"T"HH24:MI:00"Z"',
|
||||
hour: 'YYYY-MM-DD"T"HH24:00:00"Z"',
|
||||
day: 'YYYY-MM-DD"T"HH24:00:00"Z"',
|
||||
|
|
@ -52,7 +44,7 @@ function getDateSQL(field: string, unit: string, timezone?: string): string {
|
|||
return `to_char(date_trunc('${unit}', ${field} at time zone '${timezone}'), '${DATE_FORMATS[unit]}')`;
|
||||
}
|
||||
|
||||
return `to_char(date_trunc('${unit}', ${field}), '${DATE_FORMATS_UTC[unit]}')`;
|
||||
return `to_char(date_trunc('${unit}', ${field}), '${DATE_FORMATS[unit]}')`;
|
||||
}
|
||||
|
||||
function getDateWeeklySQL(field: string, timezone?: string) {
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ export const filterParams = {
|
|||
city: z.string().optional(),
|
||||
tag: z.string().optional(),
|
||||
hostname: z.string().optional(),
|
||||
distinctId: z.string().optional(),
|
||||
language: z.string().optional(),
|
||||
event: z.string().optional(),
|
||||
segment: z.uuid().optional(),
|
||||
|
|
@ -89,6 +90,7 @@ export const fieldsParam = z.enum([
|
|||
'city',
|
||||
'tag',
|
||||
'hostname',
|
||||
'distinctId',
|
||||
'language',
|
||||
'event',
|
||||
]);
|
||||
|
|
@ -166,6 +168,7 @@ export const journeyReportSchema = z.object({
|
|||
steps: z.coerce.number().min(2).max(7),
|
||||
startStep: z.string().optional(),
|
||||
endStep: z.string().optional(),
|
||||
eventType: z.coerce.number().int().positive().optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue