diff --git a/app/home/(user)/_components/orders/actions.ts b/app/home/(user)/_components/orders/actions.ts new file mode 100644 index 0000000..d201507 --- /dev/null +++ b/app/home/(user)/_components/orders/actions.ts @@ -0,0 +1,18 @@ +'use server'; + +import { createPageViewLog, PageViewAction } from "~/lib/services/audit/pageView.service"; +import { loadCurrentUserAccount } from "../../_lib/server/load-user-account"; + +export async function logAnalysisResultsNavigateAction(analysisOrderId: string) { + const account = await loadCurrentUserAccount(); + if (!account) { + throw new Error('Account not found'); + } + await createPageViewLog({ + accountId: account.id, + action: PageViewAction.VIEW_ANALYSIS_RESULTS_FROM_ORDER, + extraData: { + analysisOrderId, + }, + }); +} diff --git a/app/home/(user)/_components/orders/order-items-table.tsx b/app/home/(user)/_components/orders/order-items-table.tsx index 48d502a..096ad06 100644 --- a/app/home/(user)/_components/orders/order-items-table.tsx +++ b/app/home/(user)/_components/orders/order-items-table.tsx @@ -1,3 +1,5 @@ +'use client'; + import { Trans } from '@kit/ui/trans'; import { Table, @@ -10,18 +12,26 @@ import { import { StoreOrderLineItem } from "@medusajs/types"; import { AnalysisOrder } from '~/lib/services/order.service'; import { formatDate } from 'date-fns'; -import Link from 'next/link'; import { Eye } from 'lucide-react'; +import { useRouter } from 'next/navigation'; +import { logAnalysisResultsNavigateAction } from './actions'; export default function OrderItemsTable({ items, title, analysisOrder }: { items: StoreOrderLineItem[]; title: string; analysisOrder: AnalysisOrder; }) { + const router = useRouter(); + if (!items || items.length === 0) { return null; } + const openAnalysisResults = async () => { + await logAnalysisResultsNavigateAction(analysisOrder.medusa_order_id); + router.push(`/home/analysis-results`); + } + return ( @@ -60,13 +70,12 @@ export default function OrderItemsTable({ items, title, analysisOrder }: { - - - + diff --git a/lib/services/audit/pageView.service.ts b/lib/services/audit/pageView.service.ts index f4e70f6..efac5db 100644 --- a/lib/services/audit/pageView.service.ts +++ b/lib/services/audit/pageView.service.ts @@ -2,6 +2,7 @@ import { getSupabaseServerClient } from '@kit/supabase/server-client'; export enum PageViewAction { VIEW_ANALYSIS_RESULTS = 'VIEW_ANALYSIS_RESULTS', + VIEW_ANALYSIS_RESULTS_FROM_ORDER = 'VIEW_ANALYSIS_RESULTS_FROM_ORDER', REGISTRATION_SUCCESS = 'REGISTRATION_SUCCESS', VIEW_ORDER_ANALYSIS = 'VIEW_ORDER_ANALYSIS', VIEW_TEAM_ACCOUNT_DASHBOARD = 'VIEW_TEAM_ACCOUNT_DASHBOARD', @@ -10,9 +11,11 @@ export enum PageViewAction { export const createPageViewLog = async ({ accountId, action, + extraData, }: { accountId: string; action: PageViewAction; + extraData?: Record; }) => { try { const supabase = getSupabaseServerClient(); @@ -34,6 +37,7 @@ export const createPageViewLog = async ({ account_id: accountId, action, changed_by: user.id, + extra_data: extraData, }) .throwOnError(); } catch (error) { diff --git a/packages/supabase/src/database.types.ts b/packages/supabase/src/database.types.ts index 1963dbf..0002c36 100644 --- a/packages/supabase/src/database.types.ts +++ b/packages/supabase/src/database.types.ts @@ -115,6 +115,7 @@ export type Database = { changed_by: string created_at: string id: number + extra_data?: Json | null } Insert: { account_id: string @@ -122,6 +123,7 @@ export type Database = { changed_by: string created_at?: string id?: number + extra_data?: Json | null } Update: { account_id?: string @@ -129,6 +131,7 @@ export type Database = { changed_by?: string created_at?: string id?: number + extra_data?: Json | null } Relationships: [] } diff --git a/supabase/migrations/20250828123119_page_views_extra_data.sql b/supabase/migrations/20250828123119_page_views_extra_data.sql new file mode 100644 index 0000000..69f1e3d --- /dev/null +++ b/supabase/migrations/20250828123119_page_views_extra_data.sql @@ -0,0 +1 @@ +ALTER TABLE audit.page_views ADD COLUMN extra_data JSONB;