Updated filtering logic.

This commit is contained in:
Mike Cao 2023-08-07 12:43:43 -07:00
parent 112005212e
commit 9d86385f5c
8 changed files with 23 additions and 31 deletions

View file

@ -16,7 +16,7 @@ export function EventDataTable({ data = [] }) {
<GridTable data={data}> <GridTable data={data}>
<GridColumn name="eventName" label={formatMessage(labels.event)}> <GridColumn name="eventName" label={formatMessage(labels.event)}>
{row => ( {row => (
<Link href={resolveUrl({ eventName: row.eventName })} shallow={true}> <Link href={resolveUrl({ event: row.eventName })} shallow={true}>
{row.eventName} {row.eventName}
</Link> </Link>
)} )}

View file

@ -6,14 +6,14 @@ import PageHeader from 'components/layout/PageHeader';
import Empty from 'components/common/Empty'; import Empty from 'components/common/Empty';
import { DATA_TYPES } from 'lib/constants'; import { DATA_TYPES } from 'lib/constants';
export function EventDataValueTable({ data = [], eventName }) { export function EventDataValueTable({ data = [], event }) {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { resolveUrl } = usePageQuery(); const { resolveUrl } = usePageQuery();
const Title = () => { const Title = () => {
return ( return (
<> <>
<Link href={resolveUrl({ eventName: undefined })}> <Link href={resolveUrl({ event: undefined })}>
<Button> <Button>
<Icon rotate={180}> <Icon rotate={180}>
<Icons.ArrowRight /> <Icons.ArrowRight />
@ -21,7 +21,7 @@ export function EventDataValueTable({ data = [], eventName }) {
<Text>{formatMessage(labels.back)}</Text> <Text>{formatMessage(labels.back)}</Text>
</Button> </Button>
</Link> </Link>
<Text>{eventName}</Text> <Text>{event}</Text>
</> </>
); );
}; };

View file

@ -26,15 +26,15 @@ function useData(websiteId, eventName) {
export default function WebsiteEventData({ websiteId }) { export default function WebsiteEventData({ websiteId }) {
const { const {
query: { eventName }, query: { event },
} = usePageQuery(); } = usePageQuery();
const { data } = useData(websiteId, eventName); const { data } = useData(websiteId, event);
return ( return (
<Flexbox className={styles.container} direction="column" gap={20}> <Flexbox className={styles.container} direction="column" gap={20}>
<EventDataMetricsBar websiteId={websiteId} /> <EventDataMetricsBar websiteId={websiteId} />
{!eventName && <EventDataTable data={data} />} {!event && <EventDataTable data={data} />}
{eventName && <EventDataValueTable eventName={eventName} data={data} />} {event && <EventDataValueTable event={event} data={data} />}
</Flexbox> </Flexbox>
); );
} }

View file

@ -3,7 +3,7 @@ import dateFormat from 'dateformat';
import debug from 'debug'; import debug from 'debug';
import { CLICKHOUSE } from 'lib/db'; import { CLICKHOUSE } from 'lib/db';
import { QueryFilters } from './types'; import { QueryFilters } from './types';
import { FILTER_COLUMNS, IGNORED_FILTERS } from './constants'; import { FILTER_COLUMNS } from './constants';
import { loadWebsite } from './load'; import { loadWebsite } from './load';
import { maxDate } from './date'; import { maxDate } from './date';
@ -66,9 +66,9 @@ function getDateFormat(date) {
function getFilterQuery(filters = {}) { function getFilterQuery(filters = {}) {
const query = Object.keys(filters).reduce((arr, key) => { const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key]; const filter = filters[key];
const column = FILTER_COLUMNS[key];
if (filter !== undefined && !IGNORED_FILTERS.includes(key)) { if (filter !== undefined && column) {
const column = FILTER_COLUMNS[key] || key;
arr.push(`and ${column} = {${key}:String}`); arr.push(`and ${column} = {${key}:String}`);
} }

View file

@ -48,23 +48,16 @@ export const FILTER_COLUMNS = {
referrer: 'referrer_domain', referrer: 'referrer_domain',
title: 'page_title', title: 'page_title',
query: 'url_query', query: 'url_query',
os: 'os',
browser: 'browser',
device: 'device',
country: 'country',
region: 'subdivision1', region: 'subdivision1',
eventType: 'event_type', city: 'city',
eventName: 'event_name', language: 'language',
event: 'event_name', event: 'event_name',
}; };
export const IGNORED_FILTERS = [
'startDate',
'endDate',
'timezone',
'unit',
'eventType',
'fields',
'filters',
'groups',
];
export const COLLECTION_TYPE = { export const COLLECTION_TYPE = {
event: 'event', event: 'event',
identify: 'identify', identify: 'identify',

View file

@ -1,7 +1,7 @@
import prisma from '@umami/prisma-client'; import prisma from '@umami/prisma-client';
import moment from 'moment-timezone'; import moment from 'moment-timezone';
import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db'; import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db';
import { FILTER_COLUMNS, IGNORED_FILTERS, SESSION_COLUMNS } from './constants'; import { FILTER_COLUMNS, SESSION_COLUMNS } from './constants';
import { loadWebsite } from './load'; import { loadWebsite } from './load';
import { maxDate } from './date'; import { maxDate } from './date';
import { QueryFilters, QueryOptions } from './types'; import { QueryFilters, QueryOptions } from './types';
@ -70,9 +70,9 @@ function getTimestampIntervalQuery(field: string): string {
function getFilterQuery(filters = {}): string { function getFilterQuery(filters = {}): string {
const query = Object.keys(filters).reduce((arr, key) => { const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key]; const filter = filters[key];
const column = FILTER_COLUMNS[key];
if (filter !== undefined && !IGNORED_FILTERS.includes(key)) { if (filter !== undefined && column) {
const column = FILTER_COLUMNS[key] || key;
arr.push(`and ${column}={{${key}}}`); arr.push(`and ${column}={{${key}}}`);
if (key === 'referrer') { if (key === 'referrer') {

View file

@ -135,9 +135,7 @@ export interface QueryFilters {
endDate?: Date; endDate?: Date;
timezone?: string; timezone?: string;
unit?: string; unit?: string;
domain?: string;
eventType?: number; eventType?: number;
eventName?: string;
url?: string; url?: string;
referrer?: string; referrer?: string;
title?: string; title?: string;
@ -149,6 +147,7 @@ export interface QueryFilters {
region?: string; region?: string;
city?: string; city?: string;
language?: string; language?: string;
event?: string;
} }
export interface QueryOptions { export interface QueryOptions {

View file

@ -21,7 +21,7 @@ export default async (
await useAuth(req, res); await useAuth(req, res);
if (req.method === 'GET') { if (req.method === 'GET') {
const { websiteId, startAt, endAt, eventName } = req.query; const { websiteId, startAt, endAt, event } = req.query;
if (!(await canViewWebsite(req.auth, websiteId))) { if (!(await canViewWebsite(req.auth, websiteId))) {
return unauthorized(res); return unauthorized(res);
@ -33,7 +33,7 @@ export default async (
const data = await getEventDataEvents(websiteId, { const data = await getEventDataEvents(websiteId, {
startDate, startDate,
endDate, endDate,
eventName, event,
}); });
return ok(res, data); return ok(res, data);