diff --git a/frontend/app/components/DataManagement/Activity/EventDetailsModal.tsx b/frontend/app/components/DataManagement/Activity/EventDetailsModal.tsx
index 2140d1549..c2331842a 100644
--- a/frontend/app/components/DataManagement/Activity/EventDetailsModal.tsx
+++ b/frontend/app/components/DataManagement/Activity/EventDetailsModal.tsx
@@ -1,39 +1,61 @@
import React from 'react'
import { EventData } from './data/Event'
import { Segmented, Input } from 'antd';
-import { X } from 'lucide-react';
+import { X, List, Braces, Files } from 'lucide-react';
+import copy from 'copy-to-clipboard'
function EventDetailsModal({ ev, onClose }: { ev: EventData, onClose: () => void }) {
const tabs = [
{
label: 'All Properties',
+ value: 'all',
},
{
label: 'Custom Properties',
+ value: 'custom',
},
{
label: 'Default Properties',
+ value: 'default',
}
]
const views = [
{
- label: 'icn1',
+ label:
,
value: 'pretty',
},
{
- label: 'icn2',
+ label: ,
value: 'json',
}
]
const [query, setQuery] = React.useState('')
+ const [tab, setTab] = React.useState(tabs[0].value)
const [view, setView] = React.useState(views[0].value)
- const dataFields = { ...ev.$_defaultFields, ...ev.$_customFields }
+ const tabProps = {
+ all: { ...ev.$_defaultFields, ...ev.$_customFields },
+ custom: ev.$_customFields,
+ default: ev.$_defaultFields,
+ }
+ const dataFields = tabProps[tab]
const fieldArr = Object.entries(dataFields)
- const filteredArr = fieldArr.filter(([key, value]) => {
+ const filteredArr = view === 'json' ? [] : fieldArr.filter(([key, value]) => {
const qReg = new RegExp(query, 'ig')
return qReg.test(key) || qReg.test(value)
})
+ const strProps = JSON.stringify({
+ event: ev.name,
+ properties: dataFields
+ }, null, 4)
+ const highlightedJson = view === 'pretty' ? '' : query ? strProps.replace(
+ new RegExp(query, 'ig'),
+ (match) => `${match}`
+ ) : strProps
+
+ const onCopy = () => {
+ copy(strProps)
+ }
return (
@@ -45,10 +67,13 @@ function EventDetailsModal({ ev, onClose }: { ev: EventData, onClose: () => void
icn
-
{ev.name}
-
Play Session
+
{ev.name}
+
+ Play Session
+
+
-
+ setTab(v)} />
void
placeholder={'Find Property'}
/>
-
- {filteredArr.map(([key, value]) => (
-
-
{key}
-
{value}
+ {view === 'pretty' ?
+
+ {filteredArr.map(([key, value]) => (
+
+ ))}
- ))}
-
+ : (
+
+ )}
- )
+ );
+}
+
+function Triangle({ size = 16, color = 'currentColor' }) {
+ return (
+
+ );
}
export default EventDetailsModal;
\ No newline at end of file
diff --git a/frontend/app/components/DataManagement/Activity/Page.tsx b/frontend/app/components/DataManagement/Activity/Page.tsx
index 3e84d66b0..5260fd43b 100644
--- a/frontend/app/components/DataManagement/Activity/Page.tsx
+++ b/frontend/app/components/DataManagement/Activity/Page.tsx
@@ -7,9 +7,44 @@ import { Pagination } from 'UI';
import Event from './data/Event';
import { useModal } from 'App/components/Modal';
import EventDetailsModal from "./EventDetailsModal";
+import { useQuery } from '@tanstack/react-query';
+
+const limit = 100;
+
+const fetcher = async (page: number): Promise<{ list: any[], total: number }> => {
+ const total = 3000;
+ return new Promise((resolve) => {
+ const testEv = new Event({
+ name: 'test ev',
+ time: Date.now(),
+ defaultFields: { userId: '123', userCity: 'NY', userEnvironment: 'Mac OS' },
+ customFields: {},
+ isAutoCapture: false,
+ sessionId: '123123'
+ });
+ const testAutoEv = new Event({
+ name: 'auto test ev',
+ time: Date.now(),
+ defaultFields: { userId: '123', userCity: 'NY', userEnvironment: 'Mac OS' },
+ customFields: {},
+ isAutoCapture: true,
+ sessionId: '123123'
+ });
+ const list = [testEv.toData(), testAutoEv.toData()];
+
+ resolve({ list, total });
+ })
+}
function ActivityPage() {
+ const [page, setPage] = React.useState(1);
const [hiddenCols, setHiddenCols] = React.useState([]);
+ const { data, isPending } = useQuery({
+ queryKey: ['data', 'events', page],
+ queryFn: () => fetcher(page),
+ initialData: { list: [], total: 0 },
+ });
+ const { list, total } = data;
const appliedFilter = { filters: [] };
const onAddFilter = () => {};
const onUpdateFilter = () => {};
@@ -92,28 +127,12 @@ function ActivityPage() {
hidden: hiddenCols.includes(col.key),
}));
- const page = 1;
- const limit = 100;
- const total = 3000;
- const testEv = new Event(
- 'test ev',
- Date.now(),
- { userId: '123', userCity: 'NY', userEnvironment: 'Mac OS' },
- {},
- false
- );
- const testAutoEv = new Event(
- 'test auto ev',
- Date.now(),
- { userId: '123', userCity: 'NY', userEnvironment: 'Mac OS' },
- {},
- true
- );
- const list = [testEv.toData(), testAutoEv.toData()];
- const onPageChange = () => {};
+ const onPageChange = (page: number) => {
+ setPage(page);
+ };
const onItemClick = (ev: Event) => {
- showModal(, { width: 400, right: true });
+ showModal(, { width: 420, right: true });
}
return (
({
onClick: (event) => onItemClick(record)
})}
diff --git a/frontend/app/components/DataManagement/Activity/data/Event.ts b/frontend/app/components/DataManagement/Activity/data/Event.ts
index da8855e73..305d08553 100644
--- a/frontend/app/components/DataManagement/Activity/data/Event.ts
+++ b/frontend/app/components/DataManagement/Activity/data/Event.ts
@@ -22,14 +22,31 @@ export default class Event {
}
customFields?: Record = undefined;
- readonly $_isAutoCapture;
+ readonly $_isAutoCapture: boolean;
+ readonly $_sessionId: string;
- constructor(name: string, time: string, defaultFields: DefaultFields, customFields?: Record, isAutoCapture = false) {
+ constructor(
+ {
+ name,
+ time,
+ defaultFields,
+ customFields,
+ sessionId,
+ isAutoCapture,
+}: {
+ name: string;
+ time: string;
+ defaultFields: DefaultFields;
+ customFields?: Record;
+ sessionId: string;
+ isAutoCapture: boolean;
+ }) {
this.name = name;
this.time = time;
this.defaultFields = defaultFields;
this.customFields = customFields;
this.$_isAutoCapture = isAutoCapture;
+ this.$_sessionId = sessionId;
}
toJSON() {