This commit is contained in:
Jaanu423
2026-01-09 10:28:25 +05:30
parent 860d70d86e
commit 0e93334941
12 changed files with 129 additions and 169 deletions
-3
View File
@@ -13,20 +13,17 @@ export const apiCall = async <R, D = {}>(
try { try {
const token: any = store.getState().token.token; const token: any = store.getState().token.token;
console.log("token : ", token)
const response = await axios({ const response = await axios({
method, method,
url, url,
data, data,
params, params,
// withCredentials: true, // withCredentials: true,
baseURL: Variable.Main_Base,
headers: { headers: {
Authentication: `Bearer ${token?.token}`, Authentication: `Bearer ${token?.token}`,
'Content-Type': contentType || 'application/json', 'Content-Type': contentType || 'application/json',
}, },
}); });
console.log("url : ", url)
return response.data; return response.data;
} catch (error: any) { } catch (error: any) {
const errorMessage = error?.response?.data?.error; const errorMessage = error?.response?.data?.error;
+1 -3
View File
@@ -1,6 +1,3 @@
import ProceedToBidDetail from "../Screens/Tender/ProceedToBidDetail"
import TenderBidding from "../Screens/Tender/tenderBidding/TenderBidding"
const NavigationString = { const NavigationString = {
Login: 'Login', Login: 'Login',
Splash: 'Splash', Splash: 'Splash',
@@ -17,5 +14,6 @@ const NavigationString = {
ProceedToPurTender:'ProceedToPurTender', ProceedToPurTender:'ProceedToPurTender',
TenderBidding:'TenderBidding', TenderBidding:'TenderBidding',
ProceedToBidDetail:'ProceedToBidDetail', ProceedToBidDetail:'ProceedToBidDetail',
LiveTenderDetail:'LiveTenderDetail',
} }
export default NavigationString export default NavigationString
+1
View File
@@ -40,6 +40,7 @@ export default function MainStack() {
<Stack.Screen name={NavigationString.ProceedToPurTender} component={Screens.ProceedToPurTender} options={option} /> <Stack.Screen name={NavigationString.ProceedToPurTender} component={Screens.ProceedToPurTender} options={option} />
<Stack.Screen name={NavigationString.TenderBidding} component={Screens.TenderBidding} options={option} /> <Stack.Screen name={NavigationString.TenderBidding} component={Screens.TenderBidding} options={option} />
<Stack.Screen name={NavigationString.ProceedToBidDetail} component={Screens.ProceedToBidDetail} options={option} /> <Stack.Screen name={NavigationString.ProceedToBidDetail} component={Screens.ProceedToBidDetail} options={option} />
<Stack.Screen name={NavigationString.LiveTenderDetail} component={Screens.LiveTenderDetail} options={option} />
</Stack.Navigator> </Stack.Navigator>
); );
+2 -2
View File
@@ -57,8 +57,8 @@ const LiveTender = () => {
tenderOfWork={item.departmentName} tenderOfWork={item.departmentName}
tenderFees={item.documentFees} tenderFees={item.documentFees}
tenderNumber={item.tenderNumber} tenderNumber={item.tenderNumber}
onPurchasePress={() => { Dispatch(togglePurchaseTender(item)) }} // onPurchasePress={() => { Dispatch(togglePurchaseTender(item)) }}
onDetailsPress={() => { }} // onDetailsPress={() => navigation.navigate('LiveTenderDetail', {item})}
/> />
}, },
[SelectedPurchaseList] [SelectedPurchaseList]
+18
View File
@@ -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<any>();
const { tender } = route.params;
console.log("live tender details : ", tender)
return (
<View>
<Text>LiveTenderDetail</Text>
</View>
)
}
export default LiveTenderDetail
const styles = StyleSheet.create({})
+7 -4
View File
@@ -6,6 +6,7 @@ import { LiveTenderTileProps } from './types/types';
import { Calendar, Tag, Info, ArrowRight } from 'lucide-react-native'; import { Calendar, Tag, Info, ArrowRight } from 'lucide-react-native';
import TenderDetail from './Modal/TenderFullDetail'; import TenderDetail from './Modal/TenderFullDetail';
import TenderFullDetail from './Modal/TenderFullDetail'; import TenderFullDetail from './Modal/TenderFullDetail';
import { useNavigation } from '@react-navigation/native';
const LiveTenderTile: React.FC<LiveTenderTileProps> = ({ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
data, data,
@@ -16,10 +17,12 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
purchaseEnd, purchaseEnd,
tenderFees, tenderFees,
tenderNumber, tenderNumber,
onDetailsPress
}) => { }) => {
const [showDetail, setShowDetail] = React.useState(false); const navigation: any = useNavigation();
const purchaseEnded = moment().isAfter(moment(purchaseEnd, 'DD-MM-YYYY HH:mm:ss')); const purchaseEnded = moment().isAfter(moment(purchaseEnd, 'DD-MM-YYYY HH:mm:ss'));
console.log("live tender data : ", data)
return ( return (
<View style={styles.cardWrapper}> <View style={styles.cardWrapper}>
{/* Status Tag */} {/* Status Tag */}
@@ -33,7 +36,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
<TouchableOpacity <TouchableOpacity
style={styles.container} style={styles.container}
activeOpacity={0.9} activeOpacity={0.9}
onPress={() => setShowDetail(true)} onPress={() => navigation.navigate('LiveTenderDetail', data)}
> >
{/* Header */} {/* Header */}
<View style={styles.header}> <View style={styles.header}>
@@ -72,7 +75,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
{/* Action Bar */} {/* Action Bar */}
<View style={styles.actionBar}> <View style={styles.actionBar}>
<TouchableOpacity style={styles.iconBtn} onPress={() => setShowDetail(true)}> <TouchableOpacity style={styles.iconBtn} onPress={onDetailsPress}>
<Info size={18} color={colors.primary} /> <Info size={18} color={colors.primary} />
<Text style={styles.iconBtnText}>Details</Text> <Text style={styles.iconBtnText}>Details</Text>
</TouchableOpacity> </TouchableOpacity>
@@ -104,7 +107,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
</View> </View>
{/* Tender Detail Modal */} {/* Tender Detail Modal */}
<TenderFullDetail visible={showDetail} data={data} onClose={() => setShowDetail(false)} /> {/* <TenderFullDetail visible={showDetail} data={data} onClose={() => setShowDetail(false)} /> */}
</TouchableOpacity> </TouchableOpacity>
</View> </View>
); );
+32 -97
View File
@@ -2,85 +2,24 @@ import { StyleSheet, Text, View, ScrollView, StatusBar, TouchableOpacity } from
import React from 'react' import React from 'react'
import { InsideHeader } from '../../Component/Index' import { InsideHeader } from '../../Component/Index'
import colors from '../../Constant/Color' 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 = () => { const ProceedToBidDetail = () => {
// Sample data based on your JSON // Sample data based on your JSON
const navigation = useNavigation<any>() const route = useRoute()
const tenderData = { const tenderData = route.params?.tender;
tenderId: 1372, const {data, refetch} = useProceedToBid(tenderData?.tenderId);
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 navigation = useNavigation<any>()
// Format date from array // Format date from array
const handleStartBidding = () => {
refetch();
if (data) {
navigation.navigate('TenderBidding', { tenderData: tenderData , bidData: data.data });
}
}
const formatDate = (dateArray: any[]) => { const formatDate = (dateArray: any[]) => {
if (!dateArray || dateArray.length < 3) return "N/A"; if (!dateArray || dateArray.length < 3) return "N/A";
const [year, month, day, hour = 0, minute = 0] = dateArray; const [year, month, day, hour = 0, minute = 0] = dateArray;
@@ -103,39 +42,39 @@ const ProceedToBidDetail = () => {
<View style={styles.cardHeader}> <View style={styles.cardHeader}>
<Text style={styles.cardTitle}>{title}</Text> <Text style={styles.cardTitle}>{title}</Text>
<View style={[styles.envelopeBadge, { backgroundColor: colors.primary }]}> <View style={[styles.envelopeBadge, { backgroundColor: colors.primary }]}>
<Text style={styles.envelopeBadgeText}>{log.envelope}</Text> <Text style={styles.envelopeBadgeText}>{log?.envelope}</Text>
</View> </View>
</View> </View>
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>Activity:</Text> <Text style={styles.label}>Activity:</Text>
<Text style={styles.value}>{log.activity}</Text> <Text style={styles.value}>{log?.activity}</Text>
</View> </View>
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>Date & Time:</Text> <Text style={styles.label}>Date & Time:</Text>
<Text style={styles.value}>{log.dateTime}</Text> <Text style={styles.value}>{log?.dateTime}</Text>
</View> </View>
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>System Info:</Text> <Text style={styles.label}>System Info:</Text>
<Text style={styles.value}>{log.osName} / {log.browserName}</Text> <Text style={styles.value}>{log?.osName} / {log?.browserName}</Text>
</View> </View>
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>IP Address:</Text> <Text style={styles.label}>IP Address:</Text>
<Text style={styles.value}>{log.ipAddress}</Text> <Text style={styles.value}>{log?.ipAddress}</Text>
</View> </View>
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>Status Message:</Text> <Text style={styles.label}>Status Message:</Text>
<Text style={[styles.value, styles.successText]}>{log.logMessage}</Text> <Text style={[styles.value, styles.successText]}>{log?.logMessage}</Text>
</View> </View>
{log.headingMsg && ( {log?.headingMsg && (
<View style={styles.logDetailRow}> <View style={styles.logDetailRow}>
<Text style={styles.label}>Heading:</Text> <Text style={styles.label}>Heading:</Text>
<Text style={styles.value}>{log.headingMsg}</Text> <Text style={styles.value}>{log?.headingMsg}</Text>
</View> </View>
)} )}
</View> </View>
@@ -278,23 +217,19 @@ const ProceedToBidDetail = () => {
<View style={styles.footerSpace} /> <View style={styles.footerSpace} />
</ScrollView> </ScrollView>
<View style={styles.footer}>
<TouchableOpacity style={styles.proceedButton} onPress={() => {
navigation.navigate('TenderBidding', { tenderData: tenderData });
}}>
<Text style={styles.proceedButtonText}>Proceed to Bid</Text>
</TouchableOpacity>
{
// tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? (
// <TouchableOpacity style={styles.proceedButton} onPress={() => {
// navigation.navigate('TenderBidding', { tenderData: tenderData });
// }}>
// <Text style={styles.proceedButtonText}>Proceed to Bid</Text>
// </TouchableOpacity>
// ) : <Text style={styles.footerText}>One time bidding is completed</Text>
} </View> <View style={styles.footer}>
{
tenderData?.proceedtoBid && !tenderData?.viewBid && tenderData?.biddingStatus && tenderData?.bidWithdrawStatus === false ? (
<TouchableOpacity style={styles.proceedButton} onPress={handleStartBidding}>
<Text style={styles.proceedButtonText}>Start Bidding</Text>
</TouchableOpacity>
) : <Text style={styles.footerText}>One time bidding is completed</Text>
} </View>
</View> </View>
) )
@@ -23,6 +23,8 @@ const PurchaseTenderAllList = () => {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isRefetching, refetch }: any = useFetchPurchaseTender(); const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isRefetching, refetch }: any = useFetchPurchaseTender();
const [showRefreshBanner, setShowRefreshBanner] = useState(false); const [showRefreshBanner, setShowRefreshBanner] = useState(false);
console.log("data for tender : ", data)
useEffect(() => { useEffect(() => {
if (isRefetching) { if (isRefetching) {
setShowRefreshBanner(true); setShowRefreshBanner(true);
+22 -20
View File
@@ -1,4 +1,4 @@
import React from 'react'; import React, { use, useEffect } from 'react';
import { import {
View, View,
Text, Text,
@@ -33,21 +33,17 @@ const PurchaseTenderTile = ({
elevation: elevation.value, elevation: elevation.value,
})); }));
const { data: tenderResponse, }: any = useFetchTenderById(item?.tenderId); const { data: tenderResponse, }: any = useFetchTenderById(item?.tenderId);
const tender = tenderResponse?.data; const tender = tenderResponse?.data;
// const { // console.log("item my : ", item)
// refetch,
// isFetching,
// isError,
// } = useProceedToBid(item?.tenderId);
// const handleProceed = async (item: any) => { {
// const res = await refetch(); if (item?.nitNumber == 'TN/111') {
// if (res.data && !isError) { console.log("tender item : ", item?.nitNumber)
// navigation.navigate('TenderBidding', { tenderData: res.data?.data });
// } }
// }; }
const handlePressIn = () => { const handlePressIn = () => {
scale.value = withTiming(0.97, { duration: 120 }); scale.value = withTiming(0.97, { duration: 120 });
@@ -59,12 +55,18 @@ const PurchaseTenderTile = ({
elevation.value = withTiming(8, { duration: 160 }); elevation.value = withTiming(8, { duration: 160 });
}; };
const isLive = item?.liveStatus === true; const isLive = item?.biddingStatus === true;
const statusColor = isLive ? colors.primary : '#94A3B8'; const statusColor = isLive ? colors.primary : '#94A3B8';
const lightStatusBg = isLive ? '#EFF6FF' : '#F8FAFC'; const lightStatusBg = isLive ? '#EFF6FF' : '#F8FAFC';
const [showDetail, setShowDetail] = React.useState(false); const [showDetail, setShowDetail] = React.useState(false);
useEffect(() => {
if(item?.tenderNumber == 'TN/210'){
console.log("tender item : ", item)
}
}, [item]);
return ( return (
<Animated.View <Animated.View
entering={FadeInUp.duration(400)} entering={FadeInUp.duration(400)}
@@ -105,11 +107,11 @@ const PurchaseTenderTile = ({
setShowDetail(true) setShowDetail(true)
}}> }}>
<Text style={styles.dateText}> <Text style={styles.dateText}>
<Text style={styles.dateLabel}>Purchase Ends: </Text> <Text style={styles.dateLabel}>Bid Ends: </Text>
{moment( {moment(
item?.tenderKeyDatesAmendment?.tenderPurchaseDate?.endDateTime, item?.keydates?.bidSubmissionDate?.endDateTime,
'DD-MM-YYYY HH:mm:ss' 'DD-MM-YYYY HH:mm:ss'
).format('DD MMM, hh:mm A')} ).format('DD MMM YYYY, hh:mm A')}
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
@@ -121,7 +123,7 @@ const PurchaseTenderTile = ({
{isLive ? ( {isLive ? (
<CountdownTimer <CountdownTimer
endDate={ endDate={
item?.tenderKeyDatesAmendment?.tenderPurchaseDate?.endDateTime item?.keydates?.bidSubmissionDate?.endDateTime
} }
/> />
) : ( ) : (
@@ -133,7 +135,7 @@ const PurchaseTenderTile = ({
disabled={!isLive} disabled={!isLive}
onPress={() => { onPress={() => {
if (isLive) { if (isLive) {
navigation.navigate('ProceedToBidDetail', { tender }); navigation.navigate('ProceedToBidDetail', { tender });
} }
}} }}
activeOpacity={0.85} activeOpacity={0.85}
@@ -53,6 +53,7 @@ const TenderBidding = () => {
const navigation = useNavigation(); const navigation = useNavigation();
const [bidData] = useState<any>(route.params?.tenderData || null); const [bidData] = useState<any>(route.params?.tenderData || null);
const tenderData = route.params?.bidData || null;
const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType | null>('A'); const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType | null>('A');
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({ const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({
@@ -227,9 +228,9 @@ const TenderBidding = () => {
}; };
const hasEnvelopes = () => { const hasEnvelopes = () => {
const hasA = bidData?.tenderEnvelopeAList?.length > 0; const hasA = tenderData?.tenderEnvelopeAList?.length > 0;
const hasB = bidData?.tenderEnvelopeBList?.length > 0; const hasB = tenderData?.tenderEnvelopeBList?.length > 0;
// const hasC = bidData?.tenderEnvelopeCList?.length > 0; // const hasC = tenderData?.tenderEnvelopeCList?.length > 0;
return hasA || hasB; 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 ( return (
<View style={styles.container}> <View style={styles.container}>
<InsideHeader title="Tender Bidding Start" showArrow /> <InsideHeader title="Tender Bidding Start" showArrow />
@@ -467,20 +469,19 @@ const TenderBidding = () => {
<View style={styles.card}> <View style={styles.card}>
<Text style={styles.sectionTitle}>Bid Envelopes</Text> <Text style={styles.sectionTitle}>Bid Envelopes</Text>
<View style={styles.envelopeRow}> <View style={styles.envelopeRow}>
{bidData?.showEA && ( {tenderData?.showEA && (
<EnvelopeButton <EnvelopeButton
title="Envelope A" title="Envelope A"
envelopeType="A" envelopeType="A"
onPress={() => setActiveEnvelope('A')} onPress={() => setActiveEnvelope('A')}
/> />
)} )}
{bidData?.showEB && ( {tenderData?.showEB && (
<EnvelopeButton <EnvelopeButton
title="Envelope B" title="Envelope B"
envelopeType="B" envelopeType="B"
onPress={() => { onPress={() => {
if if (tenderData?.envelopeASubmittStatus) {
(bidData?.envelopeASubmittStatus) {
setActiveEnvelope('B') setActiveEnvelope('B')
} else { } else {
Alert.alert('Info', 'First Fill Envelop A First') Alert.alert('Info', 'First Fill Envelop A First')
@@ -488,7 +489,7 @@ const TenderBidding = () => {
}} }}
/> />
)} )}
{bidData?.showEC && ( {tenderData?.showEC && (
<EnvelopeButton <EnvelopeButton
title="Envelope C" title="Envelope C"
envelopeType="C" envelopeType="C"
@@ -498,11 +499,11 @@ const TenderBidding = () => {
</View> </View>
</View> </View>
{/* Envelope A List */} {/* Envelope A List */}
{bidData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && ( {tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && (
<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
data={bidData?.[`tenderEnvelope${activeEnvelope}List`]} data={tenderData?.[`tenderEnvelope${activeEnvelope}List`]}
keyExtractor={(item) => item?.[`tenderEnvelope${activeEnvelope}SequnceId`]?.toString()} keyExtractor={(item) => item?.[`tenderEnvelope${activeEnvelope}SequnceId`]?.toString()}
renderItem={({ item }) => renderEnvelopeItem({ item, envelopeType: activeEnvelope })} renderItem={({ item }) => renderEnvelopeItem({ item, envelopeType: activeEnvelope })}
scrollEnabled={false} scrollEnabled={false}
+3 -1
View File
@@ -7,6 +7,7 @@ import Home from "./Home/Home";
import Login from "./Login/Login"; import Login from "./Login/Login";
import Onboarding from "./Onboarding/Onboarding"; import Onboarding from "./Onboarding/Onboarding";
import Splash from "./Splash/Splash"; import Splash from "./Splash/Splash";
import LiveTenderDetail from "./Tender/LiveTenderDetail";
import ProceedToBidDetail from "./Tender/ProceedToBidDetail"; import ProceedToBidDetail from "./Tender/ProceedToBidDetail";
import ProceedToPurTender from "./Tender/ProceedToPurTender"; import ProceedToPurTender from "./Tender/ProceedToPurTender";
import PurchaseTenderList from "./Tender/PurchaseTenderList"; import PurchaseTenderList from "./Tender/PurchaseTenderList";
@@ -28,6 +29,7 @@ const Screens = {
PurchaseTenderList, PurchaseTenderList,
ProceedToPurTender, ProceedToPurTender,
TenderBidding, TenderBidding,
ProceedToBidDetail ProceedToBidDetail,
LiveTenderDetail
} }
export default Screens export default Screens
+29 -28
View File
@@ -20,30 +20,31 @@ export const useDashboard = () => {
// Auction & Tender // Auction & Tender
export const useFetchPurchaseTender = () => { export const useFetchPurchaseTender = () => {
return useInfiniteQuery({ return useInfiniteQuery({
queryKey: ['fetchPurchaseTender'], queryKey: ['fetchPurchaseTender'],
initialPageParam: 1, queryFn: ({ pageParam = 0 }) =>
queryFn: ({ pageParam }) => fetchPurchaseTender({
fetchPurchaseTender({ page: pageParam,
page: pageParam, size: 10,
size: 10, }),
}), initialPageParam: 0,
getNextPageParam: (lastPage, allPages) => {
console.log('last page : ', lastPage)
console.log("all page : ", allPages)
const {totalCount } = lastPage;
getNextPageParam: (lastPage) => { const totalPages = Math.ceil(totalCount / 10);
const { page, size, totalCount } = lastPage; const nextPage = allPages.length;
return nextPage < totalPages ? nextPage : undefined;
},
const totalPages = Math.ceil(totalCount / size); select: (data) => ({
...data,
return page < totalPages ? page + 1 : undefined; 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({ return useQuery({
queryKey: ['fetchTenderById', tenderId], queryKey: ['fetchTenderById', tenderId],
queryFn: () => fetchTenderById(tenderId) queryFn: () => fetchTenderById(tenderId)
}); });
} }
export const useProceedToBid = (tenderId?: string) => { 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 enabled: false, // 👈 manual trigger
}); });
}; };