Analytics Events Reference
Complete reference for all analytics events tracked throughout the AquaGen web application. Events are sent to configured providers (Google Analytics, Firebase, MixPanel) for user behavior analysis and product insights.
Overview
AquaGen tracks user interactions across the application to understand usage patterns, identify issues, and improve the product experience.
Location: libs/shared/src/enums/analyticsEnum.js
Service: libs/shared/src/services/analytics/analyticsService.js
Usage:
import { AnalyticEvents } from '@aquagen-mf-webapp/shared/enums';
import { AnalyticsService } from '@aquagen-mf-webapp/shared/services';
AnalyticsService.sendEvent(AnalyticEvents.EVENT_NAME, { /* payload */ });
Analytics Providers
| Provider | Purpose |
|---|---|
| Google Analytics | Web traffic and user flow analysis |
| Firebase Analytics | Mobile and web event tracking |
| MixPanel | Advanced user behavior analytics |
const AnalyticsServiceProviders = {
GA: 'GA',
FIREBASE: 'FIREBASE',
MIX_PANEL: 'MIX_PANEL',
};
Events by Feature
Global Events
Events that can be triggered from any page or component.
| Event | Trigger | Payload |
|---|---|---|
SIGN_OUT_USER | User clicks sign out from profile menu | { loginType: string } |
PAGE_VIEW | Any page/route is loaded | {} (auto-tracks page path) |
REPORT_ISSUE_CLICK | User clicks "Report Issue" in profile menu | {} |
Example:
// Sign out tracking
AnalyticsService.sendEvent(AnalyticEvents.SIGN_OUT_USER, {
loginType: 'google_sso'
});
// Page view (third param enables automatic path tracking)
AnalyticsService.sendEvent(AnalyticEvents.PAGE_VIEW, {}, true);
Authentication - Default Login
Username and password based authentication flow.
| Event | Trigger | Payload |
|---|---|---|
DEFAULT_LOGIN_CLICK | User clicks "Login" button | { username: string } |
DEFAULT_LOGIN_SUCCESS | Login API returns success | { loginType: string } |
DEFAULT_LOGIN_ERROR | Login fails (invalid credentials) | { username: string } |
Example:
// On login button click
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_CLICK, {
username: 'john.doe@company.com'
});
// On successful login
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_SUCCESS, {
loginType: LocalDBInstance.getItem(LocalDBKeys.loginType)
});
// On login failure
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_ERROR, {
username: 'john.doe@company.com'
});
Authentication - OTP Login
Phone number + One-Time Password based authentication.
| Event | Trigger | Payload |
|---|---|---|
SEND_OTP_CLICK | User clicks "Send OTP" button | {} |
SEND_OTP_ERROR | OTP sending fails | { phNumber: string } |
OTP_LOGIN_CLICK | User clicks "Verify" after entering OTP | { phNumber: string } |
RESEND_OTP | User clicks "Resend OTP" link | {} |
OTP_LOGIN_ERROR | OTP verification fails | { phNumber: string } |
Example:
// OTP verification attempt
AnalyticsService.sendEvent(AnalyticEvents.OTP_LOGIN_CLICK, {
phNumber: '+91-9876543210'
});
// OTP verification failed
AnalyticsService.sendEvent(AnalyticEvents.OTP_LOGIN_ERROR, {
phNumber: '+91-9876543210'
});
Authentication - SSO Login
Google and Microsoft Single Sign-On flows.
| Event | Trigger | Payload |
|---|---|---|
GOOGLE_SSO_BUTTON_CLICK | User clicks "Sign in with Google" | {} |
MICROSOFT_SSO_BUTTON_CLICK | User clicks "Sign in with Microsoft" | {} |
GOOGLE_SSO_LOGIN_SUCCESS | Google OAuth completes successfully | { email, username, userId } |
MICROSOFT_SSO_LOGIN_SUCCESS | Microsoft OAuth completes successfully | { email, username, userId } |
SSO_LOGIN_ERROR | SSO authentication fails | {} |
Example:
// Google SSO success
AnalyticsService.sendEvent(AnalyticEvents.GOOGLE_SSO_LOGIN_SUCCESS, {
email: 'user@gmail.com',
username: 'John Doe',
userId: 'usr_12345'
});
// Microsoft SSO success
AnalyticsService.sendEvent(AnalyticEvents.MICROSOFT_SSO_LOGIN_SUCCESS, {
email: 'user@company.com',
username: 'John Doe',
userId: 'usr_67890'
});
Water Flow Monitoring
/monitoring/source_category/* - Water flow tracking and analysis.
| Event | Trigger | Payload |
|---|---|---|
FLOW_DATE_CHANGE | User changes date/date-range | { params: { type, date1, date2? } } |
FLOW_LINE_GRAPH_TOGGLE | User toggles line graph visibility | {} |
FLOW_SEE_UNITS_INFO_CLICK | User clicks "See Units Info" | { categoryId: string } |
FLOW_INDIVIDUAL_UNIT_CLICK | User clicks a specific flow meter card | { unitName: string } |
FLOW_UNIT_PAGE_UNIT_CHANGE | User switches unit in dropdown | { unitId, unitName } |
FLOW_PIE_CHART_SELECTION | User clicks pie chart segment | { unitName, categoryId, value } |
FLOW_RATE_GRAPH_TOGGLE | User toggles flow volume/rate view | { currentViewType, newViewType } |
FLOW_CATEGORY_DRAG_END | User finishes dragging category card | {} |
FLOW_REARRANGE_SAVE_CLICK | User saves rearranged categories | {} |
FLOW_REARRANGE_TOGGLE_CLICK | User clicks rearrange mode toggle | {} |
FLOW_FILTER_APPLY | User applies a filter | { filter: string } |
Date Type Values: 'DAY' | 'WEEK' | 'MONTH' | 'CUSTOM'
Example:
// Date change tracking
AnalyticsService.sendEvent(AnalyticEvents.FLOW_DATE_CHANGE, {
params: {
type: 'WEEK',
date1: '01/04/2026',
date2: '07/04/2026'
}
});
// Pie chart selection
AnalyticsService.sendEvent(AnalyticEvents.FLOW_PIE_CHART_SELECTION, {
unitName: 'Inlet Flow Meter',
categoryId: 'intake_raw_water',
value: 15420
});
// View type toggle
AnalyticsService.sendEvent(AnalyticEvents.FLOW_RATE_GRAPH_TOGGLE, {
currentViewType: 'VOLUME',
newViewType: 'RATE'
});
Compare Units
/monitoring/source_category/compare_units - Side-by-side unit comparison.
| Event | Trigger | Payload |
|---|---|---|
COMPARE_UNITS_BUTTON_CLICK | User clicks "Compare Units" button | {} |
COMPARE_SELECTION_DETAILS | User finalizes unit selection | {} |
COMPARE_TYPE | User changes comparison mode | { compareType: string } |
Example:
// Comparison type change
AnalyticsService.sendEvent(AnalyticEvents.COMPARE_TYPE, {
compareType: 'OVERLAY'
});
Reports
/reports - Report generation and download.
| Event | Trigger | Payload |
|---|---|---|
REPORTS_DOWNLOAD | User downloads a report | {} (report config) |
PREVIEW_REPORT | User previews a report | {} |
Alerts
/alerts/* - Alert management and notifications.
| Event | Trigger | Payload |
|---|---|---|
ALERTS_ICON_CLICK | User clicks alerts bell icon in header | {} |
ALERTS_CLICK | User clicks a specific alert item | {} |
ALERTS_PAGE_VIEW | Alerts page is loaded | {} |
ALERT_ASSIGNED | User assigns an alert to team member | {} |
ALERT_RESOLVED | User marks alert as resolved | {} |
ALERTS_DOWNLOAD | User downloads alerts report | { startDate, endDate, ... } |
Example:
// Alerts download
AnalyticsService.sendEvent(AnalyticEvents.ALERTS_DOWNLOAD, {
startDate: '01/04/2026',
endDate: '30/04/2026',
format: 'PDF'
});
Account Management
/manage_account/* - Account configuration and settings.
General
| Event | Trigger | Payload |
|---|---|---|
MANAGE_ACCOUNT_CLICK | User clicks "Manage Account" from profile menu | {} |
Account Info (/manage_account/account_info)
| Event | Trigger | Payload |
|---|---|---|
ACCOUNT_INFO_CLICK | User clicks "Account Info" card | {} |
ACCOUNT_INFO_EDIT_OPTION_CHANGE | User toggles edit mode | {} |
ACCOUNT_INFO_SAVE_CLICK | User clicks "Save" | {} |
ACCOUNT_INFO_CANCEL_CLICK | User clicks "Cancel" | {} |
ACCOUNT_INFO_ALERT_CHECKBOX_CHANGE | User toggles alert notification checkbox | {} |
ACCOUNT_INFO_VALUE_CHANGE | User modifies any field value | {} |
Account Settings (/manage_account/account_settings)
| Event | Trigger | Payload |
|---|---|---|
ACCOUNT_SETTINGS_CLICK | User clicks "Account Settings" card | {} |
ACCOUNT_SETTINGS_ICON_CHANGE | User changes account/company icon | {} |
ACCOUNT_SETTINGS_UPDATE | Settings successfully saved to server | {} |
ACCOUNT_SETTINGS_SAVE_CLICK | User clicks "Save" button | {} |
ACCOUNT_SETTINGS_CANCEL_CLICK | User clicks "Cancel" button | {} |
Manual Node Entry (/manage_account/manual_node_entry)
| Event | Trigger | Payload |
|---|---|---|
MANUAL_NODE_ENTRY_CARD_CLICK | User clicks "Manual Node Entry" card | {} |
MANUAL_NODE_VALUE_CHANGE_SAVE_CLICK | User saves manual meter readings | string[] (updated node IDs) |
Example:
// Manual node entry save
AnalyticsService.sendEvent(
AnalyticEvents.MANUAL_NODE_VALUE_CHANGE_SAVE_CLICK,
['node_001', 'node_002', 'node_003']
);
Water Mass Balance
/water_balance/graph - Water balance visualization.
| Event | Trigger | Payload |
|---|---|---|
WATER_BALANCE_DATE_CHANGE | User changes date selection | {} |
Dashboard / Home Page
/dashboard - Main dashboard with summary widgets.
| Event | Trigger | Payload |
|---|---|---|
DASHBOARD_DATE_CHANGE | User toggles Today/Yesterday | { dashboardTrendGraphType: 'Today' | 'Yesterday' } |
DASHBOARD_CARD_CLICK | User clicks any summary card | { page: string } |
DASHBOARD_DETAILS_CLICK | User clicks "View Details" on card | { page: string } |
DASHBOARD_ALERT_CLICK | User clicks alert in alerts list | { categoryId, standardCategoryId } |
DASHBOARD_ENERGY_ALERT_EXPAND | User expands/collapses energy alerts | { isOpen: boolean, alertCount: number } |
DASHBOARD_ENERGY_ALERT_CLICK | User clicks a specific energy alert | { alertType, importanceLevel, title } |
Page Values: 'STOCK' | 'QUALITY' | 'BOREWELL' | 'FLOW' | pie chart type ID
Example:
// Dashboard card click
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_CARD_CLICK, {
page: DashboardEnum.GraphCardType.STOCK
});
// Dashboard date toggle
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_DATE_CHANGE, {
dashboardTrendGraphType: 'Yesterday'
});
// Alert click
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_ALERT_CLICK, {
categoryId: 'intake_raw_water',
standardCategoryId: 'SOURCE_CATEGORY'
});
// Energy alert expand
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_ENERGY_ALERT_EXPAND, {
isOpen: true,
alertCount: 5
});
AquaGPT (Legacy AI Chat)
/aquagpt - Legacy AI assistant interface.
| Event | Trigger | Payload |
|---|---|---|
AQUAGPT_NEW_CHAT | User clicks "New Chat" button | {} |
AQUAGPT_OLD_CHAT_CLICK | User clicks previous conversation in sidebar | {} |
AQUAGPT_SEND | User sends message to AquaGPT | { prompt: string } |
AQUAGPT_LIKE | User likes/dislikes response | { isLiked: boolean, prompt: string } |
Example:
// Send message
AnalyticsService.sendEvent(AnalyticEvents.AQUAGPT_SEND, {
prompt: 'What is my water consumption this month?'
});
// Feedback on response
AnalyticsService.sendEvent(AnalyticEvents.AQUAGPT_LIKE, {
isLiked: true,
prompt: 'What is my water consumption this month?'
});
AI Assistant (New)
/ai - New AI assistant interface with enhanced features.
| Event | Trigger | Payload |
|---|---|---|
AI_NEW_CHAT_CLICK | User clicks "New Chat" | {} |
AI_SEND_CLICK | User sends message | { userQuery: string } |
AI_RESPONSE_LIKE_CLICK | User clicks thumbs up | { messageId, isLiked, content } |
AI_RESPONSE_DISLIKE_CLICK | User clicks thumbs down | { messageId, isLiked, content } |
AI_RESPONSE_COPY_CLICK | User clicks copy button | {} |
AI_STOP_CLICK | User stops response generation | {} |
AI_CONVERSATION_STARTER_CLICK | User clicks suggested prompt | { prompt: string } |
Example:
// Send AI message
AnalyticsService.sendEvent(AnalyticEvents.AI_SEND_CLICK, {
userQuery: 'Show me water leakage trends for last week'
});
// Response feedback
AnalyticsService.sendEvent(AnalyticEvents.AI_RESPONSE_LIKE_CLICK, {
messageId: 'msg_12345',
isLiked: true,
content: 'Here is the water leakage trend...'
});
// Conversation starter
AnalyticsService.sendEvent(AnalyticEvents.AI_CONVERSATION_STARTER_CLICK, {
prompt: 'What are my top water consuming areas?'
});
Rain Water Intelligence (RWI)
/rwi - Rainwater harvesting analytics.
| Event | Trigger | Payload |
|---|---|---|
RWI_RAINFALL_TREND_TAB_VIEW | User views "Rainfall Trend" tab | {} |
RWI_EFFICIENCY_SAVINGS_TAB_VIEW | User views "Efficiency & Savings" tab | {} |
RWI_EFFICIENCY_DATE_CHANGE | User changes date on efficiency tab | {} |
RWI_RAINFALL_TREND_DATE_CHANGE | User changes date on rainfall tab | {} |
Example:
// Tab view tracking
AnalyticsService.sendEvent(
AnalyticEvents.RWI_RAINFALL_TREND_TAB_VIEW,
{},
true // Enable page tracking
);
UWI / Aqua Recycle (SCADA)
/uwi - Used Water Intelligence / Water treatment plant monitoring.
| Event | Trigger | Payload |
|---|---|---|
UWI_TAB_SWITCH | User switches between tabs | { tabIndex: number, tabName: string } |
UWI_DASHBOARD_SESSION_TIME | User leaves UWI page | { durationMs: number } |
UWI_REMOTE_CONTROL_OPENED | User opens remote control panel | {} |
Example:
// Tab switch
AnalyticsService.sendEvent(AnalyticEvents.UWI_TAB_SWITCH, {
tabIndex: 2,
tabName: 'Energy'
});
// Session duration (on unmount)
AnalyticsService.sendEvent(AnalyticEvents.UWI_DASHBOARD_SESSION_TIME, {
durationMs: 145000 // 2 minutes 25 seconds
});
Leadership / Executive Dashboard
/leadership - Executive summary dashboard.
| Event | Trigger | Payload |
|---|---|---|
LEADERSHIP_DATE_TYPE_CHANGE | User changes date type (Day/Week/Month) | {} |
LEADERSHIP_DATE_CHANGE | User changes selected date | {} |
LEADERSHIP_REFRESH_CLICK | User clicks refresh button | {} |
LEADERSHIP_REDIRECT | User navigates to detailed view | { industryId: string } |
Example:
// Redirect to industry details
AnalyticsService.sendEvent(AnalyticEvents.LEADERSHIP_REDIRECT, {
industryId: 'plant_bangalore'
});
RO Efficiency
/ro_efficiency - Reverse Osmosis plant efficiency monitoring.
| Event | Trigger | Payload |
|---|---|---|
RO_EFFICIENCY_DATE_CHANGE | User changes date selection | { type, date1, date2 } |
RO_EFFICIENCY_PLANT_SELECT | User selects different RO plant | { plantIndex, plantName } |
RO_EFFICIENCY_TAB_CHANGE | User switches between tabs | { tab: string } |
RO_EFFICIENCY_INSIGHTS_TOGGLE | User expands/collapses insights | { action: 'open' | 'close' } |
RO_EFFICIENCY_DOWNLOAD_REPORT | User downloads report | { plantName, type, date1, date2 } |
RO_EFFICIENCY_LOG_ACTIVITY | User logs maintenance entry | { activityType, date } |
RO_EFFICIENCY_ALERT_TAB_CHANGE | User switches alert tabs | { tab: string } |
Example:
// Plant selection
AnalyticsService.sendEvent(AnalyticEvents.RO_EFFICIENCY_PLANT_SELECT, {
plantIndex: 2,
plantName: 'RO Plant - Block B'
});
// Report download
AnalyticsService.sendEvent(AnalyticEvents.RO_EFFICIENCY_DOWNLOAD_REPORT, {
plantName: 'RO Plant - Block B',
type: 'MONTH',
date1: '01/04/2026',
date2: '30/04/2026'
});
// Log activity
AnalyticsService.sendEvent(AnalyticEvents.RO_EFFICIENCY_LOG_ACTIVITY, {
activityType: 'MEMBRANE_CLEANING',
date: '15/04/2026'
});
Sidebar Navigation
Main app sidebar navigation tracking.
| Event | Trigger | Payload |
|---|---|---|
SIDEBAR_NAV_ITEM_CLICK | User clicks any nav item | { routeId, displayName, permissionId, isLocked, isSubMenu } |
SIDEBAR_ACCORDION_TOGGLE | User expands/collapses accordion | { routeId, displayName, permissionId, isLocked, isExpanded } |
Example:
// Navigation item click
AnalyticsService.sendEvent(AnalyticEvents.SIDEBAR_NAV_ITEM_CLICK, {
routeId: 'METRICS',
displayName: 'Monitoring',
permissionId: 'WATER_MONITORING',
isLocked: false,
isSubMenu: false
});
// Accordion toggle
AnalyticsService.sendEvent(AnalyticEvents.SIDEBAR_ACCORDION_TOGGLE, {
routeId: 'EFFICIENCY',
displayName: 'Efficiency',
permissionId: 'EFFICIENCY',
isLocked: false,
isExpanded: true
});
Leakage Detection
Water leakage detection and analysis features.
| Event | Trigger | Payload |
|---|---|---|
LEAKAGE_LEARN_MORE_CLICK | User clicks "Learn More" on leakage card | {} |
LEAKAGE_BAR_GRAPH_ICON_CLICK | User clicks bar graph marker | {} |
LEAKAGE_LINE_GRAPH_ICON_CLICK | User clicks line graph marker | {} |
LEAKAGE_VIEW_ALERT_CLICK | User clicks to view leakage alert | {} |
Contact Sales / Upgrade
Feature upgrade and sales contact tracking.
| Event | Trigger | Payload |
|---|---|---|
CONTACT_SALES_CLICK_FOR_UPGRADE | User clicks upgrade prompt for locked features | {} |
Deprecated Events
These events are no longer actively triggered but kept for backward compatibility.
| Event | Status | Replacement |
|---|---|---|
FLOW_ACCOUNT_SETTING_REDITECT | Deprecated | - |
FLOW_TAB_CHANGE | Deprecated | - |
CONSUMPTION_TREND | Deprecated | FLOW_DATE_CHANGE |
MONITORING_FLOW_RATE_TOGGLE | Deprecated | FLOW_RATE_GRAPH_TOGGLE |
MONITORING_SEARCH_OPTION_CLICK | Deprecated | - |
MONITORING_SEARCH_ICON_CLICK | Deprecated | - |
Complete Events Index
| Category | Events Count |
|---|---|
| Global | 3 |
| Authentication - Default | 3 |
| Authentication - OTP | 5 |
| Authentication - SSO | 5 |
| Water Flow Monitoring | 11 |
| Compare Units | 3 |
| Reports | 2 |
| Alerts | 6 |
| Account Management | 12 |
| Water Mass Balance | 1 |
| Dashboard | 6 |
| AquaGPT (Legacy) | 4 |
| AI Assistant | 7 |
| Rain Water Intelligence | 4 |
| UWI / Aqua Recycle | 3 |
| Leadership Dashboard | 4 |
| RO Efficiency | 7 |
| Sidebar Navigation | 2 |
| Leakage Detection | 4 |
| Contact Sales | 1 |
| Total | 93 |
Best Practices
1. Always Include Relevant Context
// ❌ Bad - No context
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_CARD_CLICK, {});
// ✅ Good - Includes which card was clicked
AnalyticsService.sendEvent(AnalyticEvents.DASHBOARD_CARD_CLICK, {
page: DashboardEnum.GraphCardType.STOCK
});
2. Track User Journey Completions
// Track start
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_CLICK, { username });
// Track success
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_SUCCESS, { loginType });
// Track failure
AnalyticsService.sendEvent(AnalyticEvents.DEFAULT_LOGIN_ERROR, { username });
3. Use Page View for Route Changes
useEffect(() => {
AnalyticsService.sendEvent(AnalyticEvents.PAGE_VIEW, {}, true);
}, []);
4. Track Session Duration for Key Pages
useEffect(() => {
const startTime = Date.now();
return () => {
AnalyticsService.sendEvent(AnalyticEvents.UWI_DASHBOARD_SESSION_TIME, {
durationMs: Date.now() - startTime
});
};
}, []);
Next Steps
- Review Enums & Configuration for other enum references
- Check API Services for AnalyticsService implementation
- See Dashboard for dashboard event usage examples
Last Updated: April 2026