Feat/tp 29659 with enhancements (#456)

* add status check from api for visitPlanStatus tp-29659

* test with status api and handle remove visit plan case flow too tp-29659
This commit is contained in:
Aman Sethi
2023-06-04 16:32:01 +05:30
committed by GitHub Enterprise
parent 5f2cc86ce1
commit 67bf4264c8
5 changed files with 49 additions and 14 deletions

View File

@@ -81,7 +81,11 @@ export const syncCaseDetail =
const offlineImageIdList = getOfflineImageId(payload);
const url = getApiUrl(ApiKeys.FEEDBACK);
axiosInstance
.post(url, payload)
.post(url, payload, {
params: {
apiVersion: 2,
},
})
.then((res) => {
const caseType = payload.caseType;
dispatch(

View File

@@ -1,5 +1,7 @@
import { AxiosResponse } from 'axios';
import axiosInstance, { ApiKeys, getApiUrl } from '../components/utlis/apiHelper';
import { logError } from '../components/utlis/errorUtils';
import { VisitPlanStatus } from '../reducer/userSlice';
import { FilterResponse } from '../screens/allCases/interface';
import { CaseDetail } from '../screens/caseDetails/interface';
@@ -30,11 +32,18 @@ export interface ISyncCaseIdPayload {
cases: ICases[];
}
interface ICasesSyncStatus {
syncStatus: SyncStatus;
visitPlanStatus: VisitPlanStatus;
}
export const getCasesSyncStatus = async (userReferenceId: string) => {
try {
const url = getApiUrl(ApiKeys.CASES_SYNC_STATUS, {}, { userReferenceId });
const response = await axiosInstance.get(url, { headers: { donotHandleError: true } });
return response?.data?.syncStatus;
const response: AxiosResponse<ICasesSyncStatus> = await axiosInstance.get(url, {
headers: { donotHandleError: true },
});
return response?.data;
} catch (err) {
logError(err as Error, 'Error getting sync status');
}

View File

@@ -24,6 +24,7 @@ import {
import { getSyncCaseIds } from '../components/utlis/firebaseFallbackUtils';
import { syncCasesByFallback } from '../reducer/allCasesSlice';
import { MILLISECONDS_IN_A_MINUTE } from '../../RN-UI-LIB/src/utlis/common';
import { VisitPlanStatus, setLockData } from '../reducer/userSlice';
export enum FOREGROUND_TASKS {
GEOLOCATION = 'GEOLOCATION',
@@ -80,7 +81,7 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
const handleGetCaseSyncStatus = async () => {
try {
const syncStatus = await getCasesSyncStatus(referenceId);
const { syncStatus, visitPlanStatus } = (await getCasesSyncStatus(referenceId)) ?? {};
if (syncStatus === SyncStatus.SEND_CASES) {
const cases = getSyncCaseIds([...pendingList, ...pinnedList]);
const payload: ISyncCaseIdPayload = {
@@ -94,6 +95,13 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
dispatch(syncCasesByFallback(updatedDetails));
}
}
if (visitPlanStatus) {
dispatch(
setLockData({
visitPlanStatus,
})
);
}
} catch (e) {
logError(e as Error, 'Error during fetching case sync status');
}
@@ -131,7 +139,8 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
const handleAppStateChange = async (nextAppState: AppStateStatus) => {
// App comes to foreground from background
if (appState.current.match(/inactive|background/) && nextAppState === 'active') {
if (nextAppState === 'active') {
handleGetCaseSyncStatus();
UnstoppableService.start(tasks);
if (bgTrackingTimeoutId.current) {
clearTimeout(bgTrackingTimeoutId.current);
@@ -151,7 +160,6 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
useEffect(() => {
if (isOnline) {
UnstoppableService.start(tasks);
AppState.addEventListener('change', handleAppStateChange);
} else {
if (UnstoppableService.isRunning()) {

View File

@@ -19,18 +19,25 @@ import { ToastMessages } from './constants';
import useIsOnline from '../../hooks/useIsOnline';
import { getLoanAccountNumber } from '../../components/utlis/commonFunctions';
import useCurrentRoute from '../../hooks/useCurrentRoute';
import { VisitPlanStatus } from '../../reducer/userSlice';
export const CasesActionButtons: React.FC = () => {
const dispatch = useAppDispatch();
const {
newlyPinnedCases,
selectedTodoListCount,
selectedTodoListMap,
casesList,
caseDetails,
visitPlansUpdating,
pinnedList,
} = useAppSelector((state: RootState) => state.allCases);
allCases: {
newlyPinnedCases,
selectedTodoListCount,
selectedTodoListMap,
casesList,
caseDetails,
visitPlansUpdating,
pinnedList,
},
isLockedVisitPlanStatus,
} = useAppSelector((state: RootState) => ({
allCases: state.allCases,
isLockedVisitPlanStatus: state.user.lock.visitPlanStatus === VisitPlanStatus.LOCKED,
}));
const isOnline = useIsOnline();
const currentRoute = useCurrentRoute();
@@ -49,6 +56,12 @@ export const CasesActionButtons: React.FC = () => {
};
const handleRemovePinnedList = () => {
if (isLockedVisitPlanStatus) {
toast({
type: 'info',
text1: ToastMessages.CASES_DELETION_DISABLED,
});
}
if (!isOnline) {
toast({ type: 'error', text1: ToastMessages.VISIT_PLAN_OFFLINE });
return;

View File

@@ -68,6 +68,7 @@ export const ToastMessages = {
SSO_SERVER_SIGN_IN_ERROR: 'Error while signing in to cosmos',
NOT_ALLOWED_ERROR: 'Not allowed',
CASES_SELECTION_DISABLED: 'Case addition is disabled during the generation of visit plan',
CASES_DELETION_DISABLED: 'Case deletion is disabled during the generation of visit plan',
};
export enum BOTTOM_TAB_ROUTES {