eender
This commit is contained in:
@@ -13,20 +13,17 @@ export const apiCall = async <R, D = {}>(
|
||||
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;
|
||||
|
||||
@@ -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
|
||||
@@ -40,6 +40,7 @@ export default function MainStack() {
|
||||
<Stack.Screen name={NavigationString.ProceedToPurTender} component={Screens.ProceedToPurTender} 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.LiveTenderDetail} component={Screens.LiveTenderDetail} options={option} />
|
||||
|
||||
</Stack.Navigator>
|
||||
);
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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({})
|
||||
@@ -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<LiveTenderTileProps> = ({
|
||||
data,
|
||||
@@ -16,10 +17,12 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
|
||||
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 (
|
||||
<View style={styles.cardWrapper}>
|
||||
{/* Status Tag */}
|
||||
@@ -33,7 +36,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
|
||||
<TouchableOpacity
|
||||
style={styles.container}
|
||||
activeOpacity={0.9}
|
||||
onPress={() => setShowDetail(true)}
|
||||
onPress={() => navigation.navigate('LiveTenderDetail', data)}
|
||||
>
|
||||
{/* Header */}
|
||||
<View style={styles.header}>
|
||||
@@ -72,7 +75,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
|
||||
|
||||
{/* Action Bar */}
|
||||
<View style={styles.actionBar}>
|
||||
<TouchableOpacity style={styles.iconBtn} onPress={() => setShowDetail(true)}>
|
||||
<TouchableOpacity style={styles.iconBtn} onPress={onDetailsPress}>
|
||||
<Info size={18} color={colors.primary} />
|
||||
<Text style={styles.iconBtnText}>Details</Text>
|
||||
</TouchableOpacity>
|
||||
@@ -104,7 +107,7 @@ const LiveTenderTile: React.FC<LiveTenderTileProps> = ({
|
||||
</View>
|
||||
|
||||
{/* Tender Detail Modal */}
|
||||
<TenderFullDetail visible={showDetail} data={data} onClose={() => setShowDetail(false)} />
|
||||
{/* <TenderFullDetail visible={showDetail} data={data} onClose={() => setShowDetail(false)} /> */}
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
);
|
||||
|
||||
@@ -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<any>()
|
||||
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<any>()
|
||||
// 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 = () => {
|
||||
<View style={styles.cardHeader}>
|
||||
<Text style={styles.cardTitle}>{title}</Text>
|
||||
<View style={[styles.envelopeBadge, { backgroundColor: colors.primary }]}>
|
||||
<Text style={styles.envelopeBadgeText}>{log.envelope}</Text>
|
||||
<Text style={styles.envelopeBadgeText}>{log?.envelope}</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View style={styles.logDetailRow}>
|
||||
<Text style={styles.label}>Activity:</Text>
|
||||
<Text style={styles.value}>{log.activity}</Text>
|
||||
<Text style={styles.value}>{log?.activity}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.logDetailRow}>
|
||||
<Text style={styles.label}>Date & Time:</Text>
|
||||
<Text style={styles.value}>{log.dateTime}</Text>
|
||||
<Text style={styles.value}>{log?.dateTime}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.logDetailRow}>
|
||||
<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 style={styles.logDetailRow}>
|
||||
<Text style={styles.label}>IP Address:</Text>
|
||||
<Text style={styles.value}>{log.ipAddress}</Text>
|
||||
<Text style={styles.value}>{log?.ipAddress}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.logDetailRow}>
|
||||
<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>
|
||||
|
||||
{log.headingMsg && (
|
||||
{log?.headingMsg && (
|
||||
<View style={styles.logDetailRow}>
|
||||
<Text style={styles.label}>Heading:</Text>
|
||||
<Text style={styles.value}>{log.headingMsg}</Text>
|
||||
<Text style={styles.value}>{log?.headingMsg}</Text>
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
@@ -278,23 +217,19 @@ const ProceedToBidDetail = () => {
|
||||
|
||||
<View style={styles.footerSpace} />
|
||||
</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>
|
||||
|
||||
)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 (
|
||||
<Animated.View
|
||||
entering={FadeInUp.duration(400)}
|
||||
@@ -105,11 +107,11 @@ const PurchaseTenderTile = ({
|
||||
setShowDetail(true)
|
||||
}}>
|
||||
<Text style={styles.dateText}>
|
||||
<Text style={styles.dateLabel}>Purchase Ends: </Text>
|
||||
<Text style={styles.dateLabel}>Bid Ends: </Text>
|
||||
{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')}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
@@ -121,7 +123,7 @@ const PurchaseTenderTile = ({
|
||||
{isLive ? (
|
||||
<CountdownTimer
|
||||
endDate={
|
||||
item?.tenderKeyDatesAmendment?.tenderPurchaseDate?.endDateTime
|
||||
item?.keydates?.bidSubmissionDate?.endDateTime
|
||||
}
|
||||
/>
|
||||
) : (
|
||||
@@ -133,7 +135,7 @@ const PurchaseTenderTile = ({
|
||||
disabled={!isLive}
|
||||
onPress={() => {
|
||||
if (isLive) {
|
||||
navigation.navigate('ProceedToBidDetail', { tender });
|
||||
navigation.navigate('ProceedToBidDetail', { tender });
|
||||
}
|
||||
}}
|
||||
activeOpacity={0.85}
|
||||
|
||||
@@ -53,6 +53,7 @@ const TenderBidding = () => {
|
||||
const navigation = useNavigation();
|
||||
|
||||
const [bidData] = useState<any>(route.params?.tenderData || null);
|
||||
const tenderData = route.params?.bidData || null;
|
||||
const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType | null>('A');
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({
|
||||
@@ -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 (
|
||||
<View style={styles.container}>
|
||||
<InsideHeader title="Tender Bidding Start" showArrow />
|
||||
@@ -467,20 +469,19 @@ const TenderBidding = () => {
|
||||
<View style={styles.card}>
|
||||
<Text style={styles.sectionTitle}>Bid Envelopes</Text>
|
||||
<View style={styles.envelopeRow}>
|
||||
{bidData?.showEA && (
|
||||
{tenderData?.showEA && (
|
||||
<EnvelopeButton
|
||||
title="Envelope A"
|
||||
envelopeType="A"
|
||||
onPress={() => setActiveEnvelope('A')}
|
||||
/>
|
||||
)}
|
||||
{bidData?.showEB && (
|
||||
{tenderData?.showEB && (
|
||||
<EnvelopeButton
|
||||
title="Envelope B"
|
||||
envelopeType="B"
|
||||
onPress={() => {
|
||||
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 && (
|
||||
<EnvelopeButton
|
||||
title="Envelope C"
|
||||
envelopeType="C"
|
||||
@@ -498,11 +499,11 @@ const TenderBidding = () => {
|
||||
</View>
|
||||
</View>
|
||||
{/* Envelope A List */}
|
||||
{bidData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && (
|
||||
{tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.length > 0 && activeEnvelope !== 'C' && (
|
||||
<View style={styles.card}>
|
||||
<Text style={styles.sectionTitle}>Envelope {activeEnvelope} Details</Text>
|
||||
<FlatList
|
||||
data={bidData?.[`tenderEnvelope${activeEnvelope}List`]}
|
||||
data={tenderData?.[`tenderEnvelope${activeEnvelope}List`]}
|
||||
keyExtractor={(item) => item?.[`tenderEnvelope${activeEnvelope}SequnceId`]?.toString()}
|
||||
renderItem={({ item }) => renderEnvelopeItem({ item, envelopeType: activeEnvelope })}
|
||||
scrollEnabled={false}
|
||||
|
||||
@@ -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
|
||||
+29
-28
@@ -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
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user