|
|
@@ -1,8 +1,10 @@
|
|
|
+import { Button } from '@/vdb/components/ui/button.js';
|
|
|
import { Tabs, TabsList, TabsTrigger } from '@/vdb/components/ui/tabs.js';
|
|
|
import { api } from '@/vdb/graphql/api.js';
|
|
|
import { useChannel } from '@/vdb/hooks/use-channel.js';
|
|
|
import { useLocalFormat } from '@/vdb/hooks/use-local-format.js';
|
|
|
import { useQuery } from '@tanstack/react-query';
|
|
|
+import { RefreshCw } from 'lucide-react';
|
|
|
import { useMemo, useState } from 'react';
|
|
|
import { DashboardBaseWidget } from '../base-widget.js';
|
|
|
import { MetricsChart } from './chart.js';
|
|
|
@@ -19,7 +21,7 @@ export function MetricsWidget() {
|
|
|
const { activeChannel } = useChannel();
|
|
|
const [dataType, setDataType] = useState<DATA_TYPES>(DATA_TYPES.OrderTotal);
|
|
|
|
|
|
- const { data } = useQuery({
|
|
|
+ const { data, isRefetching, refetch } = useQuery({
|
|
|
queryKey: ['dashboard-order-metrics', dataType],
|
|
|
queryFn: () => {
|
|
|
return api.query(orderChartDataQuery, {
|
|
|
@@ -53,15 +55,22 @@ export function MetricsWidget() {
|
|
|
<DashboardBaseWidget
|
|
|
id="metrics-widget"
|
|
|
title="Metrics"
|
|
|
- description="Metrics widget"
|
|
|
+ description="Order metrics"
|
|
|
actions={
|
|
|
- <Tabs defaultValue={dataType} onValueChange={value => setDataType(value as DATA_TYPES)}>
|
|
|
- <TabsList>
|
|
|
- <TabsTrigger value={DATA_TYPES.OrderCount}>Order Count</TabsTrigger>
|
|
|
- <TabsTrigger value={DATA_TYPES.OrderTotal}>Order Total</TabsTrigger>
|
|
|
- <TabsTrigger value={DATA_TYPES.AverageOrderValue}>Average Order Value</TabsTrigger>
|
|
|
- </TabsList>
|
|
|
- </Tabs>
|
|
|
+ <div className="flex gap-1">
|
|
|
+ <Tabs defaultValue={dataType} onValueChange={value => setDataType(value as DATA_TYPES)}>
|
|
|
+ <TabsList>
|
|
|
+ <TabsTrigger value={DATA_TYPES.OrderCount}>Order Count</TabsTrigger>
|
|
|
+ <TabsTrigger value={DATA_TYPES.OrderTotal}>Order Total</TabsTrigger>
|
|
|
+ <TabsTrigger value={DATA_TYPES.AverageOrderValue}>
|
|
|
+ Average Order Value
|
|
|
+ </TabsTrigger>
|
|
|
+ </TabsList>
|
|
|
+ </Tabs>
|
|
|
+ <Button variant={'ghost'} onClick={() => refetch()}>
|
|
|
+ <RefreshCw className={isRefetching ? 'animate-rotate' : ''} />
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
}
|
|
|
>
|
|
|
{chartData && (
|