merge signup process

This commit is contained in:
rohit-kumar-fullstack
2026-01-13 13:00:16 +05:30
parent eb849681a9
commit 26fc703df9
5 changed files with 150 additions and 172 deletions
+29 -23
View File
@@ -10,6 +10,8 @@ import { useDispatch, useSelector } from 'react-redux';
import { togglePurchaseAuction } from '../../Redux/Slices/selectPurchaseAuction'; import { togglePurchaseAuction } from '../../Redux/Slices/selectPurchaseAuction';
import { apiCall } from '../../Axios/Axios'; import { apiCall } from '../../Axios/Axios';
import { GET_MY_AUCTION } from '../../Services/BBPS/ApiUrls'; import { GET_MY_AUCTION } from '../../Services/BBPS/ApiUrls';
import SkeltonList from '../../Component/Skelton/SkeltonList';
import Skeleton from '../../Component/Skelton/Skelton';
const LiveAuction = () => { const LiveAuction = () => {
const Dispatch = useDispatch() const Dispatch = useDispatch()
@@ -136,36 +138,40 @@ const LiveAuction = () => {
</Text> </Text>
</Animated.View> </Animated.View>
)} )}
{
isPending ? <Skeleton /> :
<FlatList
data={allBoolean.liveAuctionData ?? []}
renderItem={renderItem}
showsVerticalScrollIndicator={false}
contentContainerStyle={{ paddingBottom: 50, paddingTop: 10 }}
<FlatList onEndReached={loadMore}
data={allBoolean.liveAuctionData ?? []} onEndReachedThreshold={0.1}
renderItem={renderItem}
showsVerticalScrollIndicator={false}
contentContainerStyle={{ paddingBottom: 50, paddingTop: 10 }}
onEndReached={loadMore} onMomentumScrollBegin={() => {
onEndReachedThreshold={0.1} onEndReachedCalledDuringMomentum.current = false;
}}
onMomentumScrollBegin={() => { ListFooterComponent={renderFooter}
onEndReachedCalledDuringMomentum.current = false;
}}
ListFooterComponent={renderFooter} refreshControl={
<RefreshControl
refreshing={isRefetching}
onRefresh={refetch}
tintColor="transparent"
colors={[colors.primary]}
/>
}
refreshControl={ initialNumToRender={6}
<RefreshControl maxToRenderPerBatch={6}
refreshing={isRefetching} windowSize={7}
onRefresh={refetch} removeClippedSubviews
tintColor="transparent"
colors={[colors.primary]}
/> />
} }
initialNumToRender={6}
maxToRenderPerBatch={6}
windowSize={7}
removeClippedSubviews
/>
</View> </View>
); );
-19
View File
@@ -65,25 +65,6 @@ const PurchaseAuction = () => {
<SearchInput onChange={() => { }} placeholder='Search....' filterPress={() => { setAllBoolean((prev: any) => ({ ...prev, isShowFilter: !prev.isShowFilter })) }} /> <SearchInput onChange={() => { }} placeholder='Search....' filterPress={() => { setAllBoolean((prev: any) => ({ ...prev, isShowFilter: !prev.isShowFilter })) }} />
{isPending ? <Skelton /> {isPending ? <Skelton />
: :
// <FlatList
// data={data.data ||[]}
// keyExtractor={(_, index) => index.toString()}
// showsVerticalScrollIndicator={false}
// contentContainerStyle={{ paddingBottom: 200, paddingHorizontal: 10 }}
// renderItem={({ item, index }) => (
// <PurchaseAuctionTile
// item={item}
// onPressDetails={() => {
// }}
// onStartBidding={() => {
// Dispatch(setAuction(item))
// navigation.navigate(NavigationString.Emd)
// }}
// buttonEnable={isAuctionActive(item)}
// isAuctionEnd={isAuctionEnd(item)}
// />
// )}
// />
<FlatList <FlatList
data={data.result ?? []} data={data.result ?? []}
renderItem={({ item, index }) => ( renderItem={({ item, index }) => (
+105 -99
View File
@@ -36,123 +36,129 @@ const Login = () => {
const [auctionLoading, setAuctionLoading] = useState(false); const [auctionLoading, setAuctionLoading] = useState(false);
const { mutate: loginMutate } = useLogin(); const { mutate: loginMutate } = useLogin();
const { mutate: auctionMutate } = useAuctionLogin(); const { mutate: auctionMutate } = useAuctionLogin();
const {data}=useGetDesignation(); const { data } = useGetDesignation();
const { mutate: registrationStateMutate } = useRagistrationState(); const { mutate: registrationStateMutate } = useRagistrationState();
const { data: MasterData}=usefetchMasterData() const { data: MasterData } = usefetchMasterData()
const handleGetData = async () => { const handleGetData = async () => {
registrationStateMutate(undefined, { registrationStateMutate(undefined, {
onSuccess: (res: any) => { onSuccess: (res: any) => {
console.log('Registration status response try :', res);
if (res?.statusCode === 200) { if (res?.statusCode === 200) {
const { registrationStatus, contOtherId, contOrganization } = res.data; const { registrationStatus, contOtherId, contOrganization } = res.data;
const params = { otherId: contOtherId, orgType: contOrganization }; const params = { otherId: contOtherId, orgType: contOrganization };
switch (registrationStatus) { switch (registrationStatus) {
case null: case null:
case undefined: case undefined:
Navigation.replace(NavigationString.Registration);
break;
case 'Pending':
// handleRoute(params); Navigation.replace(NavigationString.Registration);
break; break;
case 'Complete': case 'Pending':
case 'Completed':
Navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [{ name: NavigationString.Home }],
}),
);
break;
default:
{
console.log("attempting navigation to Ragistration")
Navigation.replace(NavigationString.Registration);}
break;
}
return;
}
if (res?.statusCode === 404) { // handleRoute(params);
console.warn('Registration API returned 404'); break;
Navigation.replace('Registration'); case 'Complete':
return; case 'Completed':
}
Navigation.replace('Registration');
},
onError: (error: any) => {
console.error('Registration status error catch :', error);
if (error?.response?.status === 500) {
Alert.alert('Server error', 'Something went wrong. Please try again later.');
return;
}
if (error?.request) {
Alert.alert('Network Error', 'Please check your internet connection.');
return;
}
Alert.alert('Error', error?.message || 'Something went wrong');
Navigation.replace('Registration');
},
});
};
const HandleLogin = async (values: any) => {
if (activeType === 'tender') {
setLoginLoading(true);
loginMutate(
{ password: values.password, emailAdd: values.email },
{
onSuccess: res => {
if (res.statusCode == 200) {
Dispatch(setToken({ ...res.data, token: res.token }));
handleGetData();
}
setLoginLoading(false);
},
onError: err => {
showErrorAlert(err.message);
setLoginLoading(false);
},
},
);
} else {
setAuctionLoading(true);
auctionMutate(
{ password: values.password, emailAdd: values.email },
{
onSuccess: res => {
if (res.statusCode == 200) {
Dispatch(setToken({ ...res.data, token: res.token }));
Navigation.dispatch( Navigation.dispatch(
CommonActions.reset({ CommonActions.reset({
index: 0, index: 0,
routes: [{ name: NavigationString.Home }], routes: [{ name: NavigationString.Home }],
}), }),
); );
} break;
setAuctionLoading(false); default:
{
console.log("attempting navigation to Ragistration")
Navigation.replace(NavigationString.Registration);
}
break;
}
return;
}
if (res?.statusCode === 404) {
console.warn('Registration API returned 404');
Navigation.replace('Registration');
return;
}
Navigation.replace('Registration');
},
onError: (error: any) => {
console.error('Registration status error catch :', error);
if (error?.response?.status === 500) {
Alert.alert('Server error', 'Something went wrong. Please try again later.');
return;
}
if (error?.request) {
Alert.alert('Network Error', 'Please check your internet connection.');
return;
}
Alert.alert('Error', error?.message || 'Something went wrong');
Navigation.replace('Registration');
},
});
};
const HandleLogin = async (values: any) => {
try {
if (activeType === 'tender') {
setLoginLoading(true);
loginMutate(
{ password: values.password, emailAdd: values.email },
{
onSuccess: res => {
if (res.statusCode == 200) {
Dispatch(setToken({ ...res.data, token: res.token, userType: activeType }));
handleGetData();
} else {
showErrorAlert(res.message)
}
},
onError: err => {
showErrorAlert(err.message);
},
}, },
onError: err => { );
showErrorAlert(err.message); } else {
setAuctionLoading(false); setAuctionLoading(true);
auctionMutate(
{ password: values.password, emailAdd: values.email },
{
onSuccess: res => {
if (res.statusCode == 200) {
Dispatch(setToken({ ...res.data, token: res.token, userType: activeType }));
Navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [{ name: NavigationString.Home }],
}),
);
}
},
onError: err => {
showErrorAlert(err.message);
setLoginLoading(false);
},
}, },
}, );
); }
} catch (error) {
} finally {
setAuctionLoading(false);
} }
}; };
const isLoading = activeType === 'tender' ? loginLoading : auctionLoading; const isLoading = activeType === 'tender' ? loginLoading : auctionLoading;
+16 -27
View File
@@ -12,7 +12,7 @@ import NavigationString from '../../Constant/NavigationString';
// Navigation type // Navigation type
export type Navigation = { export type Navigation = {
reset(arg0: { reset(arg0: {
index: number; index: number;
routes: { name: string; }[]; routes: { name: string; }[];
}): unknown; }): unknown;
navigate: (route: string, params?: { [key: string]: any }) => void; navigate: (route: string, params?: { [key: string]: any }) => void;
@@ -29,12 +29,11 @@ const Splash: React.FC = () => {
const [isHydrated, setIsHydrated] = useState(false); const [isHydrated, setIsHydrated] = useState(false);
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
// Wait for Redux hydration (works with/without redux-persist)
useEffect(() => { useEffect(() => {
let unsubscribe: any; let unsubscribe: any;
const checkHydration = () => { const checkHydration = () => {
const token = (store.getState() as any).token?.token; const token = (store.getState() as any).token?.token;
if (token !== undefined) { // Defined = hydrated (null/empty/string ok) if (token !== undefined) {
setIsHydrated(true); setIsHydrated(true);
unsubscribe?.(); unsubscribe?.();
} }
@@ -46,23 +45,11 @@ const Splash: React.FC = () => {
return () => unsubscribe?.(); return () => unsubscribe?.();
}, []); }, []);
const getToken = useCallback(async (): Promise<string | null> => {
try {
// Redux first (post-hydration), then AsyncStorage fallback
let token = reduxToken;
if (token === undefined) {
token = await AsyncStorage.getItem('token');
}
return token || null;
} catch (error) {
console.error('Token fetch error:', error);
return null;
}
}, [reduxToken]);
const routeByOrgType = (params: { otherId: any; orgType: any }) => { const routeByOrgType = (params: { otherId: any; orgType: any }) => {
const orgType = String(params.orgType); const orgType = String(params.orgType);
console.log("hitting here ") console.log("hitting here ")
if (orgType === '4' || orgType === '5' || orgType === '6') { if (orgType === '4' || orgType === '5' || orgType === '6') {
navigation.replace('StageThree', params); navigation.replace('StageThree', params);
return; return;
@@ -138,22 +125,25 @@ const Splash: React.FC = () => {
useNativeDriver: true, useNativeDriver: true,
}).start(); }).start();
const token = await getToken();
console.log("Token after hydration -", token, typeof token, !!token);
if (!token) { if (!reduxToken.token) {
console.log('No valid token, navigating to Login');
navigation.reset({ navigation.reset({
index: 0, index: 0,
routes: [{ name: NavigationString.Login || 'Signin' }], // Fallback routes: [{ name: NavigationString.Login }],
}); });
return; return;
} }
console.log('Valid token, fetching registration data'); if (reduxToken.userType == 'tender') {
await handleGetData(); await handleGetData();
} else {
navigation.reset({
index: 0,
routes: [{ name: NavigationString.Home }],
});
}
} catch (error) { } catch (error) {
console.error('Splash Error:', error);
navigation.reset({ navigation.reset({
index: 0, index: 0,
routes: [{ name: NavigationString.Login || 'Signin' }], routes: [{ name: NavigationString.Login || 'Signin' }],
@@ -163,10 +153,9 @@ const Splash: React.FC = () => {
} }
}; };
// Small delay ensures hydration + native animation complete
const timeoutId = setTimeout(runSplash, 200); const timeoutId = setTimeout(runSplash, 200);
return () => clearTimeout(timeoutId); return () => clearTimeout(timeoutId);
}, [isFocused, isHydrated, getToken]); }, [isFocused, isHydrated]);
if (!isHydrated) { if (!isHydrated) {
return ( return (
-4
View File
@@ -1,17 +1,14 @@
import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query'; import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
import { contractorStageThreeSubmit, contractorStageTwoSubmit, fetchAuctionItem, fetchCityDropdown, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchMasterData, fetchPurchaseAuction, fetchPurchaseAuctionList, fetchPurchaseTender, fetchTenderById, getAuction, getDesignation, getRagistrationState, offlineAuctionPurchase, offlineTenderPurchase, partnerShipSubmit, proceedToBid, registerContractor, sendAadhaarOtp, submitEnvelopeA, submitEnvelopeB, uploadEnvelopeFile, userAuctionLogin, userLogin, verifyAadhaarOtp, verifyGstNumber, verifyPanHandler, viewAuctionDocumentDownload, viewAuctionDocuments, viewAuctionItemDocuments, fetchPurchaseAuctionPage } from './apis'; import { contractorStageThreeSubmit, contractorStageTwoSubmit, fetchAuctionItem, fetchCityDropdown, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchMasterData, fetchPurchaseAuction, fetchPurchaseAuctionList, fetchPurchaseTender, fetchTenderById, getAuction, getDesignation, getRagistrationState, offlineAuctionPurchase, offlineTenderPurchase, partnerShipSubmit, proceedToBid, registerContractor, sendAadhaarOtp, submitEnvelopeA, submitEnvelopeB, uploadEnvelopeFile, userAuctionLogin, userLogin, verifyAadhaarOtp, verifyGstNumber, verifyPanHandler, viewAuctionDocumentDownload, viewAuctionDocuments, viewAuctionItemDocuments, fetchPurchaseAuctionPage } from './apis';
import { apiCall } from '../../Axios/Axios';
// User // User
export const useLogin = () => { export const useLogin = () => {
console.log("hitting here")
return useMutation({ return useMutation({
mutationFn: (payload: { emailAdd: string, password: string }) => userLogin(payload), mutationFn: (payload: { emailAdd: string, password: string }) => userLogin(payload),
}); });
}; };
export const useAuctionLogin = () => { export const useAuctionLogin = () => {
console.log("hitting here")
return useMutation({ return useMutation({
mutationFn: (payload: { emailAdd: string, password: string }) => userAuctionLogin(payload), mutationFn: (payload: { emailAdd: string, password: string }) => userAuctionLogin(payload),
}); });
@@ -194,7 +191,6 @@ export const useRagistrationState = () => {
}); });
}; };
//////////////////////////////////////////////////////
export const usefetchMasterData = () => { export const usefetchMasterData = () => {
return useQuery({ return useQuery({