This commit is contained in:
Abin Toppo
2026-01-16 16:23:14 +05:30
parent 41a4487a0a
commit 432bd7f06d
10 changed files with 114 additions and 33 deletions
+3 -2
View File
@@ -7,6 +7,7 @@ import {
StyleSheet, StyleSheet,
Pressable, Pressable,
} from 'react-native'; } from 'react-native';
import colors from '../Color';
type ConfirmDialogProps = { type ConfirmDialogProps = {
visible: boolean; visible: boolean;
@@ -109,10 +110,10 @@ const styles = StyleSheet.create({
color: '#666', color: '#666',
}, },
confirmBtn: { confirmBtn: {
backgroundColor: '#1f4b6dff', backgroundColor: colors.primary,
paddingVertical: 10, paddingVertical: 10,
paddingHorizontal: 18, paddingHorizontal: 18,
borderRadius: 6, borderRadius: 10,
}, },
confirmText: { confirmText: {
color: '#fff', color: '#fff',
+42 -3
View File
@@ -1,11 +1,13 @@
import React, { useEffect } from 'react'; import React, { useEffect, useState } from 'react';
import { View, Text, StyleSheet, Dimensions, FlatList, ActivityIndicator } from 'react-native'; import { View, Text, StyleSheet, Dimensions, FlatList, ActivityIndicator } from 'react-native';
import Animated, { useSharedValue, useAnimatedStyle, withDelay, withTiming } from 'react-native-reanimated'; import Animated, { useSharedValue, useAnimatedStyle, withDelay, withTiming } from 'react-native-reanimated';
import { Layers, Clock, ShoppingCart, X, FileText } from 'lucide-react-native'; import { Layers, Clock, ShoppingCart, X, FileText } from 'lucide-react-native';
import { Header } from '../../Component/Index'; import { Header } from '../../Component/Index';
import colors from '../../Constant/Color'; import colors from '../../Constant/Color';
import { useDashboard } from '../../Services/BBPS/Hooks'; import { useDashboard, useESetuAdharVarification } from '../../Services/BBPS/Hooks';
import { log } from 'console'; import { log } from 'console';
import { useSelector } from 'react-redux';
import ConfirmDialog from '../../Constant/Dialog/ConfirmDialog';
const { width } = Dimensions.get('window'); const { width } = Dimensions.get('window');
const CARD_WIDTH = (width - 48) / 2; const CARD_WIDTH = (width - 48) / 2;
@@ -59,8 +61,34 @@ const StatCard = ({ item, index, isLoading }: any) => {
const Home = () => { const Home = () => {
const { data, isLoading } = useDashboard(); const { data, isLoading } = useDashboard();
const user = useSelector((state: any) => state.token?.token);
console.log("-=--",user)
const { mutateAsync:eSetuAdharVarification } = useESetuAdharVarification();
const dashboard = data?.data || {}; const dashboard = data?.data || {};
const [esetu,setEsetu] = useState<boolean>();
useEffect(()=>{
if(user?.esetuVerified === 'Not Verified'){
const payLoad= {
contId: user,
transactionId: "string",
udf1: "string",
udf2: "string",
udf3: "string",
udf4: "string",
responseUrl: "string"
}
setEsetu(true)
eSetuAdharVarification(payLoad, {
onSuccess: (res) => {
console.log(res)
}, onError: (err) => {
console.log(err, '-----auction item error');
}
});
}else{
setEsetu(false)
}
},[user])
const DASHBOARD_CARDS = [ const DASHBOARD_CARDS = [
{ {
@@ -125,7 +153,18 @@ const Home = () => {
return ( return (
<View style={styles.screen}> <View style={styles.screen}>
<Header title="Dashboard" /> <Header title="Dashboard" />
<ConfirmDialog
visible={esetu as boolean}
title="Aadhaar Verification Required"
message="To access features, please complete your Aadhaar verification."
confirmText="Proceed"
cancelText="Cancel"
onConfirm={() => {
setEsetu(false);
}}
onClose={() => setEsetu(false)}
/>
<FlatList <FlatList
data={DASHBOARD_CARDS} data={DASHBOARD_CARDS}
keyExtractor={(_, index) => index.toString()} keyExtractor={(_, index) => index.toString()}
+1
View File
@@ -116,6 +116,7 @@ const Login = () => {
{ password: values.password, emailAdd: values.email }, { password: values.password, emailAdd: values.email },
{ {
onSuccess: res => { onSuccess: res => {
console.log("res",res )
if (res.statusCode == 200) { if (res.statusCode == 200) {
Dispatch(setToken({ ...res.data, token: res.token, userType: activeType })); Dispatch(setToken({ ...res.data, token: res.token, userType: activeType }));
handleGetData(); handleGetData();
+9 -10
View File
@@ -9,7 +9,7 @@ const ProceedToBidDetail = () => {
// Sample data based on your JSON // Sample data based on your JSON
const route = useRoute<any>(); const route = useRoute<any>();
const tenderDataId = route.params?.tender; const tenderDataId = route.params?.tender;
const { data, refetch } = useProceedToBid(tenderDataId?.tenderId); const { data, refetch,isRefetching } = useProceedToBid(tenderDataId?.tenderId);
const { data: tenderResponse, refetch: tenderRefetch }: any = useFetchTenderById(tenderDataId?.tenderId); const { data: tenderResponse, refetch: tenderRefetch }: any = useFetchTenderById(tenderDataId?.tenderId);
const tenderData = tenderResponse?.data; const tenderData = tenderResponse?.data;
const [refreshing, setRefreshing] = React.useState(false); const [refreshing, setRefreshing] = React.useState(false);
@@ -22,13 +22,12 @@ const ProceedToBidDetail = () => {
// Format date from array // Format date from array
const handleStartBidding = () => { const handleStartBidding = () => {
setLoading(true);
try { try {
setLoading(true); setLoading(true);
refetch();
if (data) { navigation.navigate('TenderBidding', { tenderId:tenderDataId.tenderId});
console.log(" ppp", tenderData, "ll", data)
navigation.navigate('TenderBidding', { tenderData: tenderData, bidData: data.data });
}
} catch (error) { } catch (error) {
console.log("Error in starting bidding: ", error); console.log("Error in starting bidding: ", error);
} finally { } finally {
@@ -184,9 +183,9 @@ const ProceedToBidDetail = () => {
{tenderData?.envelopeA_Logs && ( {tenderData?.envelopeA_Logs && (
<View style={styles.section}> <View style={styles.section}>
<Text style={styles.sectionTitle}>Submission Logs</Text> <Text style={styles.sectionTitle}>Submission Logs</Text>
<EnvelopeLogCard log={tenderData?.envelopeA_Logs} title="Envelope A Submission" /> {tenderData?.envelopeA_Logs&& <EnvelopeLogCard log={tenderData?.envelopeA_Logs} title="Envelope A Submission" />}
<EnvelopeLogCard log={tenderData?.envelopeB_Logs} title="Envelope B Submission" /> { tenderData?.envelopeB_Logs&&<EnvelopeLogCard log={tenderData?.envelopeB_Logs} title="Envelope B Submission" />}
<EnvelopeLogCard log={tenderData?.envelopeC_Logs} title="Envelope C Submission" /> {tenderData?.envelopeC_Logs && <EnvelopeLogCard log={tenderData?.envelopeC_Logs} title="Envelope C Submission" />}
</View> </View>
)} )}
@@ -260,7 +259,7 @@ const ProceedToBidDetail = () => {
{ {
tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? ( tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? (
<TouchableOpacity style={styles.proceedButton} onPress={handleStartBidding}> <TouchableOpacity style={styles.proceedButton} onPress={handleStartBidding} disabled={isRefetching}>
<Text style={styles.proceedButtonText}>{loading ? <ActivityIndicator size={'small'} color={'#ffff'} /> : 'Start Bidding'}</Text> <Text style={styles.proceedButtonText}>{loading ? <ActivityIndicator size={'small'} color={'#ffff'} /> : 'Start Bidding'}</Text>
</TouchableOpacity> </TouchableOpacity>
+10 -6
View File
@@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useEffect, useState } from 'react';
import { View, Text, StyleSheet, ScrollView, TouchableOpacity } from 'react-native'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity } from 'react-native';
import Animated, { FadeIn, FadeOut, Layout, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'; import Animated, { FadeIn, FadeOut, Layout, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
import { ChevronDown, Trash2, Info } from 'lucide-react-native'; import { ChevronDown, Trash2, Info } from 'lucide-react-native';
@@ -18,16 +18,20 @@ const PurchaseTenderList = () => {
setExpandedIndex(prev => (prev === index ? null : index)); setExpandedIndex(prev => (prev === index ? null : index));
}; };
useEffect(()=>{
console.log("dcj",SelectedPurchaseList)
if(SelectedPurchaseList.length === 0){
Navigation.goBack()
}
},[SelectedPurchaseList]
)
return ( return (
<View style={styles.screen}> <View style={styles.screen}>
<InsideHeader title="Purchase" showArrow /> <InsideHeader title="Purchase" showArrow />
<ScrollView contentContainerStyle={styles.container}> <ScrollView contentContainerStyle={styles.container}>
{/* Header */}
<View style={styles.header}>
<Text style={styles.heading}>Tender Purchase List</Text>
{/* <Info size={20} color="#0F172A" /> */}
</View>
{/* Cards */} {/* Cards */}
{SelectedPurchaseList.map((item: any, index: any) => { {SelectedPurchaseList.map((item: any, index: any) => {
@@ -19,6 +19,7 @@ import { SUBMIT_ENVELOPE_A, SUBMIT_ENVELOPE_B, SUBMIT_ENVELOPE_FILE_A, SUBMIT_EN
import { CheckSquare, Square } from 'lucide-react-native'; import { CheckSquare, Square } from 'lucide-react-native';
import { apiCall } from '../../../Axios/Axios'; import { apiCall } from '../../../Axios/Axios';
import EnvelopeCExcelPreview from '../Component/EnvelopeCExcelPreview'; import EnvelopeCExcelPreview from '../Component/EnvelopeCExcelPreview';
import { useFetchTenderById, useProceedToBid } from '../../../Services/BBPS/Hooks';
type EnvelopeType = 'A' | 'B' | 'C'; type EnvelopeType = 'A' | 'B' | 'C';
type EnvelopeFormState = { type EnvelopeFormState = {
@@ -41,8 +42,20 @@ const TenderBidding = () => {
const route = useRoute<any>(); const route = useRoute<any>();
const navigation = useNavigation(); const navigation = useNavigation();
console.log("-=-=-=-=-=",route) console.log("-=-=-=-=-=",route)
const [bidData] = useState<any>(route.params?.tenderData || null);
const tenderData: any = route.params?.bidData || null; console.log("ROUTE DATA",route)
const tenderId = useState<any>(route.params?.tenderId || null);
const { data: tenderResponse, refetch: tenderRefetch }: any = useFetchTenderById(route.params?.tenderId);
const bidData= tenderResponse?.data;
console.log(" --------------1",bidData)
const { data:tender, refetch } = useProceedToBid(route.params?.tenderId);
const tenderData= tender?.data
console.log(" --------------2",tenderData)
const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType>('A'); const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType>('A');
const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({ const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({
A: {}, A: {},
@@ -425,6 +438,7 @@ const TenderBidding = () => {
} }
console.log("bidData : ", bidData) console.log("bidData : ", bidData)
console.log("tender data : ", tenderData) console.log("tender data : ", tenderData)
// console.log( `bold ${tenderData?.[`tenderEnvelope${activeEnvelope}List`]}`,tenderData?.[`tenderEnvelope${activeEnvelope}List`])
return ( return (
<View style={styles.container}> <View style={styles.container}>
<InsideHeader title="Tender Bidding Start" showArrow /> <InsideHeader title="Tender Bidding Start" showArrow />
@@ -462,6 +476,7 @@ const TenderBidding = () => {
envelopeType="B" envelopeType="B"
onPress={() => { onPress={() => {
if (tenderData?.envelopeASubmittStatus) { if (tenderData?.envelopeASubmittStatus) {
setActiveEnvelope('B') setActiveEnvelope('B')
} else { } else {
Alert.alert('Info', 'Submit Envelop A First') Alert.alert('Info', 'Submit Envelop A First')
@@ -485,7 +500,9 @@ const TenderBidding = () => {
</View> </View>
</View> </View>
{/* Envelope A List */} {/* Envelope A List */}
{tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && bidData?.envelopeB_Logs !== null && (
{tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && bidData?.envelopeB_Logs === null && (
<View style={styles.card}> <View style={styles.card}>
<Text style={styles.sectionTitle}>Envelope {activeEnvelope} Details</Text> <Text style={styles.sectionTitle}>Envelope {activeEnvelope} Details</Text>
<FlatList <FlatList
+4 -3
View File
@@ -82,8 +82,8 @@ const SUBMIT_ENVELOPE_FILE_A = `${BASE_URL}tenderBidding/addDocumentsEnvelopeA`
const SUBMIT_ENVELOPE_FILE_B = `https://procurelinc.in/EProcurementSB/tenderBidding/addDocumentsEnvelopeB` const SUBMIT_ENVELOPE_FILE_B = `https://procurelinc.in/EProcurementSB/tenderBidding/addDocumentsEnvelopeB`
const GET_ENVELOPE_C = `${BASE_URL}eTendering/getEnvelopeCTemplate/tenderId?tenderId=` const GET_ENVELOPE_C = `${BASE_URL}eTendering/getEnvelopeCTemplate/tenderId?tenderId=`
const SUBMIT_ENVELOPE_C_UPLOAD = `${BASE_URL}tenderBidding/getSaveEnvelopeCData` const SUBMIT_ENVELOPE_C_UPLOAD = `${BASE_URL}tenderBidding/getSaveEnvelopeCData`
const GET_CONTRACTOR_PROFILE =`${BASE_URL}contractor/getcontractorfulldetails const GET_CONTRACTOR_PROFILE =`${BASE_URL}contractor/getcontractorfulldetails`
` const ESETU_VARIFICATION = `${BASE_URL}tenderBidding/eSetuAdharVarification`
@@ -162,6 +162,7 @@ export {
GET_ENVELOPE_C, GET_ENVELOPE_C,
SUBMIT_ENVELOPE_C_UPLOAD, SUBMIT_ENVELOPE_C_UPLOAD,
GET_TENDER_BY_ID, GET_TENDER_BY_ID,
GET_CONTRACTOR_PROFILE GET_CONTRACTOR_PROFILE,
ESETU_VARIFICATION
}; };
+8 -2
View File
@@ -1,5 +1,5 @@
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, tenderDetails, fetchLiveTenderById, fetchContractorProfile, updateUserProfile } 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, tenderDetails, fetchLiveTenderById, fetchContractorProfile, updateUserProfile, eSetuAdharVarification } from './apis';
// User // User
@@ -179,7 +179,7 @@ export const useProceedToBid = (tenderId?: string) => {
return useQuery({ return useQuery({
queryKey: ['proceedToBid', tenderId], queryKey: ['proceedToBid', tenderId],
queryFn: () => proceedToBid(tenderId as string), queryFn: () => proceedToBid(tenderId as string),
enabled: false, // 👈 manual trigger
}); });
}; };
@@ -345,3 +345,9 @@ export const useFetchLiveTenderById = (tenderId: number) => {
queryFn: () => fetchLiveTenderById(tenderId) queryFn: () => fetchLiveTenderById(tenderId)
}); });
}; };
export const useESetuAdharVarification = () => {
return useMutation({
mutationFn: (payload: any) => eSetuAdharVarification(payload),
});
};
+14 -1
View File
@@ -1,5 +1,5 @@
import axios from "axios"; import axios from "axios";
import { AUCTION_DOCUMENT_DOWNLOAD, DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_AUCTION_DETAILS, GET_MY_AUCTION, GET_MY_TENDER, GET_TENDER_DETAILS, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_TENDER_OFFLINE, TENDER_LOGIN, PURCHASE_AUCTION_LIST, PURCHASE_OFFLINE_AUCTION, REVERSE_AUCTION_ITEM, VIEW_AUCTION_DOCUMENTS, VIEW_AUCTION_ITEM_DETAIL, STAGETHREE, REJ_STAGE_TWO, GETCONTRACTORBYSTATE, GET_MASTER_DATA, ALL_DESIGNATION, GET_REGISTRATION_STATE, PARTNER_API_ENDPOINT, SAVE_CONTRACTOR_STAGE1, VERIFY_GST, VERIFY_ADHAR, SEND_ADHAROTP, SUBMIT_ENVELOPE_FILE_B, SUBMIT_ENVELOPE_FILE_A, SUBMIT_ENVELOPE_A, SUBMIT_ENVELOPE_B, VERIFY_ORGPAN, PURCHASE_AUCTION_PAGE, GET_TENDER_BY_ID, GET_CONTRACTOR_PROFILE, CONTRACTOR_PROFILE_UPDATE } from "./ApiUrls"; import { AUCTION_DOCUMENT_DOWNLOAD, DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_AUCTION_DETAILS, GET_MY_AUCTION, GET_MY_TENDER, GET_TENDER_DETAILS, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_TENDER_OFFLINE, TENDER_LOGIN, PURCHASE_AUCTION_LIST, PURCHASE_OFFLINE_AUCTION, REVERSE_AUCTION_ITEM, VIEW_AUCTION_DOCUMENTS, VIEW_AUCTION_ITEM_DETAIL, STAGETHREE, REJ_STAGE_TWO, GETCONTRACTORBYSTATE, GET_MASTER_DATA, ALL_DESIGNATION, GET_REGISTRATION_STATE, PARTNER_API_ENDPOINT, SAVE_CONTRACTOR_STAGE1, VERIFY_GST, VERIFY_ADHAR, SEND_ADHAROTP, SUBMIT_ENVELOPE_FILE_B, SUBMIT_ENVELOPE_FILE_A, SUBMIT_ENVELOPE_A, SUBMIT_ENVELOPE_B, VERIFY_ORGPAN, PURCHASE_AUCTION_PAGE, GET_TENDER_BY_ID, GET_CONTRACTOR_PROFILE, CONTRACTOR_PROFILE_UPDATE, ESETU_VARIFICATION } from "./ApiUrls";
import { apiCall } from "../../Axios/Axios"; import { apiCall } from "../../Axios/Axios";
// User // User
@@ -149,6 +149,7 @@ export const proceedToBid = async (tenderId: string): Promise<any> => {
'get', 'get',
`${PROCEED_TO_BID}${tenderId}` `${PROCEED_TO_BID}${tenderId}`
); );
console.log("-=-=-=-=-89",data)
return data; return data;
} }
@@ -262,6 +263,18 @@ export const getRagistrationState = async (): Promise<any> => {
return data; return data;
} }
export const eSetuAdharVarification = async (payLoad:any ): Promise<any> => {
const data = await apiCall<any>(
'get',
`${ESETU_VARIFICATION}`,
payLoad,
{},
"application/x-www-form-urlencoded"
);
return data;
}
export const partnerShipSubmit = ( export const partnerShipSubmit = (
payload: any payload: any
): Promise<any> => { ): Promise<any> => {