mirror of
https://github.com/umami-software/umami.git
synced 2026-02-13 09:05:36 +01:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
a6a4cf9e9b
3 changed files with 34 additions and 6 deletions
|
|
@ -0,0 +1,3 @@
|
||||||
|
.dropdown div {
|
||||||
|
max-height: 300px;
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import DateFilter from 'components/input/DateFilter';
|
||||||
import WebsiteSelect from 'components/input/WebsiteSelect';
|
import WebsiteSelect from 'components/input/WebsiteSelect';
|
||||||
import { useMessages, useTeamUrl, useWebsite } from 'components/hooks';
|
import { useMessages, useTeamUrl, useWebsite } from 'components/hooks';
|
||||||
import { ReportContext } from './Report';
|
import { ReportContext } from './Report';
|
||||||
|
import styles from './BaseParameters.module.css';
|
||||||
|
|
||||||
export interface BaseParametersProps {
|
export interface BaseParametersProps {
|
||||||
showWebsiteSelect?: boolean;
|
showWebsiteSelect?: boolean;
|
||||||
|
|
@ -48,7 +49,7 @@ export function BaseParameters({
|
||||||
</FormRow>
|
</FormRow>
|
||||||
)}
|
)}
|
||||||
{showDateSelect && (
|
{showDateSelect && (
|
||||||
<FormRow label={formatMessage(labels.dateRange)}>
|
<FormRow label={formatMessage(labels.dateRange)} className={styles.dropdown}>
|
||||||
{allowDateSelect && (
|
{allowDateSelect && (
|
||||||
<DateFilter
|
<DateFilter
|
||||||
value={value}
|
value={value}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ async function relationalQuery(
|
||||||
): Promise<JourneyResult[]> {
|
): Promise<JourneyResult[]> {
|
||||||
const { startDate, endDate, steps, startStep, endStep } = filters;
|
const { startDate, endDate, steps, startStep, endStep } = filters;
|
||||||
const { rawQuery } = prisma;
|
const { rawQuery } = prisma;
|
||||||
const { sequenceQuery, startStepQuery, endStepQuery, params } = getJourneyQuery(
|
const { sequenceQuery, startStepQuery, endStepQuery, finalSelectQuery, params } = getJourneyQuery(
|
||||||
steps,
|
steps,
|
||||||
startStep,
|
startStep,
|
||||||
endStep,
|
endStep,
|
||||||
|
|
@ -57,12 +57,14 @@ async function relationalQuery(
|
||||||
sequenceQuery: string;
|
sequenceQuery: string;
|
||||||
startStepQuery: string;
|
startStepQuery: string;
|
||||||
endStepQuery: string;
|
endStepQuery: string;
|
||||||
|
finalSelectQuery: string;
|
||||||
params: { [key: string]: string };
|
params: { [key: string]: string };
|
||||||
} {
|
} {
|
||||||
const params = {};
|
const params = {};
|
||||||
let sequenceQuery = '';
|
let sequenceQuery = '';
|
||||||
let startStepQuery = '';
|
let startStepQuery = '';
|
||||||
let endStepQuery = '';
|
let endStepQuery = '';
|
||||||
|
let finalSelectQuery = '';
|
||||||
|
|
||||||
// create sequence query
|
// create sequence query
|
||||||
let selectQuery = '';
|
let selectQuery = '';
|
||||||
|
|
@ -104,10 +106,18 @@ async function relationalQuery(
|
||||||
params['endStep'] = endStep;
|
params['endStep'] = endStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create final select query
|
||||||
|
for (let i = 1; i < steps; i++) {
|
||||||
|
finalSelectQuery += `\nCASE WHEN e${i} IS NOT NULL and e${
|
||||||
|
i + 1
|
||||||
|
} IS NULL THEN 'dropped off' ELSE e${i + 1} END AS e${i + 1},`;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sequenceQuery,
|
sequenceQuery,
|
||||||
startStepQuery,
|
startStepQuery,
|
||||||
endStepQuery,
|
endStepQuery,
|
||||||
|
finalSelectQuery,
|
||||||
params,
|
params,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -124,7 +134,9 @@ async function relationalQuery(
|
||||||
where website_id = {{websiteId::uuid}}
|
where website_id = {{websiteId::uuid}}
|
||||||
and created_at between {{startDate}} and {{endDate}}),
|
and created_at between {{startDate}} and {{endDate}}),
|
||||||
${sequenceQuery}
|
${sequenceQuery}
|
||||||
select *
|
select e1,
|
||||||
|
${finalSelectQuery}
|
||||||
|
count
|
||||||
from sequences
|
from sequences
|
||||||
where 1 = 1
|
where 1 = 1
|
||||||
${startStepQuery}
|
${startStepQuery}
|
||||||
|
|
@ -153,7 +165,7 @@ async function clickhouseQuery(
|
||||||
): Promise<JourneyResult[]> {
|
): Promise<JourneyResult[]> {
|
||||||
const { startDate, endDate, steps, startStep, endStep } = filters;
|
const { startDate, endDate, steps, startStep, endStep } = filters;
|
||||||
const { rawQuery } = clickhouse;
|
const { rawQuery } = clickhouse;
|
||||||
const { sequenceQuery, startStepQuery, endStepQuery, params } = getJourneyQuery(
|
const { sequenceQuery, startStepQuery, endStepQuery, finalSelectQuery, params } = getJourneyQuery(
|
||||||
steps,
|
steps,
|
||||||
startStep,
|
startStep,
|
||||||
endStep,
|
endStep,
|
||||||
|
|
@ -167,12 +179,14 @@ async function clickhouseQuery(
|
||||||
sequenceQuery: string;
|
sequenceQuery: string;
|
||||||
startStepQuery: string;
|
startStepQuery: string;
|
||||||
endStepQuery: string;
|
endStepQuery: string;
|
||||||
|
finalSelectQuery: string;
|
||||||
params: { [key: string]: string };
|
params: { [key: string]: string };
|
||||||
} {
|
} {
|
||||||
const params = {};
|
const params = {};
|
||||||
let sequenceQuery = '';
|
let sequenceQuery = '';
|
||||||
let startStepQuery = '';
|
let startStepQuery = '';
|
||||||
let endStepQuery = '';
|
let endStepQuery = '';
|
||||||
|
let finalSelectQuery = '';
|
||||||
|
|
||||||
// create sequence query
|
// create sequence query
|
||||||
let selectQuery = '';
|
let selectQuery = '';
|
||||||
|
|
@ -207,17 +221,25 @@ async function clickhouseQuery(
|
||||||
if (endStep) {
|
if (endStep) {
|
||||||
for (let i = 1; i < steps; i++) {
|
for (let i = 1; i < steps; i++) {
|
||||||
const startQuery = i === 1 ? 'and (' : '\nor ';
|
const startQuery = i === 1 ? 'and (' : '\nor ';
|
||||||
endStepQuery += `${startQuery}(e${i} = {endStep:String} and e${i + 1} is null) `;
|
endStepQuery += `${startQuery}(e${i} = {endStep:String} and e${i + 1} = 'dropped off') `;
|
||||||
}
|
}
|
||||||
endStepQuery += `\nor (e${steps} = {endStep:String}))`;
|
endStepQuery += `\nor (e${steps} = {endStep:String}))`;
|
||||||
|
|
||||||
params['endStep'] = endStep;
|
params['endStep'] = endStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create final select query
|
||||||
|
for (let i = 1; i < steps; i++) {
|
||||||
|
finalSelectQuery += `\nCASE WHEN e${i} IS NOT NULL and e${
|
||||||
|
i + 1
|
||||||
|
} IS NULL THEN 'dropped off' ELSE e${i + 1} END AS e${i + 1},`;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sequenceQuery,
|
sequenceQuery,
|
||||||
startStepQuery,
|
startStepQuery,
|
||||||
endStepQuery,
|
endStepQuery,
|
||||||
|
finalSelectQuery,
|
||||||
params,
|
params,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +255,9 @@ async function clickhouseQuery(
|
||||||
where website_id = {websiteId:UUID}
|
where website_id = {websiteId:UUID}
|
||||||
and created_at between {startDate:DateTime64} and {endDate:DateTime64}),
|
and created_at between {startDate:DateTime64} and {endDate:DateTime64}),
|
||||||
${sequenceQuery}
|
${sequenceQuery}
|
||||||
select *
|
select e1,
|
||||||
|
${finalSelectQuery}
|
||||||
|
count
|
||||||
from sequences
|
from sequences
|
||||||
where 1 = 1
|
where 1 = 1
|
||||||
${startStepQuery}
|
${startStepQuery}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue