merge signup process

This commit is contained in:
rohit-kumar-fullstack
2026-01-13 12:38:43 +05:30
33 changed files with 4412 additions and 2325 deletions
+14 -14
View File
@@ -132,9 +132,9 @@ const ProceedToBidDetail = () => {
<View style={styles.section}>
<Text style={[styles.sectionTitle, { color: colors.black }]}>{`Envelope Submission Status`}</Text>
<View style={styles.statusGrid}>
<StatusIndicator status={tenderData.envelopeASubmittStatus} label="Envelope A" />
<StatusIndicator status={tenderData.envelopeBSubmittStatus} label="Envelope B" />
<StatusIndicator status={tenderData.envelopeCSubmittStatus} label="Envelope C" />
<StatusIndicator status={tenderData?.envelopeASubmittStatus} label="Envelope A" />
<StatusIndicator status={tenderData?.envelopeBSubmittStatus} label="Envelope B" />
<StatusIndicator status={tenderData?.envelopeCSubmittStatus} label="Envelope C" />
</View>
</View>
@@ -152,11 +152,11 @@ const ProceedToBidDetail = () => {
<View style={styles.section}>
<Text style={[styles.sectionTitle, { color: colors.black }]}>Tender Details</Text>
<View style={styles.detailsCard}>
<InfoRow label="Envelope Type" value={tenderData.envelopeType} />
<InfoRow label="Tender Stages" value={tenderData.tenderStages} />
<InfoRow label="Bid Withdrawal" value={tenderData.bidWithDraw} isHighlighted={tenderData.bidWithdrawStatus} />
<InfoRow label="Re-bid" value={tenderData.reBid} />
<InfoRow label="DSC Status" value={tenderData.dscStatus ? "Required" : "Not Required"} />
<InfoRow label="Envelope Type" value={tenderData?.envelopeType} />
<InfoRow label="Tender Stages" value={tenderData?.tenderStages} />
<InfoRow label="Bid Withdrawal" value={tenderData?.bidWithDraw} isHighlighted={tenderData?.bidWithdrawStatus} />
<InfoRow label="Re-bid" value={tenderData?.reBid} />
<InfoRow label="DSC Status" value={tenderData?.dscStatus ? "Required" : "Not Required"} />
</View>
</View>
@@ -179,12 +179,12 @@ const ProceedToBidDetail = () => {
<View style={styles.section}>
<Text style={[styles.sectionTitle, { color: colors.black }]}>Available Features</Text>
<View style={styles.chipsContainer}>
<FeatureChip label="View Bid" enabled={tenderData.viewBid} />
<FeatureChip label="Proceed to Bid" enabled={tenderData.proceedtoBid} />
<FeatureChip label="Show Envelope B" enabled={tenderData.showEB} />
<FeatureChip label="Show Envelope C" enabled={tenderData.showEC} />
<FeatureChip label="QCBS" enabled={tenderData.showQCBS} />
<FeatureChip label="LCS" enabled={tenderData.showLCS} />
<FeatureChip label="View Bid" enabled={tenderData?.viewBid} />
<FeatureChip label="Proceed to Bid" enabled={tenderData?.proceedtoBid} />
<FeatureChip label="Show Envelope B" enabled={tenderData?.showEB} />
<FeatureChip label="Show Envelope C" enabled={tenderData?.showEC} />
<FeatureChip label="QCBS" enabled={tenderData?.showQCBS} />
<FeatureChip label="LCS" enabled={tenderData?.showLCS} />
</View>
</View>
@@ -15,6 +15,9 @@ import MyInput from '../../../../src/Component/MyInput';
import { pick, types } from '@react-native-documents/picker';
import { InsideHeader } from '../../../Component/Index';
import colors from '../../../Constant/Color';
import { SUBMIT_ENVELOPE_A, SUBMIT_ENVELOPE_B, SUBMIT_ENVELOPE_FILE_A, SUBMIT_ENVELOPE_FILE_B } from '../../../Services/BBPS/ApiUrls';
import { CheckSquare, Square } from 'lucide-react-native';
import { apiCall } from '../../../Axios/Axios';
type EnvelopeType = 'A' | 'B' | 'C';
type EnvelopeFormState = {
@@ -33,28 +36,13 @@ interface InfoRowProps {
value: string;
}
interface TenderBiddingData {
data?: {
tenderNumber?: string;
nitNo?: string;
emdInFig?: string;
tenderRebid?: boolean;
showEA?: boolean;
showEB?: boolean;
showEC?: boolean;
tenderEnvelopeAList?: any[];
tenderEnvelopeBList?: any[];
tenderEnvelopeCList?: any[];
};
}
const TenderBidding = () => {
const route = useRoute();
const route = useRoute<any>();
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 tenderData: any = route.params?.bidData || null;
const [activeEnvelope, setActiveEnvelope] = useState<EnvelopeType>('A');
const [isLoading, setIsLoading] = useState(false);
const [envelopForm, setEnvelopForm] = useState<EnvelopeFormState>({
A: {},
@@ -64,7 +52,7 @@ const TenderBidding = () => {
const [loading, setLoading] = useState(false)
const [loadingUpload, setLoadingUpload] = useState(false)
const [check, setCheck] = useState(false)
const InfoRow = ({ title, value }: InfoRowProps) => (
<View style={styles.infoRow}>
@@ -145,7 +133,7 @@ const TenderBidding = () => {
activeEnvelope === envelopeType !== 'C' &&
!bidData?.[`envelope${envelopeType}SubmittStatus`];
// console.log("tender ana : ", tenderData)
return (
<View key={sequenceId}>
<View style={styles.envelopeItem}>
@@ -255,8 +243,9 @@ const TenderBidding = () => {
};
const buildEnvelopePayload = () => {
const list =
bidData?.[`tenderEnvelope${activeEnvelope}List`] || [];
tenderData?.[`tenderEnvelope${activeEnvelope}List`] || [];
const formValues = envelopForm?.[activeEnvelope] || {};
// 🔹 NON-FILE FIELDS (labelType !== '3')
@@ -306,17 +295,17 @@ const TenderBidding = () => {
};
});
return payload = {
deptId: bidData?.deptId,
tenderId: bidData?.tenderId,
const payload: any = {
deptId: tenderData?.deptId,
tenderId: tenderData?.tenderId,
[`tenderEnvelope${activeEnvelope}NameId`]:
bidData?.[`tenderEnvelope${activeEnvelope}List`]?.[0]?.[
tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.[0]?.[
`tenderEnvelope${activeEnvelope}NameId`
],
[`envelope${activeEnvelope}TemplateName`]:
bidData?.[`tenderEnvelope${activeEnvelope}List`]?.[0]?.[
tenderData?.[`tenderEnvelope${activeEnvelope}List`]?.[0]?.[
`envelope${activeEnvelope}TemplateName`
],
@@ -324,12 +313,13 @@ const TenderBidding = () => {
? fileData
: saveData,
};
// console.log("payload : ", payload)
return payload;
};
const validateEnvelope = () => {
const list = bidData?.[`tenderEnvelope${activeEnvelope}List`] || [];
const list = tenderData?.[`tenderEnvelope${activeEnvelope}List`] || [];
const formValues = envelopForm[activeEnvelope];
const missing = list.some((item: any) => {
@@ -363,12 +353,13 @@ const TenderBidding = () => {
setLoading(true)
if (envelopForm?.[activeEnvelope]?.[3]) {
handleSubmitEnvelopeFile()
return
}
try {
const res = await apiCallForPostWithToken(SUBMIT_ENVELOPE_A, payload)
const res = await apiCall('post',SUBMIT_ENVELOPE_A, payload)
console.log("res A envelop : ", res)
ToastAndroid.show(res.message, ToastAndroid.SHORT)
ToastAndroid.show(res?.message, ToastAndroid.SHORT)
navigation.goBack()
@@ -388,11 +379,14 @@ const TenderBidding = () => {
setLoading(true)
const payload = buildEnvelopePayload();
console.log('Envelope B Payload:', payload);
if (envelopForm?.[activeEnvelope]?.[3]) {
handleSubmitEnvelopeFile()
return
}
try {
const res = await apiCallForPostWithToken(SUBMIT_ENVELOPE_B, payload)
const res = await apiCall('post', SUBMIT_ENVELOPE_B, payload)
console.log("res B envelop : ", res)
ToastAndroid.show(res.message, ToastAndroid.SHORT)
@@ -421,8 +415,7 @@ const TenderBidding = () => {
console.log("reuestDto for fil doc : ", formData)
// return
const res = await apiCallForPostWithToken(activeEnvelope === 'B' ? SUBMIT_ENVELOPE_B : SUBMIT_ENVELOPE_A, payload)
const res = await apiCall('post', activeEnvelope === 'B' ? SUBMIT_ENVELOPE_FILE_B : SUBMIT_ENVELOPE_FILE_A, payload)
console.log(`res file ${activeEnvelope} Payload:`, res)
ToastAndroid.show(res.message, ToastAndroid.SHORT)
// navigation.goBack()
@@ -433,18 +426,8 @@ const TenderBidding = () => {
}
}
if (isLoading) {
return (
<>
<View style={styles.loadingContainer}>
<Text>Loading...</Text>
</View>
</>
);
}
// console.log("route for date : ", bidData)
// console.log("bid envelop : ", tenderData)
return (
<View style={styles.container}>
<InsideHeader title="Tender Bidding Start" showArrow />
@@ -508,15 +491,18 @@ const TenderBidding = () => {
renderItem={({ item }) => renderEnvelopeItem({ item, envelopeType: activeEnvelope })}
scrollEnabled={false}
/>
{/* <View style={[styles.infoRow, { flexDirection: 'row', gap: 10 }]}>
<View style={[styles.infoRow, { flexDirection: 'row', gap: 10 }]}>
<TouchableOpacity onPress={() => setCheck(!check)}>
{check ? <Fontisto name="checkbox-active" size={24} color={colors.primary} /> :
<Fontisto name="checkbox-passive" size={24} color={colors.primary} />
}</TouchableOpacity>
{check ? (
<CheckSquare size={24} color={colors.primary} />
) : (
<Square size={24} color={colors.primary} />
)}</TouchableOpacity>
<Text>Check First Terms&Condition</Text>
</View> */}
</View>
</View>
)}
<View style={styles.footer}>
{hasEnvelopes() ? (
<TouchableOpacity
@@ -566,7 +552,7 @@ const styles = StyleSheet.create({
alignItems: 'center',
},
card: {
backgroundColor: '#fff',
backgroundColor: colors.primaryHighlight,
borderRadius: 12,
padding: 16,
marginBottom: 16,
@@ -607,7 +593,7 @@ const styles = StyleSheet.create({
flexWrap: 'wrap',
},
envelopeButton: {
backgroundColor: '#EEF2FF',
backgroundColor: colors.secondaryHighLight,
paddingVertical: 10,
paddingHorizontal: 14,
borderRadius: 8,
@@ -615,7 +601,7 @@ const styles = StyleSheet.create({
alignItems: 'center',
},
envelopeButtonText: {
color: '#3F51B5',
color: colors.primary,
fontWeight: '600',
fontSize: 14,
},
@@ -625,7 +611,7 @@ const styles = StyleSheet.create({
borderRadius: 10,
padding: 12,
marginBottom: 12,
backgroundColor: '#f9f9f9',
backgroundColor: colors.primaryHighlight,
flexDirection: 'row',
justifyContent: 'space-between'
},
@@ -635,7 +621,7 @@ const styles = StyleSheet.create({
marginVertical: 20,
},
primaryButton: {
backgroundColor: '#3F51B5',
backgroundColor: colors.primary,
paddingVertical: 14,
paddingHorizontal: 28,
borderRadius: 10,
@@ -657,7 +643,7 @@ const styles = StyleSheet.create({
alignItems: 'center',
},
secondaryButtonText: {
color: '#3F51B5',
color: colors.primary,
fontWeight: '600',
fontSize: 15,
},