-
Page: {cursor + 1}
- {typeof count === 'number' && (
-
Total rows: {count}
+
+ {size === 'base' && (
+ <>
+
Page: {cursor + 1}
+ {typeof count === 'number' && (
+
Total rows: {count}
+ )}
+ >
+ )}
+ {size === 'base' && (
+
)}
+ {size === 'base' && (
+
+ )}
);
}
diff --git a/apps/dashboard/src/components/events/ListProperties.tsx b/apps/dashboard/src/components/events/ListProperties.tsx
deleted file mode 100644
index 93aa80eb..00000000
--- a/apps/dashboard/src/components/events/ListProperties.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { toDots } from '@openpanel/common';
-
-import { Table, TableBody, TableCell, TableRow } from '../ui/table';
-
-interface ListPropertiesProps {
- data: any;
- className?: string;
-}
-
-export function ListProperties({
- data,
- className = 'mini',
-}: ListPropertiesProps) {
- const dots = toDots(data);
- return (
-
-
- {Object.keys(dots).map((key) => {
- return (
-
- {key}
-
- {typeof dots[key] === 'boolean'
- ? dots[key]
- ? 'true'
- : 'false'
- : dots[key]}
-
-
- );
- })}
-
-
- );
-}
diff --git a/apps/dashboard/src/components/events/ListPropertiesIcon.tsx b/apps/dashboard/src/components/events/ListPropertiesIcon.tsx
new file mode 100644
index 00000000..6e9fa9c3
--- /dev/null
+++ b/apps/dashboard/src/components/events/ListPropertiesIcon.tsx
@@ -0,0 +1,69 @@
+import { SerieIcon } from '../report/chart/SerieIcon';
+import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';
+
+interface Props {
+ country?: string;
+ city?: string;
+ os?: string;
+ os_version?: string;
+ browser?: string;
+ browser_version?: string;
+ referrer_name?: string;
+ referrer_type?: string;
+}
+
+export function ListPropertiesIcon({
+ country,
+ city,
+ os,
+ os_version,
+ browser,
+ browser_version,
+ referrer_name,
+ referrer_type,
+}: Props) {
+ return (
+
+ {country && (
+
+
+
+
+
+ {country}, {city}
+
+
+ )}
+ {os && (
+
+
+
+
+
+ {os} ({os_version})
+
+
+ )}
+ {browser && (
+
+
+
+
+
+ {browser} ({browser_version})
+
+
+ )}
+ {referrer_name && (
+
+
+
+
+
+ {referrer_name} ({referrer_type})
+
+
+ )}
+
+ );
+}
diff --git a/apps/dashboard/src/components/overview/overview-chart-toggle.tsx b/apps/dashboard/src/components/overview/overview-chart-toggle.tsx
new file mode 100644
index 00000000..25cc0899
--- /dev/null
+++ b/apps/dashboard/src/components/overview/overview-chart-toggle.tsx
@@ -0,0 +1,23 @@
+import { BarChartIcon, LineChartIcon } from 'lucide-react';
+
+import { Button } from '../ui/button';
+import { useOverviewOptions } from './useOverviewOptions';
+
+export function OverviewChartToggle() {
+ const { chartType, setChartType } = useOverviewOptions();
+ return (
+
+ );
+}
diff --git a/apps/dashboard/src/components/overview/overview-top-devices.tsx b/apps/dashboard/src/components/overview/overview-top-devices.tsx
index 04d2cbb1..c4c6557e 100644
--- a/apps/dashboard/src/components/overview/overview-top-devices.tsx
+++ b/apps/dashboard/src/components/overview/overview-top-devices.tsx
@@ -5,6 +5,7 @@ import { useEventQueryFilters } from '@/hooks/useEventQueryFilters';
import { cn } from '@/utils/cn';
import { Widget, WidgetBody } from '../Widget';
+import { OverviewChartToggle } from './overview-chart-toggle';
import { WidgetButtons, WidgetHead } from './overview-widget';
import { useOverviewOptions } from './useOverviewOptions';
import { useOverviewWidget } from './useOverviewWidget';
@@ -15,7 +16,7 @@ interface OverviewTopDevicesProps {
export default function OverviewTopDevices({
projectId,
}: OverviewTopDevicesProps) {
- const { interval, range, previous, startDate, endDate } =
+ const { interval, range, previous, startDate, endDate, chartType } =
useOverviewOptions();
const [filters, setFilter] = useEventQueryFilters();
const isPageFilter = filters.find((filter) => filter.name === 'path');
@@ -41,7 +42,7 @@ export default function OverviewTopDevices({
name: 'device',
},
],
- chartType: 'bar',
+ chartType,
lineType: 'monotone',
interval: interval,
name: 'Top sources',
@@ -71,7 +72,7 @@ export default function OverviewTopDevices({
name: 'browser',
},
],
- chartType: 'bar',
+ chartType,
lineType: 'monotone',
interval: interval,
name: 'Top sources',
@@ -101,7 +102,7 @@ export default function OverviewTopDevices({
name: 'browser_version',
},
],
- chartType: 'bar',
+ chartType,
lineType: 'monotone',
interval: interval,
name: 'Top sources',
@@ -131,7 +132,7 @@ export default function OverviewTopDevices({
name: 'os',
},
],
- chartType: 'bar',
+ chartType,
lineType: 'monotone',
interval: interval,
name: 'Top sources',
@@ -161,7 +162,7 @@ export default function OverviewTopDevices({
name: 'os_version',
},
],
- chartType: 'bar',
+ chartType,
lineType: 'monotone',
interval: interval,
name: 'Top sources',
@@ -176,7 +177,10 @@ export default function OverviewTopDevices({
<>
- {widget.title}
+
+ {widget.title}
+
+
{widgets.map((w) => (