add 3 events for pin/unpin audit logging TP-22457 (#184)
* add 4 events for [in/unpin audit logging TP-22457 * empty case for function handle TP-22457 * rename event TP-22457
This commit is contained in:
committed by
GitHub Enterprise
parent
6004c8e8f9
commit
aad1ba8083
@@ -57,6 +57,9 @@ export const CLICKSTREAM_EVENT_NAMES = {
|
||||
AV_APP_BACKGROUND : {name: 'AV_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'},
|
||||
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'},
|
||||
@@ -140,7 +143,7 @@ export const CLICKSTREAM_EVENT_NAMES = {
|
||||
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'},
|
||||
} as Record<string, {name: string, description: string}>;
|
||||
} as const;
|
||||
|
||||
export enum MimeType {
|
||||
'image/jpeg' = 'image/jpeg',
|
||||
|
||||
@@ -9,6 +9,7 @@ import address from "../form/components/Address";
|
||||
import { useWindowDimensions } from 'react-native';
|
||||
import { GlobalImageMap } from '../../../App';
|
||||
import { GenericType } from '../../common/GenericTypes';
|
||||
import { CaseDetail } from '../../screens/caseDetails/interface';
|
||||
|
||||
|
||||
const fs = RNFetchBlob.fs;
|
||||
@@ -139,4 +140,9 @@ export const allSettled = (promises: Promise<GenericType>[]) =>
|
||||
|
||||
export function isNullOrUndefined(val: any): boolean {
|
||||
return val === undefined || val === null
|
||||
}
|
||||
|
||||
export const getLoanAccountNumber = (caseDetail: CaseDetail) => {
|
||||
const { loanAccountNumber, loanDetails } = caseDetail ?? {};
|
||||
return loanAccountNumber ?? loanDetails?.loanAccountNumber ?? '';
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
CONTEXT_TASK_STATUSES,
|
||||
} from '../screens/caseDetails/interface';
|
||||
import { addClickstreamEvent } from '../services/clickstreamEventService';
|
||||
import { getLoanAccountNumber } from '../components/utlis/commonFunctions';
|
||||
|
||||
export type ICasesMap = { [key: string]: ICaseItem };
|
||||
|
||||
@@ -231,9 +232,9 @@ const allCasesSlice = createSlice({
|
||||
if (state.loading) {
|
||||
state.loading = false;
|
||||
}
|
||||
let newVisitCaseCount: number = 0;
|
||||
let newVisitCases: string[] = [];
|
||||
let removedVisitedCases = 0;
|
||||
let newVisitCaseLoanIds: string[] = [];
|
||||
let newVisitCollectionCases: string[] = [];
|
||||
let removedVisitedCasesLoanIds: string[] = [];
|
||||
caseUpdates.forEach(({ updateType, updatedCaseDetail }) => {
|
||||
const { caseType, caseReferenceId, id, pinRank } =
|
||||
updatedCaseDetail;
|
||||
@@ -246,13 +247,27 @@ const allCasesSlice = createSlice({
|
||||
);
|
||||
if (index !== -1) {
|
||||
if (pinRank && !state.casesList[index].pinRank) {
|
||||
newVisitCaseCount++;
|
||||
// this is a new visit case
|
||||
newVisitCaseLoanIds.push(
|
||||
state.caseDetails[caseId]
|
||||
?.loanAccountNumber ??
|
||||
state.caseDetails[caseId]?.loanDetails
|
||||
?.loanAccountNumber ??
|
||||
0,
|
||||
);
|
||||
if(caseType === CaseAllocationType.COLLECTION_CASE) {
|
||||
newVisitCases.push(caseId);
|
||||
newVisitCollectionCases.push(caseId);
|
||||
}
|
||||
}
|
||||
if(!pinRank && state.casesList[index].pinRank) {
|
||||
removedVisitedCases++;
|
||||
// this is a removed visit case
|
||||
removedVisitedCasesLoanIds.push(
|
||||
state.caseDetails[caseId]
|
||||
?.loanAccountNumber ??
|
||||
state.caseDetails[caseId]?.loanDetails
|
||||
?.loanAccountNumber ??
|
||||
0,
|
||||
);
|
||||
}
|
||||
state.casesList[index] = {
|
||||
...state.casesList[index],
|
||||
@@ -282,7 +297,7 @@ const allCasesSlice = createSlice({
|
||||
return;
|
||||
}
|
||||
if(pinRank && caseType === CaseAllocationType.COLLECTION_CASE) {
|
||||
newVisitCases.push(caseId);
|
||||
newVisitCollectionCases.push(caseId);
|
||||
}
|
||||
const caseListItem = {
|
||||
caseReferenceId: caseId,
|
||||
@@ -333,22 +348,44 @@ const allCasesSlice = createSlice({
|
||||
state.pendingList = pendingList;
|
||||
state.completedList = completedList;
|
||||
state.pinnedList = pinnedList;
|
||||
state.newVisitedCases = newVisitCases;
|
||||
state.newVisitedCases = newVisitCollectionCases;
|
||||
|
||||
if (newVisitCaseCount) {
|
||||
if (newVisitCaseLoanIds?.length > 0) {
|
||||
addClickstreamEvent(
|
||||
CLICKSTREAM_EVENT_NAMES.FIELD_APP_CASES_PINNED_UPDATED,
|
||||
{
|
||||
newPinCases: [...newVisitCaseLoanIds],
|
||||
currentPinCases: pinnedList.map(item =>
|
||||
getLoanAccountNumber(
|
||||
state.caseDetails[item?.caseReferenceId],
|
||||
),
|
||||
),
|
||||
},
|
||||
);
|
||||
toast({
|
||||
type: 'info',
|
||||
text1: `${newVisitCaseCount} case${
|
||||
newVisitCaseCount > 1 ? 's' : ''
|
||||
text1: `${newVisitCaseLoanIds.length} case${
|
||||
newVisitCaseLoanIds.length > 1 ? 's' : ''
|
||||
} added to the visit plan`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(removedVisitedCases) {
|
||||
if(removedVisitedCasesLoanIds.length > 0) {
|
||||
addClickstreamEvent(
|
||||
CLICKSTREAM_EVENT_NAMES.FIELD_APP_CASES_PINNED_UPDATED,
|
||||
{
|
||||
newUnpinCases: [...removedVisitedCasesLoanIds],
|
||||
currentPinCases: pinnedList.map(item =>
|
||||
getLoanAccountNumber(
|
||||
state.caseDetails[item?.caseReferenceId],
|
||||
),
|
||||
),
|
||||
},
|
||||
);
|
||||
toast({
|
||||
type: 'info',
|
||||
text1: `${removedVisitedCases} case${
|
||||
removedVisitedCases > 1 ? 's' : ''
|
||||
text1: `${removedVisitedCasesLoanIds.length} case${
|
||||
removedVisitedCasesLoanIds.length > 1 ? 's' : ''
|
||||
} removed from the visit plan`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import { toast } from '../../../RN-UI-LIB/src/components/toast';
|
||||
import { ToastMessages } from './constants';
|
||||
import useIsOnline from '../../hooks/useIsOnline';
|
||||
import { getCurrentScreen } from '../../components/utlis/navigationUtlis';
|
||||
import { getLoanAccountNumber } from '../../components/utlis/commonFunctions';
|
||||
|
||||
export const CasesActionButtons: React.FC = () => {
|
||||
const dispatch = useAppDispatch();
|
||||
@@ -27,7 +28,8 @@ export const CasesActionButtons: React.FC = () => {
|
||||
selectedTodoListMap,
|
||||
casesList,
|
||||
caseDetails,
|
||||
visitPlansUpdating
|
||||
visitPlansUpdating,
|
||||
pinnedList
|
||||
} = useAppSelector((state: RootState) => state.allCases);
|
||||
const isOnline = useIsOnline();
|
||||
|
||||
@@ -56,6 +58,7 @@ export const CasesActionButtons: React.FC = () => {
|
||||
}
|
||||
const updatedPinnedList: ICaseItem[] = [];
|
||||
const pinnedCasesPayload: IPinnedCasesPayload[] = [];
|
||||
const newlyUnpinnedCaseLoanIds: string[] = [];
|
||||
const updatedCaseList: ICaseItem[] = casesList.map(caseItem => {
|
||||
const { caseReferenceId, pinRank } = caseItem;
|
||||
const updatedCaseItem = {...caseItem};
|
||||
@@ -68,6 +71,10 @@ export const CasesActionButtons: React.FC = () => {
|
||||
if (selectedTodoListMap[caseReferenceId]) {
|
||||
updatedCaseItem.pinRank = null;
|
||||
updatedCaseItem.type = CaseTypes.CASE;
|
||||
const index = updatedCaseItem.caseReferenceId;
|
||||
newlyUnpinnedCaseLoanIds.push(
|
||||
getLoanAccountNumber(caseDetails[index])
|
||||
);
|
||||
} else if (pinRank !== null && pinRank !== undefined) {
|
||||
updatedPinnedList.push(caseItem)
|
||||
pinnedCasePayload.pinRank = caseItem.pinRank;
|
||||
@@ -75,6 +82,15 @@ export const CasesActionButtons: React.FC = () => {
|
||||
}
|
||||
return updatedCaseItem;
|
||||
});
|
||||
addClickstreamEvent(
|
||||
CLICKSTREAM_EVENT_NAMES.FIELD_APP_CASES_UNPINNED_CTA,
|
||||
{
|
||||
newUnpinCases: [...newlyUnpinnedCaseLoanIds],
|
||||
currentPinCases: pinnedList.map(item =>
|
||||
getLoanAccountNumber(caseDetails[item?.caseReferenceId]),
|
||||
),
|
||||
},
|
||||
);
|
||||
dispatch(postPinnedList(pinnedCasesPayload, updatedCaseList, 'REMOVED'));
|
||||
};
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import Layout from '../layout/Layout';
|
||||
import { toast } from '../../../RN-UI-LIB/src/components/toast';
|
||||
import { ToastMessages } from '../allCases/constants';
|
||||
import useIsOnline from '../../hooks/useIsOnline';
|
||||
import { getLoanAccountNumber } from '../../components/utlis/commonFunctions';
|
||||
|
||||
const TodoList = () => {
|
||||
const {
|
||||
@@ -63,11 +64,12 @@ const TodoList = () => {
|
||||
}
|
||||
const updatedPinnedList: ICaseItem[] = [];
|
||||
const pinnedCasesPayload: IPinnedCasesPayload[] = [];
|
||||
const newPinedCasesLoanAccountNumbers: string[] = [];
|
||||
const updatedCaseList = casesList.map(caseItem => {
|
||||
const { caseReferenceId } = caseItem;
|
||||
const pinnedItem =
|
||||
intermediateTodoListMap[caseReferenceId];
|
||||
const { caseType, loanAccountNumber } = caseDetails[caseReferenceId];
|
||||
const { caseType } = caseDetails[caseReferenceId];
|
||||
const pinnedCasePayload: IPinnedCasesPayload = {
|
||||
caseReferenceId,
|
||||
caseType: caseType || CaseAllocationType.ADDRESS_VERIFICATION_CASE,
|
||||
@@ -84,6 +86,7 @@ const TodoList = () => {
|
||||
updatedPinnedList.push(pinnedItem);
|
||||
pinnedCasePayload.pinRank = pinnedItem.pinRank;
|
||||
pinnedCasesPayload.push(pinnedCasePayload);
|
||||
newPinedCasesLoanAccountNumbers.push(getLoanAccountNumber(caseDetails[caseReferenceId]));
|
||||
}
|
||||
return pinnedItem ? pinnedItem : caseItem;
|
||||
});
|
||||
@@ -95,6 +98,15 @@ const TodoList = () => {
|
||||
return caseA.pinRank - caseB.pinRank
|
||||
},
|
||||
);
|
||||
addClickstreamEvent(
|
||||
CLICKSTREAM_EVENT_NAMES.FIELD_APP_CASES_PINNED_CTA,
|
||||
{
|
||||
newPinCases: [...newPinedCasesLoanAccountNumbers],
|
||||
currentPinCases: pinnedList.map(item =>
|
||||
getLoanAccountNumber(caseDetails[item?.caseReferenceId]),
|
||||
),
|
||||
},
|
||||
);
|
||||
dispatch(postPinnedList(sortedPinnedCasesPayload, updatedCaseList, 'ADDED'));
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user