From 1e70711c4d8b11338f60250b3a8211a6ecd94bcc Mon Sep 17 00:00:00 2001 From: Aman Chaturvedi Date: Thu, 14 Sep 2023 16:40:58 +0530 Subject: [PATCH] TP-34788 | Clickstream events added for AM/TLs --- RN-UI-LIB | 2 +- android/app/build.gradle | 10 +++++++++- src/common/Constants.ts | 21 ++++++++++++++++++++ src/hooks/useFirestoreUpdates.ts | 1 + src/reducer/allCasesSlice.ts | 10 +++++++++- src/screens/allCases/AgentListItem.tsx | 8 +++++++- src/screens/allCases/AgentsListContainer.tsx | 13 +++++++++++- src/screens/allCases/CasesList.tsx | 2 +- src/screens/allCases/EmptyList.tsx | 9 ++++++++- src/screens/allCases/HeaderLabel.tsx | 9 ++++++++- 10 files changed, 77 insertions(+), 8 deletions(-) diff --git a/RN-UI-LIB b/RN-UI-LIB index 3ab183e5..4c7f4f68 160000 --- a/RN-UI-LIB +++ b/RN-UI-LIB @@ -1 +1 @@ -Subproject commit 3ab183e53214b6ac198f0376f7723cac2da96d83 +Subproject commit 4c7f4f6880d96bffa856e04d7b2b4d383e42c5cf diff --git a/android/app/build.gradle b/android/app/build.gradle index 848437fe..047ab2e5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -216,11 +216,19 @@ android { } } signingConfigs { - debug { + debug { + if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { + storeFile file(MYAPP_UPLOAD_STORE_FILE) + storePassword MYAPP_UPLOAD_STORE_PASSWORD + keyAlias MYAPP_UPLOAD_KEY_ALIAS + keyPassword MYAPP_UPLOAD_KEY_PASSWORD + } + else { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' + } } release { if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { diff --git a/src/common/Constants.ts b/src/common/Constants.ts index d5279d5d..07347af7 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -525,6 +525,27 @@ export const CLICKSTREAM_EVENT_NAMES = { name: 'FA_GEOLOCATION_CAPTURING_FAILED', description: 'Geolocation capturing failed', }, + // AM/TLs + FA_AGENT_LIST_DROPDOWN_CLICKED: { + name: 'FA_AGENT_LIST_DROPDOWN_CLICKED', + description: 'Agent list dropdown clicked', + }, + FA_AGENT_LIST_BUTTON_CLICKED: { + name: 'FA_AGENT_LIST_BUTTON_CLICKED', + description: 'Agent list button clicked', + }, + FA_AGENT_LIST_BOTTOMSHEET_LOAD_SUCCESS: { + name: 'FA_AGENT_LIST_BOTTOMSHEET_LOAD_SUCCESS', + description: 'Agent list bottomsheet load success', + }, + FA_AGENT_SELECT_BUTTON_CLICKED: { + name: 'FA_AGENT_SELECT_BUTTON_CLICKED', + description: 'Agent select button clicked', + }, + FA_AGENT_CASE_LOAD_SUCCESS: { + name: 'FA_AGENT_CASE_LOAD_SUCCESS', + description: 'Agent case load success', + }, } as const; export enum MimeType { diff --git a/src/hooks/useFirestoreUpdates.ts b/src/hooks/useFirestoreUpdates.ts index f6490dae..9d004efa 100644 --- a/src/hooks/useFirestoreUpdates.ts +++ b/src/hooks/useFirestoreUpdates.ts @@ -106,6 +106,7 @@ const useFirestoreUpdates = () => { caseUpdates, isInitialLoad, isVisitPlanLocked: lockRef?.current?.visitPlanStatus === VisitPlanStatus.LOCKED, + selectedAgent: selectedAgent, }) ); !isInitialLoad && showCaseUpdationToast(newlyAddedCases, deletedCases); diff --git a/src/reducer/allCasesSlice.ts b/src/reducer/allCasesSlice.ts index 4756b249..bf1ffab6 100644 --- a/src/reducer/allCasesSlice.ts +++ b/src/reducer/allCasesSlice.ts @@ -12,6 +12,7 @@ import { CaseAllocationType, caseVerdict, ICaseItem, + IReportee, } from '../screens/allCases/interface'; import { CaseDetail, CONTEXT_TASK_STATUSES, DOCUMENT_TYPE } from '../screens/caseDetails/interface'; import { addClickstreamEvent } from '../services/clickstreamEventService'; @@ -19,6 +20,7 @@ import { getLoanAccountNumber } from '../components/utlis/commonFunctions'; import { getVisitedWidgetsNodeList } from '../components/form/services/forms.service'; import { CollectionCaseWidgetId, CommonCaseWidgetId } from '../types/template.types'; import { IAvatarUri } from '../action/caseListAction'; +import { MY_CASE_ITEM } from './userSlice'; export type ICasesMap = { [key: string]: ICaseItem }; interface IAllCasesSlice { @@ -237,10 +239,11 @@ const allCasesSlice = createSlice({ state.loading = action.payload; }, updateCaseDetailsFirestore: (state, action) => { - const { caseUpdates, isInitialLoad, isVisitPlanLocked } = action.payload as { + const { caseUpdates, isInitialLoad, isVisitPlanLocked, selectedAgent } = action.payload as { caseUpdates: CaseUpdates[]; isInitialLoad: boolean; isVisitPlanLocked: boolean; + selectedAgent: IReportee; }; let newVisitCaseLoanIds: string[] = []; let newVisitCollectionCases: string[] = []; @@ -354,6 +357,11 @@ const allCasesSlice = createSlice({ state.pinnedList = pinnedList; state.newVisitedCases = newVisitCollectionCases; if (state.loading) { + if (selectedAgent && selectedAgent.referenceId !== MY_CASE_ITEM.referenceId) { + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_AGENT_CASE_LOAD_SUCCESS, { + selectedAgent: selectedAgent.referenceId, + }); + } state.loading = false; } diff --git a/src/screens/allCases/AgentListItem.tsx b/src/screens/allCases/AgentListItem.tsx index c307907a..19bc42a9 100644 --- a/src/screens/allCases/AgentListItem.tsx +++ b/src/screens/allCases/AgentListItem.tsx @@ -13,6 +13,8 @@ import fuzzysort from 'fuzzysort'; import { MY_CASE_ITEM, setSelectedAgent } from '../../reducer/userSlice'; import { resetFilters } from '../../reducer/filtersSlice'; import { setGlobalUserData } from '../../constants/Global'; +import { addClickstreamEvent } from '../../services/clickstreamEventService'; +import { CLICKSTREAM_EVENT_NAMES } from '../../common/Constants'; interface IAgentListItem { agent: IReportee; @@ -25,8 +27,12 @@ const AgentListItem: React.FC = ({ agent, leftAdornment, searchQ const dispatch = useAppDispatch(); const handleAgentSelection = () => { + const selectedAgentId = agent.referenceId; + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_AGENT_SELECT_BUTTON_CLICKED, { + selectedAgentId, + }); dispatch(setSelectedAgent(agent)); - setGlobalUserData({ selectedAgentId: agent.referenceId }); + setGlobalUserData({ selectedAgentId }); dispatch(resetFilters()); dispatch(resetCasesData()); dispatch(setShowAgentSelectionBottomSheet(false)); diff --git a/src/screens/allCases/AgentsListContainer.tsx b/src/screens/allCases/AgentsListContainer.tsx index 4b0fe308..41ac3a91 100644 --- a/src/screens/allCases/AgentsListContainer.tsx +++ b/src/screens/allCases/AgentsListContainer.tsx @@ -8,12 +8,23 @@ import { getAgentsList } from '../../action/reporteesActions'; import { GenericStyles } from '../../../RN-UI-LIB/src/styles'; import { COLORS } from '../../../RN-UI-LIB/src/styles/colors'; import AgentListViewLoading from './AgentListViewLoading'; +import { CLICKSTREAM_EVENT_NAMES } from '../../common/Constants'; +import { addClickstreamEvent } from '../../services/clickstreamEventService'; -const AgentsListContainer = () => { +interface IAgentsListContainer { + showAgentSelectionBottomSheet: boolean; +} + +const AgentsListContainer: React.FC = ({ showAgentSelectionBottomSheet }) => { const [searchQuery, setSearchQuery] = React.useState(''); const { isLoading, agentsList } = useAppSelector((state) => state.reportees); const dispatch = useAppDispatch(); + useEffect(() => { + showAgentSelectionBottomSheet && + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_AGENT_LIST_BOTTOMSHEET_LOAD_SUCCESS); + }, [showAgentSelectionBottomSheet]); + const scrollAnimation = useRef(new Animated.Value(0)).current; useEffect(() => { diff --git a/src/screens/allCases/CasesList.tsx b/src/screens/allCases/CasesList.tsx index e2d6c4a9..8b250ebb 100644 --- a/src/screens/allCases/CasesList.tsx +++ b/src/screens/allCases/CasesList.tsx @@ -355,7 +355,7 @@ const CasesList: React.FC = ({ casesList = [], isVisitPlan, allCases setVisible={toggleAgentSelectionBottomSheet} > - + diff --git a/src/screens/allCases/EmptyList.tsx b/src/screens/allCases/EmptyList.tsx index 2b35122a..9299208e 100644 --- a/src/screens/allCases/EmptyList.tsx +++ b/src/screens/allCases/EmptyList.tsx @@ -13,6 +13,8 @@ import { MY_CASE_ITEM, VisitPlanStatus } from '../../reducer/userSlice'; import { EmptyListMessages } from './constants'; import { navigateToScreen } from '../../components/utlis/navigationUtlis'; import { dateFormat, DAY_MONTH_DATE_FORMAT } from '../../../RN-UI-LIB/src/utlis/dates'; +import { addClickstreamEvent } from '../../services/clickstreamEventService'; +import { CLICKSTREAM_EVENT_NAMES } from '../../common/Constants'; interface IEmptyList { isCompleted?: boolean; @@ -94,6 +96,11 @@ const EmptyList: React.FC = (props) => { } }; + const handleAgentSelectionCTAClick = () => { + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_AGENT_LIST_BUTTON_CLICKED); + setShowAgentSelectionBottomSheet && setShowAgentSelectionBottomSheet(true); + }; + const getBtnDetails = () => { if (isVisitPlan && !isFilterApplied && !isLockedVisitPlanStatus) { return { @@ -104,7 +111,7 @@ const EmptyList: React.FC = (props) => { if (isTeamLead && setShowAgentSelectionBottomSheet) { return { - btnHandler: () => setShowAgentSelectionBottomSheet(true), + btnHandler: handleAgentSelectionCTAClick, btnText: 'Select Agent', }; } diff --git a/src/screens/allCases/HeaderLabel.tsx b/src/screens/allCases/HeaderLabel.tsx index af3c7b1b..22d3aa5a 100644 --- a/src/screens/allCases/HeaderLabel.tsx +++ b/src/screens/allCases/HeaderLabel.tsx @@ -8,6 +8,8 @@ import { useAppSelector } from '../../hooks'; import { RootState } from '../../store/store'; import { MY_CASE_ITEM, VisitPlanStatus } from '../../reducer/userSlice'; import { dateFormat, DAY_MONTH_DATE_FORMAT } from '../../../RN-UI-LIB/src/utlis/dates'; +import { addClickstreamEvent } from '../../services/clickstreamEventService'; +import { CLICKSTREAM_EVENT_NAMES } from '../../common/Constants'; interface HeaderLabelProps { setShowAgentSelectionBottomSheet: (val: boolean) => void; @@ -29,6 +31,11 @@ const HeaderLabel: React.FC = (props) => { })); const isTeamLead = useAppSelector((state) => state.user.isTeamLead); + const handleAgentSelectionCTAClick = () => { + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_AGENT_LIST_DROPDOWN_CLICKED); + setShowAgentSelectionBottomSheet(true); + }; + const getHeaderLabel = () => { if (isVisitPlan) { if (isLockedVisitPlanStatus) { @@ -45,7 +52,7 @@ const HeaderLabel: React.FC = (props) => { return ( setShowAgentSelectionBottomSheet(true)} + onPress={handleAgentSelectionCTAClick} > {getHeaderLabel()}