TP-23684 | added clickstream events (#203)

Need to release in night, hence merging with only 1 aprooval.
This commit is contained in:
Ishan Srivastava
2023-04-04 00:36:51 +05:30
committed by GitHub Enterprise
parent 0e4189a6c8
commit 6e1b1ce0a5
11 changed files with 185 additions and 100 deletions

View File

@@ -14,7 +14,8 @@ import axiosInstance, {
getErrorMessage,
} from '../components/utlis/apiHelper';
import { toast } from '../../RN-UI-LIB/src/components/toast';
import { LocalStorageKeys } from '../common/Constants';
import { CLICKSTREAM_EVENT_NAMES } from '../common/Constants';
import { addClickstreamEvent } from "../services/clickstreamEventService";
export interface GeneratePaymentPayload {
alternateContactNumber: string;
@@ -92,6 +93,10 @@ export const generatePaymentLinkAction =
}
})
.catch(err => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_SEND_PAYMENT_LINK_FAILED, {amount: payload.customAmount,lan : payload.loanAccountNumber, phoneNumber: payload.alternateContactNumber })
if(err.response.status === 429) {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_SEND_PAYMENT_LINK_FAILED_LIMIT_REACHED, {amount: payload.customAmount,lan : payload.loanAccountNumber, phoneNumber: payload.alternateContactNumber })
}
toast({
type: 'error',
text1: ToastMessages.PAYMENT_LINK_ERROR,

View File

@@ -52,98 +52,128 @@ export const ClickstreamAPIToMonitor = {
export const CLICKSTREAM_EVENT_NAMES = {
// GENERIC
AV_NATIVE_BACK_PRESSED : {name: 'AV_NATIVE_BACK_PRESSED', description: 'Native back button pressed'},
AV_NATIVE_HOME_PRESSED : {name: 'AV_NATIVE_HOME_PRESSED', description: 'Native home button pressed'},
AV_APP_FOREGROUND : {name: 'AV_APP_FOREGROUND', description: 'App has come to foreground'},
AV_APP_BACKGROUND : {name: 'AV_APP_BACKGROUND', description: 'App went to background'},
AV_NATIVE_BACK_PRESSED : {name: 'FA_NATIVE_BACK_PRESSED', description: 'Native back button pressed'},
AV_NATIVE_HOME_PRESSED : {name: 'FA_NATIVE_HOME_PRESSED', description: 'Native home button pressed'},
AV_APP_FOREGROUND : {name: 'FA_APP_FOREGROUND', description: 'App has come to foreground'},
AV_APP_BACKGROUND : {name: 'FA_APP_BACKGROUND', description: 'App went to background'},
AV_ERROR_PAGE_LOADED : {name: 'ERROR_PAGE_LOADED', description: 'Error page loaded'},
AV_NETWORK_STATUS_CHANGE: {name: 'AV_NETWORK_STATUS_CHANGE', description: 'Offline/online status change'},
AV_NETWORK_STATUS_CHANGE: {name: 'FA_NETWORK_STATUS_CHANGE', description: 'Offline/online status change'},
FA_ADD_TO_VISIT_PLAN_CTA: { name: 'FA_ADD_TO_VISIT_PLAN_CTA', description: 'Cases pinned' },
FA_REMOVE_FROM_VISIT_PLAN_CTA: { name: 'FA_REMOVE_FROM_VISIT_PLAN_CTA', description: 'Cases unpinned' },
FA_VISIT_PLAN_UPDATED: { name: 'FA_VISIT_PLAN_UPDATED', description: 'Updated cases pinned' },
// Login screen
AV_LOGIN_SCREEN_LOAD: {name:'AV_LOGIN_SCREEN_LOAD', description: 'Login page loaded'},
AV_LOGIN_SCREEN_NUMBER_INPUT: {name:'AV_LOGIN_SCREEN_NUMBER_INPUT', description: 'User entered 10 digits'},
AV_LOGIN_SCREEN_SEND_OTP_CLICKED: {name:'AV_LOGIN_SCREEN_SEND_OTP_CLICKED', description: 'Send OTP CTA clicked'},
AV_LOGIN_SCREEN_SEND_OTP_API_SUCCESS: {name:'AV_LOGIN_SCREEN_SEND_OTP_API_SUCCESS', description: 'Send OTP API successful'},
AV_LOGIN_SCREEN_SEND_OTP_API_FAILED: {name:'AV_LOGIN_SCREEN_SEND_OTP_API_FAILED', description: 'Send OTP API failed'},
AV_LOGIN_SCREEN_LOAD: {name:'FA_LOGIN_SCREEN_LOAD', description: 'Login page loaded'},
AV_LOGIN_SCREEN_NUMBER_INPUT: {name:'FA_LOGIN_SCREEN_NUMBER_INPUT', description: 'User entered 10 digits'},
AV_LOGIN_SCREEN_SEND_OTP_CLICKED: {name:'FA_LOGIN_SCREEN_SEND_OTP_CLICKED', description: 'Send OTP CTA clicked'},
AV_LOGIN_SCREEN_SEND_OTP_API_SUCCESS: {name:'FA_LOGIN_SCREEN_SEND_OTP_API_SUCCESS', description: 'Send OTP API successful'},
AV_LOGIN_SCREEN_SEND_OTP_API_FAILED: {name:'FA_LOGIN_SCREEN_SEND_OTP_API_FAILED', description: 'Send OTP API failed'},
// OTP screen
AV_OTP_SCREEN_LOAD: {name:'AV_OTP_SCREEN_LOAD', description: 'OTP screen loaded'},
AV_OTP_SCREEN_OTP_INPUT: {name:'AV_OTP_SCREEN_OTP_INPUT', description: 'User entered 4 digit OTP'},
AV_OTP_SCREEN_VERIFY_OTP_CLICKED: {name:'AV_OTP_SCREEN_VERIFY_OTP_CLICKED', description: 'Verify OTP CTA Clicked'},
AV_OTP_SCREEN_BACK_BUTTON_CLICKED: {name:'AV_OTP_SCREEN_BACK_BUTTON_CLICKED', description: 'OTP Screen back CTA clicked'},
AV_OTP_SCREEN_VERIFY_OTP_API_SUCCESS: {name:'AV_OTP_SCREEN_VERIFY_OTP_API_SUCCESS', description: 'OTP verify API successful'},
AV_OTP_SCREEN_VERIFY_OTP_API_FAILED: {name:'AV_OTP_SCREEN_VERIFY_OTP_API_FAILED', description: 'OTP verify API failed'},
AV_OTP_SCREEN_LOAD: {name:'FA_OTP_SCREEN_LOAD', description: 'OTP screen loaded'},
AV_OTP_SCREEN_OTP_INPUT: {name:'FA_OTP_SCREEN_OTP_INPUT', description: 'User entered 4 digit OTP'},
AV_OTP_SCREEN_VERIFY_OTP_CLICKED: {name:'FA_OTP_SCREEN_VERIFY_OTP_CLICKED', description: 'Verify OTP CTA Clicked'},
AV_OTP_SCREEN_BACK_BUTTON_CLICKED: {name:'FA_OTP_SCREEN_BACK_BUTTON_CLICKED', description: 'OTP Screen back CTA clicked'},
AV_OTP_SCREEN_VERIFY_OTP_API_SUCCESS: {name:'FA_OTP_SCREEN_VERIFY_OTP_API_SUCCESS', description: 'OTP verify API successful'},
AV_OTP_SCREEN_VERIFY_OTP_API_FAILED: {name:'FA_OTP_SCREEN_VERIFY_OTP_API_FAILED', description: 'OTP verify API failed'},
// Case list
AV_CASE_LIST_LOAD : {name: 'AV_CASE_LIST_LOAD', description: 'Cases list loaded'},
AV_CASE_LIST_CASE_CLICKED : {name: 'AV_CASE_LIST_CASE_CLICKED', description: 'Case clicked'},
AV_CASE_LIST_PULLED_TO_REFRESH : {name: 'AV_CASE_LIST_PULLED_TO_REFRESH', description: 'Case list pulled to refresh'},
AV_CASE_LIST_TODO_ITEM_SELECTED : {name: 'AV_CASE_LIST_TODO_ITEM_SELECTED', description: 'Case list todo item selected'},
AV_CASE_LIST_TODO_ITEM_UNSELECTED : {name: 'AV_CASE_LIST_TODO_ITEM_UNSELECTED', description: 'Case list todo iten unselected'},
AV_CASE_LIST_CASE_SELECTED : {name: 'AV_CASE_LIST_CASE_SELECTED', description: 'Other cases selected'},
AV_CASE_LIST_CASE_UNSELECTED : {name: 'AV_CASE_LIST_CASE_UNSELECTED', description: 'Other cases unselected'},
AV_CASE_LIST_PROCEED_BUTTON_CLICKED : {name: 'AV_CASE_LIST_PROCEED_BUTTON_CLICKED', description: 'Case list proceed CTA clicked'},
AV_CASE_LIST_REMOVE_BUTTON_CLICKED : {name: 'AV_CASE_LIST_REMOVE_BUTTON_CLICKED', description: 'Case list remove CTA clicked'},
AV_CASE_LIST_REMOVE_API_SUCCESS : {name: 'AV_CASE_LIST_REMOVE_API_SUCCESS', description: 'Remove todolist API successful'},
AV_CASE_LIST_REMOVE_API_FAILED: {name: 'AV_CASE_LIST_REMOVE_API_FAILED', description: 'Remove todolist API failed'},
AV_CASE_LIST_FILTER_BUTTON_CLICKED : {name: 'AV_CASE_LIST_FILTER_BUTTON_CLICKED', description: 'Case list filter CTA clicked'},
AV_CASE_LIST_SEARCH_QUERY_CHANGED : {name: 'AV_CASE_LIST_SEARCH_QUERY_CHANGED', description: 'Search filter query changed'},
AV_CASE_LIST_TAB_CHANGED : {name: 'AV_CASE_LIST_TAB_CHANGED', description: 'Case list tab changed'},
AV_CASE_LIST_AGENT_PROFILE_CLICKED : {name: 'AV_CASE_LIST_AGENT_PROFILE_CLICKED', description: 'Case list agent profile CTA clicked'},
AV_CASE_LIST_LOAD : {name: 'FA_CASE_LIST_LOAD', description: 'Cases list loaded'},
AV_CASE_LIST_CASE_CLICKED : {name: 'FA_CASE_LIST_CASE_CLICKED', description: 'Case clicked'},
AV_CASE_LIST_PULLED_TO_REFRESH : {name: 'FA_CASE_LIST_PULLED_TO_REFRESH', description: 'Case list pulled to refresh'},
AV_CASE_LIST_TODO_ITEM_SELECTED : {name: 'FA_CASE_LIST_TODO_ITEM_SELECTED', description: 'Case list todo item selected'},
AV_CASE_LIST_TODO_ITEM_UNSELECTED : {name: 'FA_CASE_LIST_TODO_ITEM_UNSELECTED', description: 'Case list todo iten unselected'},
AV_CASE_LIST_CASE_SELECTED : {name: 'FA_CASE_LIST_CASE_SELECTED', description: 'Other cases selected'},
AV_CASE_LIST_CASE_UNSELECTED : {name: 'FA_CASE_LIST_CASE_UNSELECTED', description: 'Other cases unselected'},
AV_CASE_LIST_PROCEED_BUTTON_CLICKED : {name: 'FA_CASE_LIST_PROCEED_BUTTON_CLICKED', description: 'Case list proceed CTA clicked'},
AV_CASE_LIST_REMOVE_BUTTON_CLICKED : {name: 'FA_CASE_LIST_REMOVE_BUTTON_CLICKED', description: 'Case list remove CTA clicked'},
AV_CASE_LIST_REMOVE_API_SUCCESS : {name: 'FA_CASE_LIST_REMOVE_API_SUCCESS', description: 'Remove todolist API successful'},
AV_CASE_LIST_REMOVE_API_FAILED: {name: 'FA_CASE_LIST_REMOVE_API_FAILED', description: 'Remove todolist API failed'},
AV_CASE_LIST_FILTER_BUTTON_CLICKED : {name: 'FA_CASE_LIST_FILTER_BUTTON_CLICKED', description: 'Case list filter CTA clicked'},
AV_CASE_LIST_SEARCH_QUERY_CHANGED : {name: 'FA_CASE_LIST_SEARCH_QUERY_CHANGED', description: 'Search filter query changed'},
AV_CASE_LIST_TAB_CHANGED : {name: 'FA_CASE_LIST_TAB_CHANGED', description: 'Case list tab changed'},
AV_CASE_LIST_AGENT_PROFILE_CLICKED : {name: 'FA_CASE_LIST_AGENT_PROFILE_CLICKED', description: 'Case list agent profile CTA clicked'},
// TODO LIST
AV_TODO_LIST_LOAD : {name: 'AV_TODO_LIST_LOAD', description: 'Todo list confirmation screen loaded'},
AV_TODO_LIST_CASE_DELETED : {name: 'AV_TODO_LIST_CASE_DELETED', description: 'Todo list case deleted'},
AV_TODO_LIST_SUBMIT_CLICKED : {name: 'AV_TODO_LIST_SUBMIT_CLICKED', description: 'Submit CTA clicked'},
AV_TODO_LIST_SUBMIT_SUCCESS : {name: 'AV_TODO_LIST_SUBMIT_SUCCESS', description: 'Todo list submit API successful'},
AV_TODO_LIST_SUBMIT_FAILED : {name: 'AV_TODO_LIST_SUBMIT_FAILED', description: 'Todo list submit API failed'},
AV_TODO_LIST_BACK_CLICKED : {name: 'AV_TODO_LIST_BACK_CLICKED', description: 'Back CTA clicked'},
AV_TODO_LIST_LOAD : {name: 'FA_TODO_LIST_LOAD', description: 'Todo list confirmation screen loaded'},
AV_TODO_LIST_CASE_DELETED : {name: 'FA_TODO_LIST_CASE_DELETED', description: 'Todo list case deleted'},
AV_TODO_LIST_SUBMIT_CLICKED : {name: 'FA_TODO_LIST_SUBMIT_CLICKED', description: 'Submit CTA clicked'},
AV_TODO_LIST_SUBMIT_SUCCESS : {name: 'FA_TODO_LIST_SUBMIT_SUCCESS', description: 'Todo list submit API successful'},
AV_TODO_LIST_SUBMIT_FAILED : {name: 'FA_TODO_LIST_SUBMIT_FAILED', description: 'Todo list submit API failed'},
AV_TODO_LIST_BACK_CLICKED : {name: 'FA_TODO_LIST_BACK_CLICKED', description: 'Back CTA clicked'},
//Filters
AV_FILTERS_PAGE_LOAD : {name: 'AV_FILTERS_PAGE_LOAD', description: 'Filters screen loaded'},
AV_FILTERS_TAB_CLICKED : {name: 'AV_FILTERS_TAB_CLICKED', description: 'Filter tab clicked'},
AV_FILTERS_OPTIONS_SELECTED : {name: 'AV_FILTERS_OPTIONS_SELECTED', description: 'Filter options selected'},
AV_FILTERS_CLOSE_CLICKED : {name: 'AV_FILTERS_CLOSE_CLICKED', description: 'Filters close CTA clicked'},
AV_FILTERS_APPLY_CLICKED : {name: 'AV_FILTERS_APPLY_CLICKED', description: 'Filters apply CTA clicked'},
AV_FILTERS_CLEAR_CLICKED : {name: 'AV_FILTERS_CLEAR_CLICKED', description: 'Filters clear CTA clicked'},
AV_FILTERS_OPTION_SEARCH : {name: 'AV_FILTERS_OPTION_SEARCH', description: 'Filters options search query'},
AV_FILTERS_PAGE_LOAD : {name: 'FA_FILTERS_PAGE_LOAD', description: 'Filters screen loaded'},
AV_FILTERS_TAB_CLICKED : {name: 'FA_FILTERS_TAB_CLICKED', description: 'Filter tab clicked'},
AV_FILTERS_OPTIONS_SELECTED : {name: 'FA_FILTERS_OPTIONS_SELECTED', description: 'Filter options selected'},
AV_FILTERS_CLOSE_CLICKED : {name: 'FA_FILTERS_CLOSE_CLICKED', description: 'Filters close CTA clicked'},
AV_FILTERS_APPLY_CLICKED : {name: 'FA_FILTERS_APPLY_CLICKED', description: 'Filters apply CTA clicked'},
AV_FILTERS_CLEAR_CLICKED : {name: 'FA_FILTERS_CLEAR_CLICKED', description: 'Filters clear CTA clicked'},
AV_FILTERS_OPTION_SEARCH : {name: 'FA_FILTERS_OPTION_SEARCH', description: 'Filters options search query'},
//Case Details
AV_CASE_DETAILS_PAGE_LOADED : {name: 'AV_CASE_DETAILS_PAGE_LOADED', description: 'Case details page loaded'},
AV_CASE_DETAILS_PULL_TO_REFRESH : {name: 'AV_CASE_DETAILS_PULL_TO_REFRESH', description: 'Case details page pulled to refresh'},
AV_CASE_DETAILS_CALL_CUSTOMER_CLICKED : {name: 'AV_CASE_DETAILS_CALL_CUSTOMER_CLICKED', description: 'Call customer CTA clicked'},
AV_CASE_DETAILS_OPEN_MAPS_CLICKED : {name: 'AV_CASE_DETAILS_OPEN_MAPS_CLICKED', description: 'Open map CTA clicked'},
AV_CASE_DETAILS_ADD_FEEDBACK_CLICKED : {name: 'AV_CASE_DETAILS_ADD_FEEDBACK_CLICKED', description: 'Add feedback CTA clicked'},
AV_CASE_DETAILS_PAGE_LOADED : {name: 'FA_CASE_DETAILS_PAGE_LOADED', description: 'Case details page loaded'},
AV_CASE_DETAILS_PULL_TO_REFRESH : {name: 'FA_CASE_DETAILS_PULL_TO_REFRESH', description: 'Case details page pulled to refresh'},
AV_CASE_DETAILS_CALL_CUSTOMER_CLICKED : {name: 'FA_CASE_DETAILS_CALL_CUSTOMER_CLICKED', description: 'Call customer CTA clicked'},
AV_CASE_DETAILS_OPEN_MAPS_CLICKED : {name: 'FA_CASE_DETAILS_OPEN_MAPS_CLICKED', description: 'Open map CTA clicked'},
AV_CASE_DETAILS_ADD_FEEDBACK_CLICKED : {name: 'FA_CASE_DETAILS_ADD_FEEDBACK_CLICKED', description: 'Add feedback CTA clicked'},
//CALLING BOTTOM SHEET
AV_CALLING_BOTTOMSHEET_LOADED : {name: 'AV_CALLING_BOTTOMSHEET_LOADED', description: 'Calling bottomsheet loaded'},
AV_CALLING_BOTTOMSHEET_CLOSE_CLICKED : {name: 'AV_CALLING_BOTTOMSHEET_CLOSE_CLICKED' , description: 'Close bottomsheet CTA clicked'},
AV_CALLING_BOTTOMSHEET_CALL_VIA_PHONE_CLICKED : {name: 'AV_CALLING_BOTTOMSHEET_CALL_VIA_PHONE_CLICKED', description: 'Call via phone CTA clicked'},
AV_CALLING_BOTTOMSHEET_CALL_VIA_WHATSAPP_CLICKED : {name: 'AV_CALLING_BOTTOMSHEET_CALL_VIA_WHATSAPP_CLICKED', description: 'Call via whatsapp CTA clicked'},
AV_CALLING_BOTTOMSHEET_BEFORE_INTENT_EVENT : {name: 'AV_CALLING_BOTTOMSHEET_BEFORE_INTENT_EVENT' , description: 'Call bottomsheet before intent event'},
AV_CALLING_BOTTOMSHEET_LOADED : {name: 'FA_CALLING_BOTTOMSHEET_LOADED', description: 'Calling bottomsheet loaded'},
AV_CALLING_BOTTOMSHEET_CLOSE_CLICKED : {name: 'FA_CALLING_BOTTOMSHEET_CLOSE_CLICKED' , description: 'Close bottomsheet CTA clicked'},
AV_CALLING_BOTTOMSHEET_CALL_VIA_PHONE_CLICKED : {name: 'FA_CALLING_BOTTOMSHEET_CALL_VIA_PHONE_CLICKED', description: 'Call via phone CTA clicked'},
AV_CALLING_BOTTOMSHEET_CALL_VIA_WHATSAPP_CLICKED : {name: 'FA_CALLING_BOTTOMSHEET_CALL_VIA_WHATSAPP_CLICKED', description: 'Call via whatsapp CTA clicked'},
AV_CALLING_BOTTOMSHEET_BEFORE_INTENT_EVENT : {name: 'FA_CALLING_BOTTOMSHEET_BEFORE_INTENT_EVENT' , description: 'Call bottomsheet before intent event'},
//PROFILE PAGE
AV_PROFILE_PAGE_LOADED : {name: 'AV_PROFILE_PAGE_LOADED', description: 'Profile page loaded'},
AV_PROFILE_PAGE_LOGOUT_BUTTON_CLICKED : {name: 'AV_PROFILE_PAGE_LOGOUT_BUTTON_CLICKED', description: 'Logout CTA clicked'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_OPEN : {name: 'AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_OPEN', description: 'Logout confirmation dialog open'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLOSED : {name: 'AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLOSED', description: 'Logout confirmation dialog closed'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLICKED : {name: 'AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLICKED', description: 'Logout confirmation clicked'},
AV_PROFILE_PAGE_LOGOUT_API_SUCCESS : {name: 'AV_PROFILE_PAGE_LOGOUT_API_SUCCESS', description: 'Logout API successful'},
AV_PROFILE_PAGE_LOGOUT_API_FAILED : {name: 'AV_PROFILE_PAGE_LOGOUT_API_FAILED', description: 'Logout API failed'},
AV_PROFILE_PAGE_LOADED : {name: 'FA_PROFILE_PAGE_LOADED', description: 'Profile page loaded'},
AV_PROFILE_PAGE_LOGOUT_BUTTON_CLICKED : {name: 'FA_PROFILE_PAGE_LOGOUT_BUTTON_CLICKED', description: 'Logout CTA clicked'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_OPEN : {name: 'FA_PROFILE_PAGE_LOGOUT_CONFIRMATION_OPEN', description: 'Logout confirmation dialog open'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLOSED : {name: 'FA_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLOSED', description: 'Logout confirmation dialog closed'},
AV_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLICKED : {name: 'FA_PROFILE_PAGE_LOGOUT_CONFIRMATION_CLICKED', description: 'Logout confirmation clicked'},
AV_PROFILE_PAGE_LOGOUT_API_SUCCESS : {name: 'FA_PROFILE_PAGE_LOGOUT_API_SUCCESS', description: 'Logout API successful'},
AV_PROFILE_PAGE_LOGOUT_API_FAILED : {name: 'FA_PROFILE_PAGE_LOGOUT_API_FAILED', description: 'Logout API failed'},
//FORMS
AV_FORM_LOADED : {name: 'AV_FORM_LOADED', description: 'Form loaded'},
AV_FORM_CLOSE_CLICKED : {name: 'AV_FORM_CLOSE_CLICKED', description: 'Form close CTA clicked'},
AV_FORM_ELEMENT_CHANGED : {name: 'AV_FORM_ELEMENT_CHANGED', description: 'Form element answer changed'},
AV_FORM_NEXT_BUTTON_CLICKED : {name: 'AV_FORM_NEXT_BUTTON_CLICKED', description: 'Form next CTA clicked'},
AV_FORM_BACK_BUTTON_CLICKED : {name: 'AV_FORM_BACK_BUTTON_CLICKED', description: 'Form back CTA clicked'},
AV_FORM_SUMMARY_PAGE_LOADED : {name: 'AV_FORM_SUMMARY_PAGE_LOADED', description: 'Form summary page loaded'},
AV_FORM_SUBMIT_BUTTON_CLICKED : {name: 'AV_FORM_SUBMIT_BUTTON_CLICKED', description: 'Form submit journey CTA clicked'},
AV_FORM_SUBMIT_API_SUCCESS : {name: 'AV_FORM_SUBMIT_API_SUCCESS', description: 'Form submit API successful'},
AV_FORM_SUBMIT_API_FAILED : {name: 'AV_FORM_SUBMIT_API_FAILED', description: 'Form submit API failed'},
AV_FORM_LOADED : {name: 'FA_FORM_LOADED', description: 'Form loaded'},
AV_FORM_CLOSE_CLICKED : {name: 'FA_FORM_CLOSE_CLICKED', description: 'Form close CTA clicked'},
AV_FORM_ELEMENT_CHANGED : {name: 'FA_FORM_ELEMENT_CHANGED', description: 'Form element answer changed'},
AV_FORM_NEXT_BUTTON_CLICKED : {name: 'FA_FORM_NEXT_BUTTON_CLICKED', description: 'Form next CTA clicked'},
AV_FORM_BACK_BUTTON_CLICKED : {name: 'FA_FORM_BACK_BUTTON_CLICKED', description: 'Form back CTA clicked'},
AV_FORM_SUMMARY_PAGE_LOADED : {name: 'FA_FORM_SUMMARY_PAGE_LOADED', description: 'Form summary page loaded'},
AV_FORM_SUBMIT_BUTTON_CLICKED : {name: 'FA_FORM_SUBMIT_BUTTON_CLICKED', description: 'Form submit journey CTA clicked'},
AV_FORM_SUBMIT_API_SUCCESS : {name: 'FA_FORM_SUBMIT_API_SUCCESS', description: 'Form submit API successful'},
AV_FORM_SUBMIT_API_FAILED : {name: 'FA_FORM_SUBMIT_API_FAILED', description: 'Form submit API failed'},
// COLLECTIONS
ADDRESSES_CLICKED: {name: 'ADDRESSES_CLICKED', description: 'ADDRESSES_CLICKED'},
ADDRESSES_FAILED : {name: 'ADDRESSES_FAILED', description: 'ADDRESSES_FAILED'},
FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_CLICKED : {name: 'FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_CLICKED', description: 'FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_CLICKED'},
FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_FAILED : {name: 'FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_FAILED', description: 'FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_FAILED'},
FA_COLLECT_MONEY_CLICKED : {name: 'FA_COLLECT_MONEY_CLICKED', description: 'FA_COLLECT_MONEY_CLICKED'},
FA_COLLECT_MONEY_FAILED : {name: 'FA_COLLECT_MONEY_FAILED', description: 'FA_COLLECT_MONEY_FAILED'},
FA_COLLECT_MONEY_NUMBER_CHANGED: {name: 'FA_COLLECT_MONEY_NUMBER_CHANGED', description: 'FA_COLLECT_MONEY_NUMBER_CHANGED'},
FA_COPY_LAN_CLICKED : {name: 'FA_COPY_LAN_CLICKED', description: 'FA_COPY_LAN_CLICKED'},
FA_COPY_LINK_CLICKED: {name: 'FA_COPY_LINK_CLICKED', description: 'FA_COPY_LINK_CLICKED'},
FA_COPY_LINK_FAILED: {name: 'FA_COPY_LINK_FAILED', description: 'FA_COPY_LINK_FAILED'},
FA_PAST_FEEDBACKS_FEEDBACK_CLICKED: {name: 'FA_PAST_FEEDBACKS_FEEDBACK_CLICKED', description: 'FA_PAST_FEEDBACKS_FEEDBACK_CLICKED'},
FA_PAST_FEEDBACKS_FEEDBACK_FAILED : {name: 'FA_PAST_FEEDBACKS_FEEDBACK_FAILED', description: 'FA_PAST_FEEDBACKS_FEEDBACK_FAILED'},
FA_SEND_PAYMENT_LINK: {name: 'FA_SEND_PAYMENT_LINK', description: 'FA_SEND_PAYMENT_LINK'},
FA_SEND_PAYMENT_LINK_FAILED: {name: 'FA_SEND_PAYMENT_LINK_FAILED', description: 'FA_SEND_PAYMENT_LINK_FAILED'},
FA_SEND_PAYMENT_LINK_FAILED_LIMIT_REACHED: {name: 'FA_SEND_PAYMENT_LINK_FAILED_LIMIT_REACHED', description: 'FA_SEND_PAYMENT_LINK_FAILED_LIMIT_REACHED'},
FA_TOTAL_OUTSTANDING_BREAKUP_CLICKED: {name: 'FA_TOTAL_OUTSTANDING_BREAKUP_CLICKED', description: 'FA_TOTAL_OUTSTANDING_BREAKUP_CLICKED'},
FA_VIEW_ADDRESSES_CLICKED: {name: 'FA_VIEW_ADDRESSES_CLICKED', description: 'FA_VIEW_ADDRESSES_CLICKED'},
FA_VIEW_ADDRESSES_FAILED: {name: 'FA_VIEW_ADDRESSES_FAILED', description: 'FA_VIEW_ADDRESSES_FAILED'},
FA_VIEW_EMI_SCHEDULE_CLICKED: {name: 'FA_VIEW_EMI_SCHEDULE_CLICKED', description: 'FA_VIEW_EMI_SCHEDULE_CLICKED'},
FA_VIEW_EMI_SCHEDULE_FAILED: {name: 'FA_VIEW_EMI_SCHEDULE_FAILED', description: 'FA_VIEW_EMI_SCHEDULE_FAILED'},
FA_VIEW_MAP_GEO_CLICKED: {name: 'FA_VIEW_MAP_GEO_CLICKED', description: 'FA_VIEW_MAP_GEO_CLICKED'},
FA_VIEW_MORE: {name: 'FA_VIEW_MORE', description: 'FA_VIEW_MORE'},
FA_VIEW_PAST_FEEDBACKS_CLICKED: {name: 'FA_VIEW_PAST_FEEDBACKS_CLICKED', description: 'FA_VIEW_PAST_FEEDBACKS_CLICKED'},
FA_VIEW_PAST_FEEDBACKS_FAILED: {name: 'FA_VIEW_PAST_FEEDBACKS_FAILED', description: 'FA_VIEW_PAST_FEEDBACKS_FAILED'},
FA_VIEW_PAST_FEEDBACK_NEXT_PAGE_CLICKED: {name: 'FA_VIEW_PAST_FEEDBACK_NEXT_PAGE_CLICKED', description: 'FA_VIEW_PAST_FEEDBACK_NEXT_PAGE_CLICKED'},
FA_VIEW_PAST_FEEDBACK_PREV_PAGE_CLICKED: {name: 'FA_VIEW_PAST_FEEDBACK_PREV_PAGE_CLICKED', description: 'FA_VIEW_PAST_FEEDBACK_PREV_PAGE_CLICKED'},
FA_VIEW_PAST_FEEDBACK_NAVIGATION_PAGE_FAILED: {name: 'FA_VIEW_PAST_FEEDBACK_PREV_PAGE_FAILED', description: 'FA_VIEW_PAST_FEEDBACK_PREV_PAGE_FAILED'},
FA_VIEW_PHOTO_CLICKED: {name: 'FA_VIEW_PHOTO_CLICKED', description: 'FA_VIEW_PHOTO_CLICKED'}
} as const;
export enum MimeType {

View File

@@ -38,7 +38,7 @@ const ForceUninstallScreen = (props: IForceUninstallScreen) => {
return <>{forceReinstallData?.reinstall_endpoint?
<View style={styles.errorContainer}>
<Heading type={'h4'} style={styles.errorHeading} bold dark>
Seems like you are using an older app version.
Seems like you are using an older app version. v{getAppVersion()}
</Heading>
<Text >Please follow these instructions.</Text>
<Text>1. Download the new app by clicking the button at the bottom.</Text>

View File

@@ -7,6 +7,8 @@ import { COLORS } from '../../../RN-UI-LIB/src/styles/colors';
import HomeIcon from '../../assets/icons/HomeIcon';
import { AddressL1Details } from '../../types/addressGeolocation.types'
import AddressItem from './AddressItem'
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
interface IAddressContainer {
addressList?: AddressL1Details[]
@@ -33,12 +35,20 @@ const AddressContainer: React.FC<IAddressContainer> = ({addressList}) => {
<View>
{
addressList.map((address: AddressL1Details) => (
<Accordion accordionStyle={{paddingVertical: 28, paddingHorizontal: 16 }}
accordionHeader={<AddressItem key={address?.addressDTO?.externalReferenceId}
addressItem={address?.addressDTO}
geoLocationList={address.matchingGeoLocations}
showGeolocationBtn={true}/>}
customExpandUi={{whenCollapsed: <Text style={addressAccordionToggleStyle}>View Details</Text>, whenExpanded: <Text style={addressAccordionToggleStyle}>Hide Details</Text>}}
<Accordion accordionStyle={{paddingVertical: 28, paddingHorizontal: 16}}
accordionHeader={<AddressItem
key={address?.addressDTO?.externalReferenceId || address?.addressDTO?.id}
addressItem={address?.addressDTO}
geoLocationList={address.matchingGeoLocations}
showGeolocationBtn={true}/>}
onExpanded={(isExpanded) => {
if (isExpanded) {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_ADDRESSES_CLICKED, {addressId: address?.addressDTO?.id}) }
}}
customExpandUi={{
whenCollapsed: <Text style={addressAccordionToggleStyle}>View Details</Text>,
whenExpanded: <Text style={addressAccordionToggleStyle}>Hide Details</Text>
}}
>
<View>
<Text style={[styles.textContainer, styles.accordionDetailHeading]}>

View File

@@ -5,6 +5,8 @@ import { COLORS } from '../../../RN-UI-LIB/src/styles/colors';
import { BUSINESS_DATE_FORMAT, BUSINESS_TIME_FORMAT, dateFormat } from '../../../RN-UI-LIB/src/utlis/dates';
import { sanitizeString } from '../../components/utlis/commonFunctions';
import { IGeoLocation } from '../../types/addressGeolocation.types';
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
interface IGeolocationItem {
geolocationItem: IGeoLocation;
@@ -20,6 +22,7 @@ const GeolocationItem = ({ geolocationItem, showSeparator = true }: IGeolocation
const locationTime = dateFormat(new Date(geolocationItem?.timeStamp), BUSINESS_TIME_FORMAT);
const openGeolocation = () => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_MAP_GEO_CLICKED, {latitude: geolocationItem.latitude, longitude: geolocationItem.longitude,})
const geolocationUrl = `http://maps.google.com/?q=${geolocationItem?.latitude},${geolocationItem?.longitude}`;
if(!geolocationUrl) return;

View File

@@ -40,6 +40,9 @@ import { setFeedbackHistory } from '../../reducer/feedbackHistorySlice';
import OutstandingAmountBreakupBottomSheet from './OutstandingAmountBreakupBottomSheet';
import { getCaseUnifiedData, UnifiedCaseDetailsTypes } from '../../action/caseApiActions';
import useIsOnline from '../../hooks/useIsOnline';
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { getLoanAccountNumber } from "../../components/utlis/commonFunctions";
interface ICaseDetails {
route: {
@@ -216,6 +219,7 @@ const CollectionCaseDetails: React.FC<ICaseDetails> = props => {
}
const collectMoneyCta = () => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COLLECT_MONEY_CLICKED, {lan: loanAccountNumber})
navigateToScreen('registerPayments', {
caseId,
numbers: phoneNumbers,
@@ -268,8 +272,10 @@ const CollectionCaseDetails: React.FC<ICaseDetails> = props => {
{addressString}
</Text>
<Button
onPress={() =>
handleRouting(PageRouteEnum.ADDRESS_GEO)
onPress={() =>{
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_ADDRESSES_CLICKED, {lan: getLoanAccountNumber(caseDetail)});
handleRouting(PageRouteEnum.ADDRESS_GEO)
}
}
title="View all addresses"
variant="primaryText"
@@ -335,7 +341,8 @@ const CollectionCaseDetails: React.FC<ICaseDetails> = props => {
]}>
<Pressable
onPress={() => {
setShowOutstandingAmountBottomSheet(
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_TOTAL_OUTSTANDING_BREAKUP_CLICKED, {lan: loanAccountNumber})
setShowOutstandingAmountBottomSheet(
true,
);
}}
@@ -389,7 +396,8 @@ const CollectionCaseDetails: React.FC<ICaseDetails> = props => {
]}>
<Pressable
onPress={() => {
navigateToScreen(PageRouteEnum.EMI_SCHEDULE, { loanAccountNumber , caseId })
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_EMI_SCHEDULE_CLICKED, {lan: loanAccountNumber})
navigateToScreen(PageRouteEnum.EMI_SCHEDULE, { loanAccountNumber , caseId })
}}
style={[
GenericStyles.row,
@@ -470,7 +478,10 @@ const CollectionCaseDetails: React.FC<ICaseDetails> = props => {
<View style={[{ flexBasis: '40%' }]}>
<TouchableOpacity
activeOpacity={0.7}
onPress={() => handleRouting(PageRouteEnum.PAST_FEEDBACK_DETAIL)}
onPress={() => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_PAST_FEEDBACKS_CLICKED, {lan: loanAccountNumber})
handleRouting(PageRouteEnum.PAST_FEEDBACK_DETAIL)}
}
style={GenericStyles.flex20}>
<Text
style={[

View File

@@ -6,13 +6,16 @@ import { toast } from '../../../RN-UI-LIB/src/components/toast';
import { copyToClipboard } from '../../components/utlis/commonFunctions';
import Text from '../../../RN-UI-LIB/src/components/Text';
import CopyIcon from '../../../RN-UI-LIB/src/Icons/CopyIcon';
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
interface ILANChip {
loanAccountNumber: string;
}
const LANChip: React.FC<ILANChip> = ({ loanAccountNumber }) => {
const copyLAN = () => {
if (loanAccountNumber) {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COPY_LAN_CLICKED, {lan: loanAccountNumber})
if (loanAccountNumber) {
copyToClipboard(loanAccountNumber);
toast({
text1: ToastMessages.SUCCESS_COPYING_LAN,

View File

@@ -1,14 +1,5 @@
import React, { useCallback, useEffect, useRef, useState } from 'react';
import {
Animated,
Image,
Modal,
SafeAreaView,
StyleSheet,
TouchableOpacity,
View,
} from 'react-native';
import { GlobalDocumentMap } from '../../../App';
import { Animated, Modal, SafeAreaView, StyleSheet, TouchableOpacity, View, } from 'react-native';
import RNFastImage from '../../../RN-UI-LIB/src/components/FastImage';
import Heading from '../../../RN-UI-LIB/src/components/Heading';
import LineLoader from '../../../RN-UI-LIB/src/components/suspense_loader/LineLoader';
@@ -18,13 +9,22 @@ import CloseIcon from '../../../RN-UI-LIB/src/Icons/CloseIcon';
import { GenericStyles } from '../../../RN-UI-LIB/src/styles';
import { COLORS } from '../../../RN-UI-LIB/src/styles/colors';
import { dateFormat } from '../../../RN-UI-LIB/src/utlis/dates';
import { decideLoadingState, findDocumentByDocumentType, getDocumentList, RELATIVE_PATH_PREFIX } from '../../components/utlis/commonFunctions';
import {
decideLoadingState,
findDocumentByDocumentType,
getDocumentList,
getLoanAccountNumber,
RELATIVE_PATH_PREFIX
} from '../../components/utlis/commonFunctions';
import useFetchDocument from '../../hooks/useFetchDocument';
import useIsOnline from '../../hooks/useIsOnline';
import CaseItemAvatar from '../allCases/CaseItemAvatar';
import AvCaseData from './AvCaseData';
import CollectionCaseData from './CollectionCaseData';
import { CaseDetail, DOCUMENT_TYPE } from './interface';
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
interface IUserDetailsSection {
caseDetail: CaseDetail;
@@ -54,6 +54,10 @@ const UserDetailsSection: React.FC<IUserDetailsSection> = props => {
);
const handleOpenClose = useCallback(() => {
// if it's currently not open, then handleOpenClose() will open it, hence the !
if(!openImage){
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_PHOTO_CLICKED, {lan: getLoanAccountNumber(caseDetail)})
}
setOpenImage(prev => !prev);
}, []);

View File

@@ -16,6 +16,8 @@ import { RootState } from '../../../store/store';
import { IFeedback } from '../../../types/feedback.types';
import FeedbackDetailAnswerContainer from './FeedbackDetailAnswerContainer';
import FeedbackDetailItem from './FeedbackDetailItem';
import { addClickstreamEvent } from "../../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../../common/Constants";
const PAGE_TITLE = 'All feedbacks';
const SCROLL_LAYOUT_OFFSET = 10;
@@ -49,6 +51,11 @@ const FeedbackDetailContainer: React.FC<IFeedbackDetailContainer> = ({ route: ro
const [loading, setLoading] = useState(false);
const [currentPage, setCurrentPage] = useState(1);
useEffect(()=>{
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_CASE_DETAILS_INDIVIDUAL_FEEDBACK_CLICKED, {lan: loanAccountNumber, feedbackId: activeFeedbackReferenceId})
},[])
useEffect(() => {
if (currentPage == 1) {
setFeedbackList(feedbackListFromCache);
@@ -69,6 +76,7 @@ const FeedbackDetailContainer: React.FC<IFeedbackDetailContainer> = ({ route: ro
throw res;
})
.catch(err => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_PAST_FEEDBACK_NAVIGATION_PAGE_FAILED, {targetPageNumber: currentPage, lan: loanAccountNumber})
logError(err);
})
.finally(() => {
@@ -132,8 +140,14 @@ const FeedbackDetailContainer: React.FC<IFeedbackDetailContainer> = ({ route: ro
}
</ScrollView>
<Pagination
onNext={() => setCurrentPage(page => page + 1)}
onPrev={() => setCurrentPage(page => page - 1)}
onNext={() => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_PAST_FEEDBACK_NEXT_PAGE_CLICKED, {currentPageNumber: currentPage, lan: loanAccountNumber})
setCurrentPage(page => page + 1)
}}
onPrev={() => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_VIEW_PAST_FEEDBACK_PREV_PAGE_CLICKED, {currentPageNumber: currentPage, lan: loanAccountNumber})
setCurrentPage(page => page - 1)
}}
currentPage={currentPage}
totalPages={feedbackTotalPages}
/>

View File

@@ -20,6 +20,8 @@ import DropdownItem from './DropdownItem';
import { PhoneNumber } from '../caseDetails/interface';
import { setPaymentLink } from '../../reducer/paymentSlice';
import { ToastMessages } from '../allCases/constants';
import { addClickstreamEvent } from "../../services/clickstreamEventService";
import { CLICKSTREAM_EVENT_NAMES } from "../../common/Constants";
interface IRegisterForm {
selectedPhoneNumber: string;
@@ -77,7 +79,8 @@ const RegisterPayments: React.FC<IRegisterPayments> = ({ route }) => {
});
const copyButtonClick = () => {
if (paymentLink) {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COPY_LINK_CLICKED, {amount: Number(getValues('amount')),lan : caseDetail.loanAccountNumber!!, phoneNumber: getValues('selectedPhoneNumber'), paymentLink })
if (paymentLink) {
copyToClipboard(paymentLink);
toast({
type: 'info',
@@ -102,6 +105,7 @@ const RegisterPayments: React.FC<IRegisterPayments> = ({ route }) => {
}
const generatePaymentLink = () => {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_SEND_PAYMENT_LINK, {amount: Number(getValues('amount')),lan : caseDetail.loanAccountNumber!!, phoneNumber: getValues('selectedPhoneNumber') })
dispatch(
generatePaymentLinkAction(
{
@@ -151,7 +155,8 @@ const RegisterPayments: React.FC<IRegisterPayments> = ({ route }) => {
<Dropdown
placeholder="Select phone number"
onValueChange={number => {
setValue('selectedPhoneNumber', number);
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COLLECT_MONEY_NUMBER_CHANGED, {phoneNumber: number, lan: caseDetail.loanAccountNumber!!})
setValue('selectedPhoneNumber', number);
dispatch(setPaymentLink(''));
trigger();
}}