Add Matomo analytics tracking with Suspense fix

- Created MatomoAnalytics component with page view and event tracking
- Fixed Next.js build issue by wrapping useSearchParams in Suspense
- Added tracking for user interactions:
  - Search functionality
  - Table sorting
  - Filter changes (material, finish, color)
  - Dark mode toggles
  - Admin login success/failure
  - Admin filament create/update actions
- Updated Amplify environment variables via AWS CLI
- Analytics URL: https://analytics.demirix.dev (Site ID: 7)
- Only loads when environment variables are set

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
DaX
2025-06-30 23:01:01 +02:00
parent 966d253a7e
commit a2ec640ecc
8 changed files with 129 additions and 10 deletions

View File

@@ -4,6 +4,7 @@ import { useState, useEffect, useMemo } from 'react';
import { useRouter } from 'next/navigation';
import { filamentService, colorService } from '@/src/services/api';
import { Filament } from '@/src/types/filament';
import { trackEvent } from '@/src/components/MatomoAnalytics';
// Removed unused imports for Bambu Lab color categorization
import '@/src/styles/select.css';
@@ -191,8 +192,10 @@ export default function AdminDashboard() {
if (id) {
await filamentService.update(id, cleanData);
trackEvent('Admin', 'Update Filament', `${cleanData.tip} ${cleanData.finish} ${cleanData.boja}`);
} else {
await filamentService.create(cleanData);
trackEvent('Admin', 'Create Filament', `${cleanData.tip} ${cleanData.finish} ${cleanData.boja}`);
}
setEditingFilament(null);

View File

@@ -3,6 +3,7 @@
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { authService } from '@/src/services/api';
import { trackEvent } from '@/src/components/MatomoAnalytics';
export default function AdminLogin() {
const router = useRouter();
@@ -28,11 +29,15 @@ export default function AdminLogin() {
localStorage.setItem('authToken', response.token);
localStorage.setItem('tokenExpiry', String(Date.now() + 24 * 60 * 60 * 1000)); // 24 hours
// Track successful login
trackEvent('Admin', 'Login', 'Success');
// Redirect to admin dashboard
router.push('/upadaj/dashboard');
} catch (err: any) {
setError('Neispravno korisničko ime ili lozinka');
console.error('Login error:', err);
trackEvent('Admin', 'Login', 'Failed');
} finally {
setLoading(false);
}