user analytics support
This commit is contained in:
parent
57c843f442
commit
4b1c0293a0
7 changed files with 18 additions and 4789 deletions
|
|
@ -63,7 +63,8 @@ const config = {
|
|||
site: {
|
||||
domain: process.env.ENVIRONMENT === 'prod' ? 'rocks.2many.ca' : 'localhost:3000',
|
||||
protocol: process.env.ENVIRONMENT === 'prod' ? 'https' : 'http',
|
||||
apiDomain: process.env.ENVIRONMENT === 'prod' ? 'api.rocks.2many.ca' : 'localhost:4000'
|
||||
apiDomain: process.env.ENVIRONMENT === 'prod' ? 'api.rocks.2many.ca' : 'localhost:4000',
|
||||
analyticApiKey: '',
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -152,10 +153,12 @@ config.updateFromDatabase = (settings) => {
|
|||
const siteDomain = siteSettings.find(s => s.key === 'site_domain');
|
||||
const siteProtocol = siteSettings.find(s => s.key === 'site_protocol');
|
||||
const siteApiDomain = siteSettings.find(s => s.key === 'site_api_domain');
|
||||
const analyticApiKey = siteSettings.find(s => s.key === 'site_analytics_api_key');
|
||||
|
||||
if (siteDomain && siteDomain.value) config.site.domain = siteDomain.value;
|
||||
if (siteProtocol && siteProtocol.value) config.site.protocol = siteProtocol.value;
|
||||
if (siteApiDomain && siteApiDomain.value) config.site.apiDomain = siteApiDomain.value;
|
||||
if (analyticApiKey && analyticApiKey.value) config.site.analyticApiKey = analyticApiKey.value;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ app.use('/api/admin/coupons', couponsAdminRoutes(pool, query, adminAuthMiddlewar
|
|||
app.use('/api/admin/orders', ordersAdminRoutes(pool, query, adminAuthMiddleware(pool, query)));
|
||||
app.use('/api/admin/blog', blogAdminRoutes(pool, query, adminAuthMiddleware(pool, query)));
|
||||
app.use('/api/admin/blog-comments', blogCommentsAdminRoutes(pool, query, adminAuthMiddleware(pool, query)));
|
||||
app.use('/api/admin/email-templates', emailTemplatesAdminRoutes(pool, query, adminAuthMiddleware(pool, query))); // Add new route
|
||||
app.use('/api/admin/email-templates', emailTemplatesAdminRoutes(pool, query, adminAuthMiddleware(pool, query)));
|
||||
|
||||
// Admin-only product image upload
|
||||
app.post('/api/image/product', adminAuthMiddleware(pool, query), upload.single('image'), (req, res) => {
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ VALUES
|
|||
('site_api_domain', NULL, 'site'),
|
||||
('site_protocol', NULL, 'site'),
|
||||
('site_environment', NULL, 'site'),
|
||||
('site_analytics_api_key', NULL, 'site'),
|
||||
|
||||
-- Payment Settings
|
||||
('currency', 'CAD', 'payment'),
|
||||
|
|
|
|||
4785
frontend/package-lock.json
generated
4785
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -13,6 +13,7 @@
|
|||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@fontsource/roboto": "^5.0.8",
|
||||
"@microsoft/clarity": "^1.0.0",
|
||||
"@mui/icons-material": "^5.14.19",
|
||||
"@mui/material": "^5.14.19",
|
||||
"@reduxjs/toolkit": "^2.0.1",
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import ProtectedRoute from '@components/ProtectedRoute';
|
|||
import { StripeProvider } from './context/StripeContext';
|
||||
import useBrandingSettings from '@hooks/brandingHooks';
|
||||
import imageUtils from '@utils/imageUtils';
|
||||
import Clarity from '@microsoft/clarity';
|
||||
|
||||
// Import layouts
|
||||
import MainLayout from './layouts/MainLayout';
|
||||
|
|
@ -43,7 +44,14 @@ const BlogEditPage = lazy(() => import('@pages/Admin/BlogEditPage'));
|
|||
const AdminBlogCommentsPage = lazy(() => import('@pages/Admin/BlogCommentsPage'));
|
||||
const AdminProductReviewsPage = lazy(() => import('@pages/Admin/ProductReviewsPage'));
|
||||
const EmailTemplatesPage = lazy(() => import('@pages/Admin/EmailTemplatesPage'));
|
||||
const BrandingPage = lazy(() => import('@pages/Admin/BrandingPage')); // New Branding Page
|
||||
const BrandingPage = lazy(() => import('@pages/Admin/BrandingPage'));
|
||||
|
||||
|
||||
|
||||
const projectId = "rcjhrd0t72"
|
||||
|
||||
Clarity.init(projectId);
|
||||
|
||||
|
||||
// Loading component for suspense fallback
|
||||
const LoadingComponent = () => (
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import authService from '@services/authService';
|
|||
import cartService from '@services/cartService';
|
||||
import { useAuth, useCart, useNotification } from './reduxHooks';
|
||||
import apiClient from '@services/api';
|
||||
|
||||
import Clarity from '@microsoft/clarity';
|
||||
// Product hooks
|
||||
export const useProducts = (params) => {
|
||||
return useQuery({
|
||||
|
|
@ -146,6 +146,7 @@ export const useVerifyCode = () => {
|
|||
onSuccess: (data) => {
|
||||
login(data.userId, data.apiKey, data.isAdmin, data.email, data?.firstName, data?.lastName);
|
||||
notification.showNotification('Login successful', 'success');
|
||||
Clarity.identify(data.userId, data.apiKey);
|
||||
},
|
||||
onError: (error) => {
|
||||
notification.showNotification(
|
||||
|
|
|
|||
Loading…
Reference in a new issue