From 0e93334941b45aa5a62b76e683703d569197429a Mon Sep 17 00:00:00 2001 From: Jaanu423 Date: Fri, 9 Jan 2026 10:28:25 +0530 Subject: [PATCH] eender --- src/Axios/Axios.ts | 3 - src/Constant/NavigationString.tsx | 4 +- src/Navigation/MainStack.jsx | 1 + src/Screens/Tender/LiveTender.tsx | 4 +- src/Screens/Tender/LiveTenderDetail.tsx | 18 +++ src/Screens/Tender/LiveTenderTile.tsx | 11 +- src/Screens/Tender/ProceedToBidDetail.tsx | 129 +++++------------- src/Screens/Tender/PurchaseTenderAllList.tsx | 2 + src/Screens/Tender/PurchaseTenderTile.tsx | 42 +++--- .../Tender/tenderBidding/TenderBidding.tsx | 23 ++-- src/Screens/index.ts | 4 +- src/Services/BBPS/Hooks.ts | 57 ++++---- 12 files changed, 129 insertions(+), 169 deletions(-) create mode 100644 src/Screens/Tender/LiveTenderDetail.tsx diff --git a/src/Axios/Axios.ts b/src/Axios/Axios.ts index 7420661..0c18004 100644 --- a/src/Axios/Axios.ts +++ b/src/Axios/Axios.ts @@ -13,20 +13,17 @@ export const apiCall = async ( try { const token: any = store.getState().token.token; - console.log("token : ", token) const response = await axios({ method, url, data, params, // withCredentials: true, - baseURL: Variable.Main_Base, headers: { Authentication: `Bearer ${token?.token}`, 'Content-Type': contentType || 'application/json', }, }); - console.log("url : ", url) return response.data; } catch (error: any) { const errorMessage = error?.response?.data?.error; diff --git a/src/Constant/NavigationString.tsx b/src/Constant/NavigationString.tsx index b6414a3..80b7791 100644 --- a/src/Constant/NavigationString.tsx +++ b/src/Constant/NavigationString.tsx @@ -1,6 +1,3 @@ -import ProceedToBidDetail from "../Screens/Tender/ProceedToBidDetail" -import TenderBidding from "../Screens/Tender/tenderBidding/TenderBidding" - const NavigationString = { Login: 'Login', Splash: 'Splash', @@ -17,5 +14,6 @@ const NavigationString = { ProceedToPurTender:'ProceedToPurTender', TenderBidding:'TenderBidding', ProceedToBidDetail:'ProceedToBidDetail', + LiveTenderDetail:'LiveTenderDetail', } export default NavigationString \ No newline at end of file diff --git a/src/Navigation/MainStack.jsx b/src/Navigation/MainStack.jsx index f50b2a8..3fda2c1 100644 --- a/src/Navigation/MainStack.jsx +++ b/src/Navigation/MainStack.jsx @@ -40,6 +40,7 @@ export default function MainStack() { + ); diff --git a/src/Screens/Tender/LiveTender.tsx b/src/Screens/Tender/LiveTender.tsx index eeca2c9..3e48882 100644 --- a/src/Screens/Tender/LiveTender.tsx +++ b/src/Screens/Tender/LiveTender.tsx @@ -57,8 +57,8 @@ const LiveTender = () => { tenderOfWork={item.departmentName} tenderFees={item.documentFees} tenderNumber={item.tenderNumber} - onPurchasePress={() => { Dispatch(togglePurchaseTender(item)) }} - onDetailsPress={() => { }} + // onPurchasePress={() => { Dispatch(togglePurchaseTender(item)) }} + // onDetailsPress={() => navigation.navigate('LiveTenderDetail', {item})} /> }, [SelectedPurchaseList] diff --git a/src/Screens/Tender/LiveTenderDetail.tsx b/src/Screens/Tender/LiveTenderDetail.tsx new file mode 100644 index 0000000..5cd345a --- /dev/null +++ b/src/Screens/Tender/LiveTenderDetail.tsx @@ -0,0 +1,18 @@ +import { StyleSheet, Text, View } from 'react-native' +import React from 'react' +import { useRoute } from '@react-navigation/native'; + +const LiveTenderDetail = () => { + const route = useRoute(); + const { tender } = route.params; + console.log("live tender details : ", tender) + return ( + + LiveTenderDetail + + ) +} + +export default LiveTenderDetail + +const styles = StyleSheet.create({}) \ No newline at end of file diff --git a/src/Screens/Tender/LiveTenderTile.tsx b/src/Screens/Tender/LiveTenderTile.tsx index 71890a6..bc5104c 100644 --- a/src/Screens/Tender/LiveTenderTile.tsx +++ b/src/Screens/Tender/LiveTenderTile.tsx @@ -6,6 +6,7 @@ import { LiveTenderTileProps } from './types/types'; import { Calendar, Tag, Info, ArrowRight } from 'lucide-react-native'; import TenderDetail from './Modal/TenderFullDetail'; import TenderFullDetail from './Modal/TenderFullDetail'; +import { useNavigation } from '@react-navigation/native'; const LiveTenderTile: React.FC = ({ data, @@ -16,10 +17,12 @@ const LiveTenderTile: React.FC = ({ purchaseEnd, tenderFees, tenderNumber, + onDetailsPress }) => { - const [showDetail, setShowDetail] = React.useState(false); + const navigation: any = useNavigation(); const purchaseEnded = moment().isAfter(moment(purchaseEnd, 'DD-MM-YYYY HH:mm:ss')); + console.log("live tender data : ", data) return ( {/* Status Tag */} @@ -33,7 +36,7 @@ const LiveTenderTile: React.FC = ({ setShowDetail(true)} + onPress={() => navigation.navigate('LiveTenderDetail', data)} > {/* Header */} @@ -72,7 +75,7 @@ const LiveTenderTile: React.FC = ({ {/* Action Bar */} - setShowDetail(true)}> + Details @@ -104,7 +107,7 @@ const LiveTenderTile: React.FC = ({ {/* Tender Detail Modal */} - setShowDetail(false)} /> + {/* setShowDetail(false)} /> */} ); diff --git a/src/Screens/Tender/ProceedToBidDetail.tsx b/src/Screens/Tender/ProceedToBidDetail.tsx index f937852..086ef56 100644 --- a/src/Screens/Tender/ProceedToBidDetail.tsx +++ b/src/Screens/Tender/ProceedToBidDetail.tsx @@ -2,85 +2,24 @@ import { StyleSheet, Text, View, ScrollView, StatusBar, TouchableOpacity } from import React from 'react' import { InsideHeader } from '../../Component/Index' import colors from '../../Constant/Color' -import { useNavigation } from '@react-navigation/native' +import { useNavigation, useRoute } from '@react-navigation/native' +import { useProceedToBid } from '../../Services/BBPS/Hooks' const ProceedToBidDetail = () => { // Sample data based on your JSON - const navigation = useNavigation() - const tenderData = { - tenderId: 1372, - envelopeASubmittStatus: true, - envelopeBSubmittStatus: true, - envelopeCSubmittStatus: true, - envelopeA_Logs: { - logId: 314, - contractorId: 1, - activity: "Bid on Envelope A", - tenderId: 1372, - dateTime: "Fri Dec 12 13:07:44 IST 2025", - osName: "Linux", - browserName: "Chrome-142.0.0.0", - ipAddress: "192.168.5.10", - macAddress: "00:00:00:00:00:00", - logMessage: "Envelope A bidding is Submitted", - headingMsg: null, - status: null, - envelope: "EA" - }, - envelopeB_Logs: { - logId: 315, - contractorId: 1, - activity: "Bid on Envelope B", - tenderId: 1372, - dateTime: "Fri Dec 12 13:08:00 IST 2025", - osName: "Linux", - browserName: "Chrome-142.0.0.0", - ipAddress: "192.168.5.10", - macAddress: "00:00:00:00:00:00", - logMessage: "Envelope B bidding is Submitted", - headingMsg: null, - status: null, - envelope: "EB" - }, - envelopeC_Logs: { - logId: 316, - contractorId: 1, - activity: "Bid on Envelope C", - tenderId: 1372, - dateTime: "Fri Dec 12 13:08:31 IST 2025", - osName: "Linux", - browserName: "Chrome-142.0.0.0", - ipAddress: "192.168.5.10", - macAddress: "00:00:00:00:00:00", - logMessage: "Envelope C bidding is Submitted", - headingMsg: "Percentage Rate Tender", - status: null, - envelope: "EC" - }, - showEB: true, - showEC: true, - showQCBS: false, - showLCS: false, - viewBid: true, - proceedtoBid: false, - tenderNumber: "TN/152", - emdInFig: "100", - tenderBidWithdraw: "Allowed", - tenderRebid: "Allowed", - nitNo: "NIT-410", - nameofWork: "Tender is created for Testing Process only", - reBid: "Allowed", - bidWithDraw: "Allowed", - envelopeType: "3", - biddingStatus: true, - tenderStages: "1", - dscStatus: false, - submittedStartDate: [2025, 3, 4, 10, 0], - submittedEndDate: [2026, 3, 4, 23, 50], - bidWithdrawStatus: true - }; + const route = useRoute() + const tenderData = route.params?.tender; + const {data, refetch} = useProceedToBid(tenderData?.tenderId); + const navigation = useNavigation() // Format date from array + + const handleStartBidding = () => { + refetch(); + if (data) { + navigation.navigate('TenderBidding', { tenderData: tenderData , bidData: data.data }); + } + } const formatDate = (dateArray: any[]) => { if (!dateArray || dateArray.length < 3) return "N/A"; const [year, month, day, hour = 0, minute = 0] = dateArray; @@ -103,39 +42,39 @@ const ProceedToBidDetail = () => { {title} - {log.envelope} + {log?.envelope} Activity: - {log.activity} + {log?.activity} Date & Time: - {log.dateTime} + {log?.dateTime} System Info: - {log.osName} / {log.browserName} + {log?.osName} / {log?.browserName} IP Address: - {log.ipAddress} + {log?.ipAddress} Status Message: - {log.logMessage} + {log?.logMessage} - {log.headingMsg && ( + {log?.headingMsg && ( Heading: - {log.headingMsg} + {log?.headingMsg} )} @@ -278,23 +217,19 @@ const ProceedToBidDetail = () => { - - { - navigation.navigate('TenderBidding', { tenderData: tenderData }); - }}> - Proceed to Bid - - { - // tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? ( - // { - // navigation.navigate('TenderBidding', { tenderData: tenderData }); - // }}> - // Proceed to Bid - // - // ) : One time bidding is completed - } + + + { + tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? ( + + + Start Bidding + + + ) : One time bidding is completed + } ) diff --git a/src/Screens/Tender/PurchaseTenderAllList.tsx b/src/Screens/Tender/PurchaseTenderAllList.tsx index 69072ac..59d1e0d 100644 --- a/src/Screens/Tender/PurchaseTenderAllList.tsx +++ b/src/Screens/Tender/PurchaseTenderAllList.tsx @@ -23,6 +23,8 @@ const PurchaseTenderAllList = () => { const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isRefetching, refetch }: any = useFetchPurchaseTender(); const [showRefreshBanner, setShowRefreshBanner] = useState(false); + + console.log("data for tender : ", data) useEffect(() => { if (isRefetching) { setShowRefreshBanner(true); diff --git a/src/Screens/Tender/PurchaseTenderTile.tsx b/src/Screens/Tender/PurchaseTenderTile.tsx index a3c72bd..30b79db 100644 --- a/src/Screens/Tender/PurchaseTenderTile.tsx +++ b/src/Screens/Tender/PurchaseTenderTile.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { use, useEffect } from 'react'; import { View, Text, @@ -33,21 +33,17 @@ const PurchaseTenderTile = ({ elevation: elevation.value, })); - const { data: tenderResponse, }: any = useFetchTenderById(item?.tenderId); - const tender = tenderResponse?.data; + const { data: tenderResponse, }: any = useFetchTenderById(item?.tenderId); + const tender = tenderResponse?.data; - // const { - // refetch, - // isFetching, - // isError, - // } = useProceedToBid(item?.tenderId); + // console.log("item my : ", item) - // const handleProceed = async (item: any) => { - // const res = await refetch(); - // if (res.data && !isError) { - // navigation.navigate('TenderBidding', { tenderData: res.data?.data }); - // } - // }; + { + if (item?.nitNumber == 'TN/111') { + console.log("tender item : ", item?.nitNumber) + + } + } const handlePressIn = () => { scale.value = withTiming(0.97, { duration: 120 }); @@ -59,12 +55,18 @@ const PurchaseTenderTile = ({ elevation.value = withTiming(8, { duration: 160 }); }; - const isLive = item?.liveStatus === true; + const isLive = item?.biddingStatus === true; const statusColor = isLive ? colors.primary : '#94A3B8'; const lightStatusBg = isLive ? '#EFF6FF' : '#F8FAFC'; const [showDetail, setShowDetail] = React.useState(false); + useEffect(() => { + if(item?.tenderNumber == 'TN/210'){ + console.log("tender item : ", item) + } + }, [item]); + return ( - Purchase Ends: + Bid Ends: {moment( - item?.tenderKeyDatesAmendment?.tenderPurchaseDate?.endDateTime, + item?.keydates?.bidSubmissionDate?.endDateTime, 'DD-MM-YYYY HH:mm:ss' - ).format('DD MMM, hh:mm A')} + ).format('DD MMM YYYY, hh:mm A')} @@ -121,7 +123,7 @@ const PurchaseTenderTile = ({ {isLive ? ( ) : ( @@ -133,7 +135,7 @@ const PurchaseTenderTile = ({ disabled={!isLive} onPress={() => { if (isLive) { - navigation.navigate('ProceedToBidDetail', { tender }); + navigation.navigate('ProceedToBidDetail', { tender }); } }} activeOpacity={0.85} diff --git a/src/Screens/Tender/tenderBidding/TenderBidding.tsx b/src/Screens/Tender/tenderBidding/TenderBidding.tsx index b4e10bf..53b7ec3 100644 --- a/src/Screens/Tender/tenderBidding/TenderBidding.tsx +++ b/src/Screens/Tender/tenderBidding/TenderBidding.tsx @@ -53,6 +53,7 @@ const TenderBidding = () => { const navigation = useNavigation(); const [bidData] = useState(route.params?.tenderData || null); + const tenderData = route.params?.bidData || null; const [activeEnvelope, setActiveEnvelope] = useState('A'); const [isLoading, setIsLoading] = useState(false); const [envelopForm, setEnvelopForm] = useState({ @@ -227,9 +228,9 @@ const TenderBidding = () => { }; const hasEnvelopes = () => { - const hasA = bidData?.tenderEnvelopeAList?.length > 0; - const hasB = bidData?.tenderEnvelopeBList?.length > 0; - // const hasC = bidData?.tenderEnvelopeCList?.length > 0; + const hasA = tenderData?.tenderEnvelopeAList?.length > 0; + const hasB = tenderData?.tenderEnvelopeBList?.length > 0; + // const hasC = tenderData?.tenderEnvelopeCList?.length > 0; return hasA || hasB; }; @@ -442,7 +443,8 @@ const TenderBidding = () => { ); } - console.log("route for date : ", route.params) + // console.log("route for date : ", bidData) + // console.log("bid envelop : ", tenderData) return ( @@ -467,20 +469,19 @@ const TenderBidding = () => { Bid Envelopes - {bidData?.showEA && ( + {tenderData?.showEA && ( setActiveEnvelope('A')} /> )} - {bidData?.showEB && ( + {tenderData?.showEB && ( { - if - (bidData?.envelopeASubmittStatus) { + if (tenderData?.envelopeASubmittStatus) { setActiveEnvelope('B') } else { Alert.alert('Info', 'First Fill Envelop A First') @@ -488,7 +489,7 @@ const TenderBidding = () => { }} /> )} - {bidData?.showEC && ( + {tenderData?.showEC && ( { {/* Envelope A List */} - {bidData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && ( + {tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && ( Envelope {activeEnvelope} Details item?.[`tenderEnvelope${activeEnvelope}SequnceId`]?.toString()} renderItem={({ item }) => renderEnvelopeItem({ item, envelopeType: activeEnvelope })} scrollEnabled={false} diff --git a/src/Screens/index.ts b/src/Screens/index.ts index 3f4d9de..d86e2e4 100644 --- a/src/Screens/index.ts +++ b/src/Screens/index.ts @@ -7,6 +7,7 @@ import Home from "./Home/Home"; import Login from "./Login/Login"; import Onboarding from "./Onboarding/Onboarding"; import Splash from "./Splash/Splash"; +import LiveTenderDetail from "./Tender/LiveTenderDetail"; import ProceedToBidDetail from "./Tender/ProceedToBidDetail"; import ProceedToPurTender from "./Tender/ProceedToPurTender"; import PurchaseTenderList from "./Tender/PurchaseTenderList"; @@ -28,6 +29,7 @@ const Screens = { PurchaseTenderList, ProceedToPurTender, TenderBidding, - ProceedToBidDetail + ProceedToBidDetail, + LiveTenderDetail } export default Screens \ No newline at end of file diff --git a/src/Services/BBPS/Hooks.ts b/src/Services/BBPS/Hooks.ts index 070195a..2d3c1c9 100644 --- a/src/Services/BBPS/Hooks.ts +++ b/src/Services/BBPS/Hooks.ts @@ -20,30 +20,31 @@ export const useDashboard = () => { // Auction & Tender export const useFetchPurchaseTender = () => { - return useInfiniteQuery({ - queryKey: ['fetchPurchaseTender'], - initialPageParam: 1, - queryFn: ({ pageParam }) => - fetchPurchaseTender({ - page: pageParam, - size: 10, - }), + return useInfiniteQuery({ + queryKey: ['fetchPurchaseTender'], + queryFn: ({ pageParam = 0 }) => + fetchPurchaseTender({ + page: pageParam, + size: 10, + }), + initialPageParam: 0, + getNextPageParam: (lastPage, allPages) => { + console.log('last page : ', lastPage) + console.log("all page : ", allPages) + const {totalCount } = lastPage; - getNextPageParam: (lastPage) => { - const { page, size, totalCount } = lastPage; + const totalPages = Math.ceil(totalCount / 10); + const nextPage = allPages.length; + return nextPage < totalPages ? nextPage : undefined; + }, - const totalPages = Math.ceil(totalCount / size); - - return page < totalPages ? page + 1 : undefined; - }, - - select: (data) => ({ - ...data, - result: data.pages.flatMap( - (page: any) => page?.data ?? [] - ), - }), - }); + select: (data) => ({ + ...data, + result: data.pages.flatMap( + (page: any) => page?.data ?? [] + ), + }), + }); }; @@ -107,16 +108,16 @@ export const useFetchTenderById = (tenderId: string) => { return useQuery({ queryKey: ['fetchTenderById', tenderId], queryFn: () => fetchTenderById(tenderId) - + }); } export const useProceedToBid = (tenderId?: string) => { - return useQuery({ - queryKey: ['proceedToBid', tenderId], - queryFn: () => proceedToBid(tenderId as string), - enabled: false, // 👈 manual trigger - }); + return useQuery({ + queryKey: ['proceedToBid', tenderId], + queryFn: () => proceedToBid(tenderId as string), + enabled: false, // 👈 manual trigger + }); };